Re: [PATCH] unshare exec/icmap.so

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Clusters]     [Corosync Project]     [Linux USB Devel]     [Linux Audio Users]     [Photo]     [Yosemite News]    [Yosemite Photos]    [Linux Kernel]     [Linux SCSI]     [X.Org]

  Powered by Linux