]> git.proxmox.com Git - mirror_corosync.git/commitdiff
unshare exec/icmap.so
authorSteven Dake <sdake@redhat.com>
Wed, 11 Jan 2012 15:04:09 +0000 (08:04 -0700)
committerSteven Dake <sdake@redhat.com>
Thu, 12 Jan 2012 14:29:41 +0000 (07:29 -0700)
Signed-off-by: Steven Dake <sdake@redhat.com>
Reviewed-by: Fabio Di Nitto <fdinitto@redhat.com>
19 files changed:
corosync.spec.in
exec/Makefile.am
exec/coroparse.c
exec/icmap.c
exec/ipc_glue.c
exec/main.c
exec/mainconfig.c
exec/service.c
exec/totemconfig.c
exec/vsf_quorum.c
include/Makefile.am
include/corosync/engine/icmap.h [deleted file]
include/corosync/icmap.h [new file with mode: 0644]
services/cfg.c
services/cmap.c
services/mon.c
services/testquorum.c
services/votequorum.c
services/wd.c

index c996d877995b71cb9ce1a4d8e955afe6e1ba792b..53b9216d5b8ec6e9e5629139b6587eae1a55f8b0 100644 (file)
@@ -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*
index c73857055f3a6b8b7b25314a261a30a2cdbff110..a0ca646edc308a68d376bd38ccac0bd8f98c3266 100644 (file)
@@ -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
index e84e6f2b0cc93c5b97d0c85856a5e83573ecb0d5..417f584e3ed4f7acfac6b4f1e876a977a6a85df3 100644 (file)
@@ -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"
index 14390d4b37c62498bf99118ed0c0f82943bf1261..c1d9bf1258d472ba53e2e13af780eb7fbacc2a57 100644 (file)
@@ -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)
 
index 5f5951fd9188d779cf35f1a560524b3c1920e91e..e18ac551d998245b07e723f5a86a641c9c073cde 100644 (file)
@@ -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"
index a39fb834070b6e39781f61a64275b25bc8ae34dd..9585998f84fb49307b632c68c47eaa6c559f990e 100644 (file)
 #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"
index 282f02c88ff73380fef76ed490b03d1800c5b928..9ca3d92204e99b82cdbbaca9d21f33c137a42c8f 100644 (file)
@@ -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"
index d70ffd4e827a90bba1705224e6e1928021952d7d..d9bc1b973cd9ba783923cec5808b7b1e6681735d 100644 (file)
@@ -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>
index e5893b9e3e63dd55bb00aacd50ab8ad0ee347c9b..3a043c537dec592fcc3c724d57355e104f415bc5 100644 (file)
@@ -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>
index ebe814742befb32ac3acef45ff8392956cf96df0..6c2fd42b996b98ba93f2dcda49d4cfb55e38919b 100644 (file)
@@ -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");
 
index a8fbacaed0eb846eec0912daec98ab859c6b745f..a8f34777c679020e7e2cd7d07f5b310e948b568b 100644 (file)
@@ -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 (file)
index 896800b..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (c) 2011 Red Hat, Inc.
- *
- * Author: Jan Friesse (jfriesse@redhat.com)
- *
- * 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 (file)
index 0000000..896800b
--- /dev/null
@@ -0,0 +1,262 @@
+/*
+ * Copyright (c) 2011 Red Hat, Inc.
+ *
+ * Author: Jan Friesse (jfriesse@redhat.com)
+ *
+ * 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 */
index a4d43f49f39d9a4aa3cdbb4d158625eed2fd0da4..670388599adafa5b8e95bf83e162d4952a70af4e 100644 (file)
@@ -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");
index 62e73e7a31e9e48673925180cd7f06d93d83a0c9..3081173f32e8a22f56cb456b1561e4d1583d5a98 100644 (file)
@@ -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_)
 
index 665e768b60dc2b7246c58fb693a9cc3b95c48ed9..42735b0e814492cb0e5035df6026eed2c6c561ff 100644 (file)
@@ -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"
 
 
index 512205404c72c297ab946bbf37dc84973bbfbdf2..7f3515906d288ada17662a844c9a095c5b4e1960 100644 (file)
@@ -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>
index b21577b6047f7dbb38186c28981340e725bd59bb..c0de834bde68afe997f3258d1b1da4099d0497ae 100644 (file)
@@ -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
index 055cc8af4488096f65deea903e0071d2718beca1..9c45e32fcbf6bbf87ce6ff48a2b04e4467d67ced 100644 (file)
@@ -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"