corosync-cmap使用指南
cmap是corosync的内存key/value存储。cmap提供了如下功能:
- 创建key
- 修改已经存在的key
- 移除key
- 根据前缀迭代key
- 跟踪key的改变
cmap api
cmap的value支持如下几种类型:
CMAP_VALUETYPE_INT8 - 8-bit signed integer
CMAP_VALUETYPE_UINT8 - 8-bit unsigned integer
CMAP_VALUETYPE_INT16 - 16-bit signed integer
CMAP_VALUETYPE_UINT16 - 16-bit unsigned integer
CMAP_VALUETYPE_INT32 - 32-bit signed integer
CMAP_VALUETYPE_UINT32 - 32-bit unsigned integer
CMAP_VALUETYPE_INT64 - 64-bit signed integer
CMAP_VALUETYPE_UINT64 - 64-bit unsigned integer
CMAP_VALUETYPE_FLOAT - Float value
CMAP_VALUETYPE_DOUBLE - Double value
CMAP_VALUETYPE_STRING - C-style string
CMAP_VALUETYPE_BINARY - Binary data, byte with zero value has no special meaning
-
cmap_initialize
cs_error_t cmap_initialize (cmap_handle_t *handle );
初始化一个cmap句柄,后面使用该句柄进行key的插入修改删除和跟踪。
-
cmap_set
cs_error_t cmap_set (cmap_handle_t handle, // 初始化时生成的句柄 const char *key_name, // 要添加的key名称 const void *value, // key对应的值 size_t value_len, // 值的长度 cmap_value_types_t type); // 值的类型
也可以使用指定值类型的接口:
cs_error_t cmap_set_int8(cmap_handle_t handle, const char *key_name, int8_t value); cs_error_t cmap_set_uint8(cmap_handle_t handle, const char *key_name, uint8_t value); cs_error_t cmap_set_int16(cmap_handle_t handle, const char *key_name, int16_t value); cs_error_t cmap_set_uint16(cmap_handle_t handle, const char *key_name, uint16_t value); cs_error_t cmap_set_int32(cmap_handle_t handle, const char *key_name, int32_t value); cs_error_t cmap_set_uint32(cmap_handle_t handle, const char *key_name, uint32_t value); cs_error_t cmap_set_int64(cmap_handle_t handle, const char *key_name, int64_t value); cs_error_t cmap_set_uint64(cmap_handle_t handle, const char *key_name, uint64_t value); cs_error_t cmap_set_float(cmap_handle_t handle, const char *key_name, float value); cs_error_t cmap_set_double(cmap_handle_t handle, const char *key_name, double value); cs_error_t cmap_set_string(cmap_handle_t handle, const char *key_name, const char *value);
-
cmap_get
cmap_get用于读取key对应的值,接口与cmap_set相似:
cs_error_t cmap_get (cmap_handle_t handle, // cmap句柄 const char *key_name, // 要查看的key void *value, // key对应的值会存到value size_t *value_len, // value的长度会存到这里 cmap_value_types_t *type); // value的类型会存到这里
同样的,若知道value的明确类型,则可以使用指定类型的接口:
cs_error_t cmap_get_int8 (cmap_handle_t handle, const char *key_name, int8_t *i8); cs_error_t cmap_get_uint8 (cmap_handle_t handle, const char *key_name, uint8_t *u8); cs_error_t cmap_get_int16 (cmap_handle_t handle, const char *key_name, int16_t *i16); cs_error_t cmap_get_uint16 (cmap_handle_t handle, const char *key_name, uint16_t *u16); cs_error_t cmap_get_int32 (cmap_handle_t handle, const char *key_name, int32_t *i32); cs_error_t cmap_get_uint32 (cmap_handle_t handle, const char *key_name, uint32_t *u32); cs_error_t cmap_get_int64 (cmap_handle_t handle, const char *key_name, int64_t *i64); cs_error_t cmap_get_uint64 (cmap_handle_t handle, const char *key_name, uint64_t *u64); cs_error_t cmap_get_float (cmap_handle_t handle, const char *key_name, float *flt); cs_error_t cmap_get_double (cmap_handle_t handle, const char *key_name, double *dbl); cs_error_t cmap_get_string (cmap_handle_t handle, const char *key_name, char **str);
-
cmap_delete
cs_error_t cmap_delete(cmap_handle_t handle, const char *key_name);
删除某个可以。
-
cmap_track_add
cs_error_t cmap_track_add (cmap_handle_t handle, // cmap句柄 const char *key_name, // key名 int32_t track_type, // track的类型 cmap_notify_fn_t notify_fn, // value变更时的回调函数 void *user_data, // 回调时传递的数据 cmap_track_handle_t *cmap_track_handle // 用于调度分发的track句柄 );
添加对某个key的value的变化跟踪,当value改变时会触发notify_fn回调。需在进程中循环调用cmap_dispatch。
-
cmap_finalize
cs_error_t cmap_finalize (cmap_handle_t handle);
释放cmap句柄。
cmap的大致使用流程如下: