Re: [PATCH] unshare exec/icmap.so

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

 



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


[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