Signed-off-by: Steven Dake <sdake@xxxxxxxxxx> --- corosync.spec.in | 3 - exec/Makefile.am | 24 +--- exec/coroparse.c | 2 +- exec/icmap.c | 2 +- exec/ipc_glue.c | 2 +- exec/main.c | 2 +- exec/mainconfig.c | 2 +- exec/service.c | 2 +- exec/totemconfig.c | 2 +- exec/vsf_quorum.c | 2 +- include/Makefile.am | 4 +- include/corosync/engine/icmap.h | 262 --------------------------------------- include/corosync/icmap.h | 262 +++++++++++++++++++++++++++++++++++++++ services/cfg.c | 2 +- services/cmap.c | 2 +- services/mon.c | 2 +- services/testquorum.c | 2 +- services/votequorum.c | 2 +- services/wd.c | 2 +- 19 files changed, 283 insertions(+), 300 deletions(-) delete mode 100644 include/corosync/engine/icmap.h create mode 100644 include/corosync/icmap.h diff --git a/corosync.spec.in b/corosync.spec.in index c996d87..53b9216 100644 --- a/corosync.spec.in +++ b/corosync.spec.in @@ -247,7 +247,6 @@ This package contains corosync libraries. %{_libdir}/libcmap.so.* %{_libdir}/libevs.so.* %{_libdir}/libtotem_pg.so.* -%{_libdir}/libicmap.so.* %{_libdir}/libquorum.so.* %{_libdir}/libvotequorum.so.* %{_libdir}/libpload.so.* @@ -297,7 +296,6 @@ The Corosync Cluster Engine APIs. %{_includedir}/corosync/lcr/lcr_ifact.h %dir %{_includedir}/corosync/engine %{_includedir}/corosync/engine/config.h -%{_includedir}/corosync/engine/icmap.h %{_includedir}/corosync/engine/quorum.h %{_libdir}/libcfg.so %{_libdir}/libcpg.so @@ -308,7 +306,6 @@ The Corosync Cluster Engine APIs. %{_libdir}/libvotequorum.so %{_libdir}/libpload.so %{_libdir}/libsam.so -%{_libdir}/libicmap.so %{_libdir}/pkgconfig/*.pc %{_mandir}/man3/cpg_*3* %{_mandir}/man3/evs_*3* diff --git a/exec/Makefile.am b/exec/Makefile.am index c738570..a0ca646 100644 --- a/exec/Makefile.am +++ b/exec/Makefile.am @@ -42,22 +42,20 @@ if BUILD_RDMA TOTEM_SRC += totemiba.c endif -ICMAP_SRC = icmap.c LCRSO_SRC = vsf_ykd.c coroparse.c vsf_quorum.c LCRSO_OBJS = $(LCRSO_SRC:%.c=%.o) LCRSO = $(LCRSO_SRC:%.c=%.lcrso) -lib_LIBRARIES = libtotem_pg.a libicmap.a +lib_LIBRARIES = libtotem_pg.a sbin_PROGRAMS = corosync libtotem_pg_a_SOURCES = $(TOTEM_SRC) -libicmap_a_SOURCES = $(ICMAP_SRC) corosync_SOURCES = main.c ipc_glue.c util.c sync.c apidef.c service.c \ timer.c totemconfig.c mainconfig.c quorum.c schedwrk.c \ - ../lcr/lcr_ifact.c evil.c syncv2.c logsys.c -corosync_LDADD = -ltotem_pg -licmap $(LIBQB_LIBS) $(statgrab_LIBS) -corosync_DEPENDENCIES = libtotem_pg.so.$(SONAME) libicmap.so.$(SONAME) + ../lcr/lcr_ifact.c evil.c syncv2.c logsys.c icmap.c +corosync_LDADD = -ltotem_pg $(LIBQB_LIBS) $(statgrab_LIBS) +corosync_DEPENDENCIES = libtotem_pg.so.$(SONAME) corosync_LDFLAGS = $(OS_DYFLAGS) -L./ TOTEM_OBJS = $(TOTEM_SRC:%.c=%.o) @@ -78,18 +76,13 @@ EXTRA_DIST = $(LCRSO_SRC) if BUILD_DARWIN %.lcrso: %.o - $(CC) $(LDFLAGS) $(CFLAGS) -L$(top_builddir)/exec -licmap -bundle -bind_at_load -bundle_loader ./corosync $^ -o $@ + $(CC) $(LDFLAGS) $(CFLAGS) -L$(top_builddir)/exec -bundle -bind_at_load -bundle_loader ./corosync $^ -o $@ libtotem_pg.so.$(SONAME): $(TOTEM_OBJS) $(CC) $(LDFLAGS) $(DARWIN_OPTS) $(TOTEM_OBJS) -o $@ -lpthread ln -sf libtotem_pg.so.$(SONAME) libtotem_pg.so ln -sf libtotem_pg.so.$(SONAME) libtotem_pg.so.$(SOMAJOR) -libicmap.so.$(SONAME): $(ICMAP_OBJS) - $(CC) $(LDFLAGS) $(DARWIN_OPTS) $(ICMAP_OBJS) -o $@ -lpthread - ln -sf libicmap.so.$(SONAME) libicmap.so - ln -sf libicmap.so.$(SONAME) libicmap.so.$(SOMAJOR) - else if BUILD_SOLARIS @@ -113,13 +106,6 @@ libtotem_pg.so.$(SONAME): $(TOTEM_OBJS) ln -sf libtotem_pg.so.$(SONAME) libtotem_pg.so ln -sf libtotem_pg.so.$(SONAME) libtotem_pg.so.$(SOMAJOR) -libicmap.so.$(SONAME): $(ICMAP_OBJS) - $(CC) -shared -o $@ \ - -Wl,-soname=libicmap.so.$(SOMAJOR) \ - $(LDFLAGS) $^ -lpthread - ln -sf libicmap.so.$(SONAME) libicmap.so - ln -sf libicmap.so.$(SONAME) libicmap.so.$(SOMAJOR) - endif endif diff --git a/exec/coroparse.c b/exec/coroparse.c index e84e6f2..417f584 100644 --- a/exec/coroparse.c +++ b/exec/coroparse.c @@ -59,7 +59,7 @@ #include <qb/qbutil.h> #define LOGSYS_UTILS_ONLY 1 #include <corosync/logsys.h> -#include <corosync/engine/icmap.h> +#include <corosync/icmap.h> #include <corosync/engine/config.h> #include "util.h" diff --git a/exec/icmap.c b/exec/icmap.c index 14390d4..c1d9bf1 100644 --- a/exec/icmap.c +++ b/exec/icmap.c @@ -41,7 +41,7 @@ #include <qb/qbdefs.h> #include <corosync/list.h> -#include <corosync/engine/icmap.h> +#include <corosync/icmap.h> #define ICMAP_MAX_VALUE_LEN (16*1024) diff --git a/exec/ipc_glue.c b/exec/ipc_glue.c index 5f5951f..e18ac55 100644 --- a/exec/ipc_glue.c +++ b/exec/ipc_glue.c @@ -52,7 +52,7 @@ #include <corosync/corodefs.h> #include <corosync/totem/totempg.h> #include <corosync/logsys.h> -#include <corosync/engine/icmap.h> +#include <corosync/icmap.h> #include "mainconfig.h" #include "sync.h" diff --git a/exec/main.c b/exec/main.c index a39fb83..9585998 100644 --- a/exec/main.c +++ b/exec/main.c @@ -109,7 +109,7 @@ #include <corosync/totem/totempg.h> #include <corosync/engine/config.h> #include <corosync/logsys.h> -#include <corosync/engine/icmap.h> +#include <corosync/icmap.h> #include "quorum.h" #include "totemsrp.h" diff --git a/exec/mainconfig.c b/exec/mainconfig.c index 282f02c..9ca3d92 100644 --- a/exec/mainconfig.c +++ b/exec/mainconfig.c @@ -50,7 +50,7 @@ #include <corosync/list.h> #include <corosync/totem/totem.h> #include <corosync/logsys.h> -#include <corosync/engine/icmap.h> +#include <corosync/icmap.h> #include "util.h" #include "mainconfig.h" diff --git a/exec/service.c b/exec/service.c index d70ffd4..d9bc1b9 100644 --- a/exec/service.c +++ b/exec/service.c @@ -46,7 +46,7 @@ #include "mainconfig.h" #include "util.h" #include <corosync/logsys.h> -#include <corosync/engine/icmap.h> +#include <corosync/icmap.h> #include "timer.h" #include <corosync/totem/totempg.h> diff --git a/exec/totemconfig.c b/exec/totemconfig.c index e5893b9..3a043c5 100644 --- a/exec/totemconfig.c +++ b/exec/totemconfig.c @@ -55,7 +55,7 @@ #include <corosync/totem/totem.h> #include <corosync/config.h> #include <corosync/logsys.h> -#include <corosync/engine/icmap.h> +#include <corosync/icmap.h> #ifdef HAVE_LIBNSS #include <nss.h> diff --git a/exec/vsf_quorum.c b/exec/vsf_quorum.c index ebe8147..6c2fd42 100644 --- a/exec/vsf_quorum.c +++ b/exec/vsf_quorum.c @@ -67,7 +67,7 @@ #include <corosync/coroapi.h> #include <corosync/logsys.h> #include <corosync/engine/quorum.h> -#include <corosync/engine/icmap.h> +#include <corosync/icmap.h> LOGSYS_DECLARE_SUBSYS ("QUORUM"); diff --git a/include/Makefile.am b/include/Makefile.am index a8fbaca..a8f3477 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -37,11 +37,11 @@ CS_H = hdb.h cs_config.h cpg.h cfg.h evs.h mar_gen.h swab.h \ CS_INTERNAL_H = ipc_cfg.h ipc_cpg.h ipc_evs.h ipc_pload.h ipc_quorum.h \ jhash.h pload.h quorum.h sq.h ipc_votequorum.h ipc_cmap.h \ - logsys.h coroapi.h + logsys.h coroapi.h icmap.h LCR_H = lcr_ckpt.h lcr_comp.h lcr_ifact.h -ENGINE_H = config.h quorum.h icmap.h +ENGINE_H = config.h quorum.h TOTEM_H = totem.h totemip.h totempg.h diff --git a/include/corosync/engine/icmap.h b/include/corosync/engine/icmap.h deleted file mode 100644 index 896800b..0000000 --- a/include/corosync/engine/icmap.h +++ /dev/null @@ -1,262 +0,0 @@ -/* - * Copyright (c) 2011 Red Hat, Inc. - * - * Author: Jan Friesse (jfriesse@xxxxxxxxxx) - * - * All rights reserved. - * - * This software licensed under BSD license, the text of which follows: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - Neither the name of the Red Hat, Inc. nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef ICMAP_H_DEFINED -#define ICMAP_H_DEFINED - -#include <stdlib.h> -#include <corosync/corotypes.h> -#include <qb/qbmap.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Maximum length of key in icmap - */ -#define ICMAP_KEYNAME_MAXLEN 255 - -/* - * Minimum lenght of key in icmap - */ -#define ICMAP_KEYNAME_MINLEN 3 - -/* - * Possible types of value. Binary is raw data without trailing zero with given length - */ -typedef enum { - ICMAP_VALUETYPE_INT8 = 1, - ICMAP_VALUETYPE_UINT8 = 2, - ICMAP_VALUETYPE_INT16 = 3, - ICMAP_VALUETYPE_UINT16 = 4, - ICMAP_VALUETYPE_INT32 = 5, - ICMAP_VALUETYPE_UINT32 = 6, - ICMAP_VALUETYPE_INT64 = 7, - ICMAP_VALUETYPE_UINT64 = 8, - ICMAP_VALUETYPE_FLOAT = 9, - ICMAP_VALUETYPE_DOUBLE = 10, - ICMAP_VALUETYPE_STRING = 11, - ICMAP_VALUETYPE_BINARY = 12, -} icmap_value_types_t; - -/* - * Tracking values. - */ -#define ICMAP_TRACK_ADD 4 -#define ICMAP_TRACK_DELETE 1 -#define ICMAP_TRACK_MODIFY 2 -/* - * Whole prefix is tracked, instead of key only (so "totem." tracking means that - * "totem.nodeid", "totem.version", ... applies). This value is also never returned - * inside of callback and is used only in adding track - */ -#define ICMAP_TRACK_PREFIX 8 - -/* - * Structure passed as new_value and old_value in change callback. It contains type of - * key, length of key and pointer to value of key - */ -struct icmap_notify_value { - icmap_value_types_t type; - size_t len; - const void *data; -}; - -/* - * Prototype for notify callback function. Even is one of ICMAP_TRACK_* event, key_name is - * changed key, new and old_value contains values or are zeroed (in other words, type is non - * existing 0 type) if there were no old (creating of key) or new (deleting of key) value. - * user_data are passed when adding tracking. - */ -typedef void (*icmap_notify_fn_t) ( - int32_t event, - const char *key_name, - struct icmap_notify_value new_value, - struct icmap_notify_value old_value, - void *user_data); - -/* - * Itterator type - */ -typedef qb_map_iter_t *icmap_iter_t; - -/* - * Track type - */ -typedef struct icmap_track *icmap_track_t; - -/* - * Initialize icmap - */ -extern cs_error_t icmap_init(void); - -/* - * Store value with value_len length and type as key_name name in icmap. - */ -extern cs_error_t icmap_set( - const char *key_name, - const void *value, - size_t value_len, - icmap_value_types_t type); - -/* - * Shortcuts for setting values - */ -extern cs_error_t icmap_set_int8(const char *key_name, int8_t value); -extern cs_error_t icmap_set_uint8(const char *key_name, uint8_t value); -extern cs_error_t icmap_set_int16(const char *key_name, int16_t value); -extern cs_error_t icmap_set_uint16(const char *key_name, uint16_t value); -extern cs_error_t icmap_set_int32(const char *key_name, int32_t value); -extern cs_error_t icmap_set_uint32(const char *key_name, uint32_t value); -extern cs_error_t icmap_set_int64(const char *key_name, int64_t value); -extern cs_error_t icmap_set_uint64(const char *key_name, uint64_t value); -extern cs_error_t icmap_set_float(const char *key_name, float value); -extern cs_error_t icmap_set_double(const char *key_name, double value); -extern cs_error_t icmap_set_string(const char *key_name, const char *value); - -/* - * Delete key from map - */ -extern cs_error_t icmap_delete(const char *key_name); - -/* - * Retrieve value of key key_name and store it in user preallocated value pointer. - * value can be NULL, and then only value_len and/or type is returned (both of them - * can also be NULL). If value is not NULL, actual length of value in map is checked - * against value_len. If *value_len is shorter then length of value in map, error - * CS_ERR_INVALID_PARAM is returned. After successful copy of value, value_len is - * set to actual length of value in map. - */ -extern cs_error_t icmap_get( - const char *key_name, - void *value, - size_t *value_len, - icmap_value_types_t *type); - -/* - * Shortcuts for icmap_get - */ -extern cs_error_t icmap_get_int8(const char *key_name, int8_t *i8); -extern cs_error_t icmap_get_uint8(const char *key_name, uint8_t *u8); -extern cs_error_t icmap_get_int16(const char *key_name, int16_t *i16); -extern cs_error_t icmap_get_uint16(const char *key_name, uint16_t *u16); -extern cs_error_t icmap_get_int32(const char *key_name, int32_t *i32); -extern cs_error_t icmap_get_uint32(const char *key_name, uint32_t *u32); -extern cs_error_t icmap_get_int64(const char *key_name, int64_t *i64); -extern cs_error_t icmap_get_uint64(const char *key_name, uint64_t *u64); -extern cs_error_t icmap_get_float(const char *key_name, float *flt); -extern cs_error_t icmap_get_double(const char *key_name, double *dbl); -/* - * Shortcut for icmap_get for string type. Returned string is newly allocated and - * caller is responsible for freeing memory - */ -extern cs_error_t icmap_get_string(const char *key_name, char **str); - -/* - * Defined only for [u]int* values. It adds step to current value. - */ -extern cs_error_t icmap_adjust_int(const char *key_name, int32_t step); - -/* - * Increase stored value by one - */ -extern cs_error_t icmap_inc(const char *key_name); - -/* - * Decrease stored value by one - */ -extern cs_error_t icmap_dec(const char *key_name); - -/* - * Initialize iterator with given prefix - */ -extern icmap_iter_t icmap_iter_init(const char *prefix); - -/* - * Return next item in iterator iter. value_len and type are optional (= can be NULL), but if set, - * length of returned value and/or type is returned. Function returns following key_name or NULL if - * iteration is over. - */ -extern const char *icmap_iter_next(icmap_iter_t iter, size_t *value_len, icmap_value_types_t *type); - -/* - * Finalize iterator - */ -extern void icmap_iter_finalize(icmap_iter_t iter); - -/* - * Add tracking function for given key_name. Tracked changes (add|modify|delete) depend on track_type, - * which is bitwise or of ICMAP_TRACK_* values. notify_fn is called on change, where user_data pointer - * is passed (unchanged). Value which can be used to delete tracking is passed as icmap_track. - */ -extern cs_error_t icmap_track_add( - const char *key_name, - int32_t track_type, - icmap_notify_fn_t notify_fn, - void *user_data, - icmap_track_t *icmap_track); - -/* - * Return user data associated with given track - */ -extern void *icmap_track_get_user_data(icmap_track_t icmap_track); - -/* - * Remove previously added track - */ -extern cs_error_t icmap_track_delete(icmap_track_t icmap_track); - -/* - * Set read-only access for given key (key_name) or prefix, if prefix is set. ro_access - * can be !0, which means, that old information about ro of this key is deleted. - * Read-only access is used only in CMAP service! (in other word it prevents users - * from deleting/changing key, but doesn't guarantee anything for internal icmap users. - */ -extern cs_error_t icmap_set_ro_access(const char *key_name, int prefix, int ro_access); - -/* - * Check in given key is read only. Returns !0 if so, otherwise (key is rw) 0. - */ -extern int icmap_is_key_ro(const char *key_name); - -/* - * Converts given key_name to valid key name (replacing all prohibited characters by _) - */ -extern void icmap_convert_name_to_valid_name(char *key_name); - -#ifdef __cplusplus -} -#endif - -#endif /* ICMAP_H_DEFINED */ diff --git a/include/corosync/icmap.h b/include/corosync/icmap.h new file mode 100644 index 0000000..896800b --- /dev/null +++ b/include/corosync/icmap.h @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2011 Red Hat, Inc. + * + * Author: Jan Friesse (jfriesse@xxxxxxxxxx) + * + * All rights reserved. + * + * This software licensed under BSD license, the text of which follows: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * - Neither the name of the Red Hat, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef ICMAP_H_DEFINED +#define ICMAP_H_DEFINED + +#include <stdlib.h> +#include <corosync/corotypes.h> +#include <qb/qbmap.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Maximum length of key in icmap + */ +#define ICMAP_KEYNAME_MAXLEN 255 + +/* + * Minimum lenght of key in icmap + */ +#define ICMAP_KEYNAME_MINLEN 3 + +/* + * Possible types of value. Binary is raw data without trailing zero with given length + */ +typedef enum { + ICMAP_VALUETYPE_INT8 = 1, + ICMAP_VALUETYPE_UINT8 = 2, + ICMAP_VALUETYPE_INT16 = 3, + ICMAP_VALUETYPE_UINT16 = 4, + ICMAP_VALUETYPE_INT32 = 5, + ICMAP_VALUETYPE_UINT32 = 6, + ICMAP_VALUETYPE_INT64 = 7, + ICMAP_VALUETYPE_UINT64 = 8, + ICMAP_VALUETYPE_FLOAT = 9, + ICMAP_VALUETYPE_DOUBLE = 10, + ICMAP_VALUETYPE_STRING = 11, + ICMAP_VALUETYPE_BINARY = 12, +} icmap_value_types_t; + +/* + * Tracking values. + */ +#define ICMAP_TRACK_ADD 4 +#define ICMAP_TRACK_DELETE 1 +#define ICMAP_TRACK_MODIFY 2 +/* + * Whole prefix is tracked, instead of key only (so "totem." tracking means that + * "totem.nodeid", "totem.version", ... applies). This value is also never returned + * inside of callback and is used only in adding track + */ +#define ICMAP_TRACK_PREFIX 8 + +/* + * Structure passed as new_value and old_value in change callback. It contains type of + * key, length of key and pointer to value of key + */ +struct icmap_notify_value { + icmap_value_types_t type; + size_t len; + const void *data; +}; + +/* + * Prototype for notify callback function. Even is one of ICMAP_TRACK_* event, key_name is + * changed key, new and old_value contains values or are zeroed (in other words, type is non + * existing 0 type) if there were no old (creating of key) or new (deleting of key) value. + * user_data are passed when adding tracking. + */ +typedef void (*icmap_notify_fn_t) ( + int32_t event, + const char *key_name, + struct icmap_notify_value new_value, + struct icmap_notify_value old_value, + void *user_data); + +/* + * Itterator type + */ +typedef qb_map_iter_t *icmap_iter_t; + +/* + * Track type + */ +typedef struct icmap_track *icmap_track_t; + +/* + * Initialize icmap + */ +extern cs_error_t icmap_init(void); + +/* + * Store value with value_len length and type as key_name name in icmap. + */ +extern cs_error_t icmap_set( + const char *key_name, + const void *value, + size_t value_len, + icmap_value_types_t type); + +/* + * Shortcuts for setting values + */ +extern cs_error_t icmap_set_int8(const char *key_name, int8_t value); +extern cs_error_t icmap_set_uint8(const char *key_name, uint8_t value); +extern cs_error_t icmap_set_int16(const char *key_name, int16_t value); +extern cs_error_t icmap_set_uint16(const char *key_name, uint16_t value); +extern cs_error_t icmap_set_int32(const char *key_name, int32_t value); +extern cs_error_t icmap_set_uint32(const char *key_name, uint32_t value); +extern cs_error_t icmap_set_int64(const char *key_name, int64_t value); +extern cs_error_t icmap_set_uint64(const char *key_name, uint64_t value); +extern cs_error_t icmap_set_float(const char *key_name, float value); +extern cs_error_t icmap_set_double(const char *key_name, double value); +extern cs_error_t icmap_set_string(const char *key_name, const char *value); + +/* + * Delete key from map + */ +extern cs_error_t icmap_delete(const char *key_name); + +/* + * Retrieve value of key key_name and store it in user preallocated value pointer. + * value can be NULL, and then only value_len and/or type is returned (both of them + * can also be NULL). If value is not NULL, actual length of value in map is checked + * against value_len. If *value_len is shorter then length of value in map, error + * CS_ERR_INVALID_PARAM is returned. After successful copy of value, value_len is + * set to actual length of value in map. + */ +extern cs_error_t icmap_get( + const char *key_name, + void *value, + size_t *value_len, + icmap_value_types_t *type); + +/* + * Shortcuts for icmap_get + */ +extern cs_error_t icmap_get_int8(const char *key_name, int8_t *i8); +extern cs_error_t icmap_get_uint8(const char *key_name, uint8_t *u8); +extern cs_error_t icmap_get_int16(const char *key_name, int16_t *i16); +extern cs_error_t icmap_get_uint16(const char *key_name, uint16_t *u16); +extern cs_error_t icmap_get_int32(const char *key_name, int32_t *i32); +extern cs_error_t icmap_get_uint32(const char *key_name, uint32_t *u32); +extern cs_error_t icmap_get_int64(const char *key_name, int64_t *i64); +extern cs_error_t icmap_get_uint64(const char *key_name, uint64_t *u64); +extern cs_error_t icmap_get_float(const char *key_name, float *flt); +extern cs_error_t icmap_get_double(const char *key_name, double *dbl); +/* + * Shortcut for icmap_get for string type. Returned string is newly allocated and + * caller is responsible for freeing memory + */ +extern cs_error_t icmap_get_string(const char *key_name, char **str); + +/* + * Defined only for [u]int* values. It adds step to current value. + */ +extern cs_error_t icmap_adjust_int(const char *key_name, int32_t step); + +/* + * Increase stored value by one + */ +extern cs_error_t icmap_inc(const char *key_name); + +/* + * Decrease stored value by one + */ +extern cs_error_t icmap_dec(const char *key_name); + +/* + * Initialize iterator with given prefix + */ +extern icmap_iter_t icmap_iter_init(const char *prefix); + +/* + * Return next item in iterator iter. value_len and type are optional (= can be NULL), but if set, + * length of returned value and/or type is returned. Function returns following key_name or NULL if + * iteration is over. + */ +extern const char *icmap_iter_next(icmap_iter_t iter, size_t *value_len, icmap_value_types_t *type); + +/* + * Finalize iterator + */ +extern void icmap_iter_finalize(icmap_iter_t iter); + +/* + * Add tracking function for given key_name. Tracked changes (add|modify|delete) depend on track_type, + * which is bitwise or of ICMAP_TRACK_* values. notify_fn is called on change, where user_data pointer + * is passed (unchanged). Value which can be used to delete tracking is passed as icmap_track. + */ +extern cs_error_t icmap_track_add( + const char *key_name, + int32_t track_type, + icmap_notify_fn_t notify_fn, + void *user_data, + icmap_track_t *icmap_track); + +/* + * Return user data associated with given track + */ +extern void *icmap_track_get_user_data(icmap_track_t icmap_track); + +/* + * Remove previously added track + */ +extern cs_error_t icmap_track_delete(icmap_track_t icmap_track); + +/* + * Set read-only access for given key (key_name) or prefix, if prefix is set. ro_access + * can be !0, which means, that old information about ro of this key is deleted. + * Read-only access is used only in CMAP service! (in other word it prevents users + * from deleting/changing key, but doesn't guarantee anything for internal icmap users. + */ +extern cs_error_t icmap_set_ro_access(const char *key_name, int prefix, int ro_access); + +/* + * Check in given key is read only. Returns !0 if so, otherwise (key is rw) 0. + */ +extern int icmap_is_key_ro(const char *key_name); + +/* + * Converts given key_name to valid key name (replacing all prohibited characters by _) + */ +extern void icmap_convert_name_to_valid_name(char *key_name); + +#ifdef __cplusplus +} +#endif + +#endif /* ICMAP_H_DEFINED */ diff --git a/services/cfg.c b/services/cfg.c index a4d43f4..6703885 100644 --- a/services/cfg.c +++ b/services/cfg.c @@ -61,7 +61,7 @@ #include <corosync/lcr/lcr_comp.h> #include <corosync/logsys.h> #include <corosync/coroapi.h> -#include <corosync/engine/icmap.h> +#include <corosync/icmap.h> #include <corosync/corodefs.h> LOGSYS_DECLARE_SUBSYS ("CFG"); diff --git a/services/cmap.c b/services/cmap.c index 62e73e7..3081173 100644 --- a/services/cmap.c +++ b/services/cmap.c @@ -54,7 +54,7 @@ #include <corosync/lcr/lcr_comp.h> #include <corosync/logsys.h> #include <corosync/coroapi.h> -#include <corosync/engine/icmap.h> +#include <corosync/icmap.h> #define hdb_error_to_cs(_result_) qb_to_cs_error(_result_) diff --git a/services/mon.c b/services/mon.c index 665e768..42735b0 100644 --- a/services/mon.c +++ b/services/mon.c @@ -45,7 +45,7 @@ #include <corosync/coroapi.h> #include <corosync/list.h> #include <corosync/logsys.h> -#include <corosync/engine/icmap.h> +#include <corosync/icmap.h> #include "../exec/fsm.h" diff --git a/services/testquorum.c b/services/testquorum.c index 5122054..7f35159 100644 --- a/services/testquorum.c +++ b/services/testquorum.c @@ -58,7 +58,7 @@ #include <qb/qbipc_common.h> #include <corosync/corodefs.h> #include <corosync/logsys.h> -#include <corosync/engine/icmap.h> +#include <corosync/icmap.h> #include <corosync/mar_gen.h> #include <corosync/lcr/lcr_comp.h> diff --git a/services/votequorum.c b/services/votequorum.c index b21577b..c0de834 100644 --- a/services/votequorum.c +++ b/services/votequorum.c @@ -69,7 +69,7 @@ #include <corosync/mar_gen.h> #include <corosync/coroapi.h> #include <corosync/engine/quorum.h> -#include <corosync/engine/icmap.h> +#include <corosync/icmap.h> #include <corosync/ipc_votequorum.h> #define VOTEQUORUM_MAJOR_VERSION 7 diff --git a/services/wd.c b/services/wd.c index 055cc8a..9c45e32 100644 --- a/services/wd.c +++ b/services/wd.c @@ -47,7 +47,7 @@ #include <corosync/coroapi.h> #include <corosync/list.h> #include <corosync/logsys.h> -#include <corosync/engine/icmap.h> +#include <corosync/icmap.h> #include "../exec/fsm.h" -- 1.7.7.4 _______________________________________________ discuss mailing list discuss@xxxxxxxxxxxx http://lists.corosync.org/mailman/listinfo/discuss