NACK. Applications that used to access objdb via confdb have already been ported to icmap. 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