On 01/11/2012 02:13 PM, Fabio M. Di Nitto wrote: > NACK. > > Applications that used to access objdb via confdb have already been > ported to icmap. > Which applications? They should be using qb_map api instead... > Fabio > > On 1/11/2012 4:07 PM, Steven Dake wrote: >> 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" >> >> > > _______________________________________________ > discuss mailing list > discuss@xxxxxxxxxxxx > http://lists.corosync.org/mailman/listinfo/discuss _______________________________________________ discuss mailing list discuss@xxxxxxxxxxxx http://lists.corosync.org/mailman/listinfo/discuss