Re: [PATCH 13/14] Move wd service to use icmap

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

 



Reviewed-by: Steven Dake <sdake@xxxxxxxxxx>

On 12/14/2011 08:41 AM, Jan Friesse wrote:
> Signed-off-by: Jan Friesse <jfriesse@xxxxxxxxxx>
> ---
>  services/wd.c |  401 ++++++++++++++++++++++-----------------------------------
>  1 files changed, 156 insertions(+), 245 deletions(-)
> 
> diff --git a/services/wd.c b/services/wd.c
> index 26612ee..58c5939 100644
> --- a/services/wd.c
> +++ b/services/wd.c
> @@ -47,6 +47,7 @@
>  #include <corosync/engine/coroapi.h>
>  #include <corosync/list.h>
>  #include <corosync/engine/logsys.h>
> +#include <corosync/engine/icmap.h>
>  #include "../exec/fsm.h"
>  
>  
> @@ -58,7 +59,7 @@ typedef enum {
>  } wd_resource_state_t;
>  
>  struct resource {
> -	hdb_handle_t handle;
> +	char res_path[ICMAP_KEYNAME_MAXLEN];
>  	char *recovery;
>  	char name[CS_MAX_NAME_LENGTH];
>  	time_t last_updated;
> @@ -66,6 +67,7 @@ struct resource {
>  
>  	corosync_timer_handle_t check_timer;
>  	uint64_t check_timeout;
> +	icmap_track_t icmap_track;
>  };
>  
>  LOGSYS_DECLARE_SUBSYS("WD");
> @@ -87,7 +89,6 @@ static uint32_t watchdog_timeout = WD_DEFAULT_TIMEOUT_SEC;
>  static uint64_t tickle_timeout = (WD_DEFAULT_TIMEOUT_MS / 2);
>  static int dog = -1;
>  static corosync_timer_handle_t wd_timer;
> -static hdb_handle_t resources_obj;
>  static int watchdog_ok = 1;
>  
>  struct corosync_service_engine wd_service_engine = {
> @@ -189,55 +190,6 @@ __attribute__ ((constructor)) static void corosync_lcr_component_register (void)
>  	lcr_component_register (&wd_comp_ver0);
>  }
>  
> -static int object_find_or_create (
> -	hdb_handle_t parent_object_handle,
> -	hdb_handle_t *object_handle,
> -	const void *object_name,
> -	size_t object_name_len)
> -{
> -	hdb_handle_t obj_finder;
> -	hdb_handle_t obj;
> -	int ret = -1;
> -
> -	api->object_find_create (
> -		parent_object_handle,
> -		object_name,
> -		object_name_len,
> -		&obj_finder);
> -
> -	if (api->object_find_next (obj_finder, &obj) == 0) {
> -		/* found it */
> -		*object_handle = obj;
> -		ret = 0;
> -	}
> -	else {
> -		ret = api->object_create (parent_object_handle,
> -			object_handle,
> -			object_name, object_name_len);
> -	}
> -
> -	api->object_find_destroy (obj_finder);
> -	return ret;
> -}
> -
> -static cs_error_t str_to_uint64_t(const char* str, uint64_t *out_value, uint64_t min, uint64_t max)
> -{
> -	char *endptr;
> -
> -	errno = 0;
> -        *out_value = strtol(str, &endptr, 0);
> -
> -        /* Check for various possible errors */
> -	if (errno != 0 || endptr == str) {
> -		return CS_ERR_INVALID_PARAM;
> -	}
> -
> -	if (*out_value > max || *out_value < min) {
> -		return CS_ERR_INVALID_PARAM;
> -	}
> -	return CS_OK;
> -}
> -
>  static const char * wd_res_state_to_str(struct cs_fsm* fsm,
>  	int32_t state)
>  {
> @@ -274,32 +226,29 @@ static const char * wd_res_event_to_str(struct cs_fsm* fsm,
>   */
>  static int32_t wd_resource_state_is_ok (struct resource *ref)
>  {
> -	hdb_handle_t resource = ref->handle;
> -	int res;
>  	char* state;
> -	size_t state_len;
> -	objdb_value_types_t type;
> -	uint64_t *last_updated;
> +	uint64_t last_updated;
>  	uint64_t my_time;
>  	uint64_t allowed_period;
> -	size_t last_updated_len;
> +	char key_name[ICMAP_KEYNAME_MAXLEN];
>  
> -	res = api->object_key_get_typed (resource,
> -		"last_updated", (void*)&last_updated, &last_updated_len, &type);
> -	if (res != 0) {
> +	snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "%s%s", ref->res_path, "last_updated");
> +	if (icmap_get_uint64(key_name, &last_updated) != CS_OK) {
>  		/* key does not exist.
>  		*/
>  		return CS_FALSE;
>  	}
> -	res = api->object_key_get_typed (resource,
> -		"state", (void**)&state, &state_len, &type);
> -	if (res != 0 ||	strncmp (state, "disabled", strlen ("disabled")) == 0) {
> +
> +	snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "%s%s", ref->res_path, "state");
> +	if (icmap_get_string(key_name, &state) != CS_OK || strcmp(state, "disabled") == 0) {
>  		/* key does not exist.
>  		*/
>  		return CS_FALSE;
>  	}
> -	if (*last_updated == 0) {
> +
> +	if (last_updated == 0) {
>  		/* initial value */
> +		free(state);
>  		return CS_TRUE;
>  	}
>  
> @@ -310,42 +259,36 @@ static int32_t wd_resource_state_is_ok (struct resource *ref)
>  	 * plus a grace factor of (0.5 * poll_period).
>  	 */
>  	allowed_period = (ref->check_timeout * MILLI_2_NANO_SECONDS * 3) / 2;
> -	if ((*last_updated + allowed_period) < my_time) {
> +	if ((last_updated + allowed_period) < my_time) {
>  		log_printf (LOGSYS_LEVEL_ERROR,
>  			"last_updated %"PRIu64" ms too late, period:%"PRIu64".",
> -			(uint64_t)(my_time/MILLI_2_NANO_SECONDS - ((*last_updated + allowed_period) / MILLI_2_NANO_SECONDS)),
> +			(uint64_t)(my_time/MILLI_2_NANO_SECONDS - ((last_updated + allowed_period) / MILLI_2_NANO_SECONDS)),
>  			ref->check_timeout);
>  		return CS_FALSE;
>  	}
>  
>  	if (strcmp (state, wd_failed_str) == 0) {
> +		free(state);
>  		return CS_FALSE;
>  	}
> +
> +	free(state);
>  	return CS_TRUE;
>  }
>  
>  static void wd_config_changed (struct cs_fsm* fsm, int32_t event, void * data)
>  {
> -	int res;
> -	size_t len;
>  	char *state;
> -	objdb_value_types_t type;
> -	char *str;
>  	uint64_t tmp_value;
>  	uint64_t next_timeout;
>  	struct resource *ref = (struct resource*)data;
> -	char str_copy[256];
> +	char key_name[ICMAP_KEYNAME_MAXLEN];
>  
>  	next_timeout = ref->check_timeout;
>  
> -	res = api->object_key_get_typed (ref->handle,
> -			"poll_period",
> -			(void**)&str, &len,
> -			&type);
> -	if (res == 0) {
> -		memcpy(str_copy, str, len);
> -		str_copy[len] = '\0';
> -		if (str_to_uint64_t(str_copy, &tmp_value, WD_MIN_TIMEOUT_MS, WD_MAX_TIMEOUT_MS) == CS_OK) {
> +	snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "%s%s", ref->res_path, "poll_period");
> +	if (icmap_get_uint64(ref->res_path, &tmp_value) == CS_OK) {
> +		if (tmp_value >= WD_MIN_TIMEOUT_MS && tmp_value <= WD_MAX_TIMEOUT_MS) {
>  			log_printf (LOGSYS_LEVEL_DEBUG,
>  				"poll_period changing from:%"PRIu64" to %"PRIu64".",
>  				ref->check_timeout, tmp_value);
> @@ -358,14 +301,13 @@ static void wd_config_changed (struct cs_fsm* fsm, int32_t event, void * data)
>  			ref->check_timeout = tmp_value;
>  		} else {
>  			log_printf (LOGSYS_LEVEL_WARNING,
> -				"Could NOT use poll_period:%s ms for resource %s",
> -				str, ref->name);
> +				"Could NOT use poll_period:%"PRIu64" ms for resource %s",
> +				tmp_value, ref->name);
>  		}
>  	}
>  
> -	res = api->object_key_get_typed (ref->handle,
> -		"recovery", (void*)&ref->recovery, &len, &type);
> -	if (res != 0) {
> +	snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "%s%s", ref->res_path, "recovery");
> +	if (icmap_get_string(key_name, &ref->recovery) != CS_OK) {
>  		/* key does not exist.
>  		 */
>  		log_printf (LOGSYS_LEVEL_WARNING,
> @@ -373,9 +315,8 @@ static void wd_config_changed (struct cs_fsm* fsm, int32_t event, void * data)
>  		cs_fsm_state_set(&ref->fsm, WD_S_STOPPED, ref);
>  		return;
>  	}
> -	res = api->object_key_get_typed (ref->handle,
> -		"state", (void*)&state, &len, &type);
> -	if (res != 0) {
> +	snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "%s%s", ref->res_path, "state");
> +	if (icmap_get_string(key_name, &state) != CS_OK) {
>  		/* key does not exist.
>  		*/
>  		log_printf (LOGSYS_LEVEL_WARNING,
> @@ -385,7 +326,7 @@ static void wd_config_changed (struct cs_fsm* fsm, int32_t event, void * data)
>  	}
>  	if (ref->check_timer) {
>  		api->timer_delete(ref->check_timer);
> -		ref->check_timer = NULL;
> +		ref->check_timer = 0;
>  	}
>  
>  	if (strcmp(wd_stopped_str, state) == 0) {
> @@ -395,6 +336,7 @@ static void wd_config_changed (struct cs_fsm* fsm, int32_t event, void * data)
>  			ref, wd_resource_check_fn, &ref->check_timer);
>  		cs_fsm_state_set(&ref->fsm, WD_S_RUNNING, ref);
>  	}
> +	free(state);
>  }
>  
>  static void wd_resource_failed (struct cs_fsm* fsm, int32_t event, void * data)
> @@ -403,7 +345,7 @@ static void wd_resource_failed (struct cs_fsm* fsm, int32_t event, void * data)
>  
>  	if (ref->check_timer) {
>  		api->timer_delete(ref->check_timer);
> -		ref->check_timer = NULL;
> +		ref->check_timer = 0;
>  	}
>  
>  	log_printf (LOGSYS_LEVEL_CRIT, "%s resource \"%s\" failed!",
> @@ -421,41 +363,48 @@ static void wd_resource_failed (struct cs_fsm* fsm, int32_t event, void * data)
>  	cs_fsm_state_set(fsm, WD_S_FAILED, data);
>  }
>  
> -static void wd_key_changed(object_change_type_t change_type,
> -	hdb_handle_t parent_object_handle,
> -	hdb_handle_t object_handle,
> -	const void *object_name_pt, size_t object_name_len,
> -	const void *key_name_pt, size_t key_len,
> -	const void *key_value_pt, size_t key_value_len,
> -	void *priv_data_pt)
> +static void wd_key_changed(
> +	int32_t event,
> +	const char *key_name,
> +	struct icmap_notify_value new_val,
> +	struct icmap_notify_value old_val,
> +	void *user_data)
>  {
> -	struct resource* ref = (struct resource*)priv_data_pt;
> +	struct resource* ref = (struct resource*)user_data;
> +	char *last_key_part;
>  
> -	if (strncmp(key_name_pt, "last_updated", key_len) == 0 ||
> -		strncmp(key_name_pt, "current", key_len) == 0) {
> -		return;
> +	if (ref == NULL) {
> +		return ;
>  	}
>  
> -	if (ref == NULL) {
> -		return;
> +	last_key_part = strrchr(key_name, '.');
> +	if (last_key_part == NULL) {
> +		return ;
>  	}
> -	cs_fsm_process(&ref->fsm, WD_E_CONFIG_CHANGED, ref);
> -}
> +	last_key_part++;
>  
> -static void wd_object_destroyed(
> -	hdb_handle_t parent_object_handle,
> -	const void *name_pt, size_t name_len,
> -	void *priv_data_pt)
> -{
> -	struct resource* ref = (struct resource*)priv_data_pt;
> +	if (event == ICMAP_TRACK_ADD || event == ICMAP_TRACK_MODIFY) {
> +		if (strcmp(last_key_part, "last_updated") == 0 ||
> +			strcmp(last_key_part, "current") == 0) {
> +			return;
> +		}
> +
> +		cs_fsm_process(&ref->fsm, WD_E_CONFIG_CHANGED, ref);
> +	}
> +
> +	if (event == ICMAP_TRACK_DELETE && ref != NULL) {
> +		if (strcmp(last_key_part, "state") != 0) {
> +			return ;
> +		}
>  
> -	if (ref) {
>  		log_printf (LOGSYS_LEVEL_WARNING,
> -			"resource \"%s\" deleted from objdb!",
> +			"resource \"%s\" deleted from cmap!",
>  			ref->name);
>  
>  		api->timer_delete(ref->check_timer);
> -		ref->check_timer = NULL;
> +		ref->check_timer = 0;
> +		icmap_track_delete(ref->icmap_track);
> +
>  		free(ref);
>  	}
>  }
> @@ -476,25 +425,18 @@ static void wd_resource_check_fn (void* resource_ref)
>   * return 0   - fully configured
>   * return -1  - partially configured
>   */
> -static int32_t wd_resource_create (hdb_handle_t resource_obj)
> +static int32_t wd_resource_create (char *res_path, char *res_name)
>  {
> -	int res;
> -	size_t len;
>  	char *state;
> -	objdb_value_types_t type;
> -	char period_str[32];
> -	char str_copy[256];
> -	char *str;
>  	uint64_t tmp_value;
>  	struct resource *ref = malloc (sizeof (struct resource));
> +	char key_name[ICMAP_KEYNAME_MAXLEN];
>  
> -	ref->handle = resource_obj;
> +	strcpy(ref->res_path, res_path);
>  	ref->check_timeout = WD_DEFAULT_TIMEOUT_MS;
> -	ref->check_timer = NULL;
> -	api->object_name_get (resource_obj,
> -		ref->name,
> -		&len);
> -	ref->name[len] = '\0';
> +	ref->check_timer = 0;
> +
> +	strcpy(ref->name, res_name);
>  	ref->fsm.name = ref->name;
>  	ref->fsm.table = wd_fsm_table;
>  	ref->fsm.entries = sizeof(wd_fsm_table) / sizeof(struct cs_fsm_entry);
> @@ -502,47 +444,35 @@ static int32_t wd_resource_create (hdb_handle_t resource_obj)
>  	ref->fsm.curr_state = WD_S_STOPPED;
>  	ref->fsm.state_to_str = wd_res_state_to_str;
>  	ref->fsm.event_to_str = wd_res_event_to_str;
> -	api->object_priv_set (resource_obj, NULL);
> -
> -	res = api->object_key_get_typed (resource_obj,
> -			"poll_period",
> -			(void**)&str, &len,
> -			&type);
> -	if (res != 0) {
> -		len = snprintf (period_str, 32, "%"PRIu64"", ref->check_timeout);
> -		api->object_key_create_typed (resource_obj,
> -			"poll_period", &period_str,
> -			len,
> -			OBJDB_VALUETYPE_STRING);
> -	}
> -	else {
> -		memcpy(str_copy, str, len);
> -		str_copy[len] = '\0';
> -		if (str_to_uint64_t(str_copy, &tmp_value, WD_MIN_TIMEOUT_MS, WD_MAX_TIMEOUT_MS) == CS_OK) {
> +
> +	snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "%s%s", res_path, "poll_period");
> +	if (icmap_get_uint64(key_name, &tmp_value) != CS_OK) {
> +		icmap_set_uint64(key_name, ref->check_timeout);
> +	} else {
> +		if (tmp_value >= WD_MIN_TIMEOUT_MS && tmp_value <= WD_MAX_TIMEOUT_MS) {
>  			ref->check_timeout = tmp_value;
>  		} else {
>  			log_printf (LOGSYS_LEVEL_WARNING,
> -				"Could NOT use poll_period:%s ms for resource %s",
> -				str, ref->name);
> +				"Could NOT use poll_period:%"PRIu64" ms for resource %s",
> +				tmp_value, ref->name);
>  		}
>  	}
>  
> -	api->object_track_start (resource_obj, OBJECT_TRACK_DEPTH_RECURSIVE,
> -			wd_key_changed, NULL, wd_object_destroyed,
> -			NULL, ref);
> +	icmap_track_add(res_path,
> +			ICMAP_TRACK_ADD | ICMAP_TRACK_MODIFY | ICMAP_TRACK_DELETE | ICMAP_TRACK_PREFIX,
> +			wd_key_changed,
> +			ref, &ref->icmap_track);
>  
> -	res = api->object_key_get_typed (resource_obj,
> -		"recovery", (void*)&ref->recovery, &len, &type);
> -	if (res != 0) {
> +	snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "%s%s", res_path, "recovery");
> +	if (icmap_get_string(key_name, &ref->recovery) != CS_OK) {
>  		/* key does not exist.
>  		 */
>  		log_printf (LOGSYS_LEVEL_WARNING,
>  			"resource %s missing a recovery key.", ref->name);
>  		return -1;
>  	}
> -	res = api->object_key_get_typed (resource_obj,
> -		"state", (void*)&state, &len, &type);
> -	if (res != 0) {
> +	snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "%s%s", res_path, "state");
> +	if (icmap_get_string(key_name, &state) != CS_OK) {
>  		/* key does not exist.
>  		*/
>  		log_printf (LOGSYS_LEVEL_WARNING,
> @@ -550,12 +480,13 @@ static int32_t wd_resource_create (hdb_handle_t resource_obj)
>  		return -1;
>  	}
>  
> -	res = api->object_key_get_typed (resource_obj,
> -		"last_updated", (void*)&ref->last_updated, &len, &type);
> -	if (res != 0) {
> +	snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "%s%s", res_path, "last_updated");
> +	if (icmap_get_uint64(key_name, &tmp_value) != CS_OK) {
>  		/* key does not exist.
>  		 */
>  		ref->last_updated = 0;
> +	} else {
> +		ref->last_updated = tmp_value;
>  	}
>  
>  	/*
> @@ -588,60 +519,71 @@ static void wd_tickle_fn (void* arg)
>  
>  }
>  
> -static void wd_resource_object_created(hdb_handle_t parent_object_handle,
> -	hdb_handle_t object_handle,
> -	const void *name_pt, size_t name_len,
> -	void *priv_data_pt)
> +static void wd_resource_created_cb(
> +	int32_t event,
> +	const char *key_name,
> +	struct icmap_notify_value new_val,
> +	struct icmap_notify_value old_val,
> +	void *user_data)
>  {
> -	wd_resource_create (object_handle);
> +	char res_name[ICMAP_KEYNAME_MAXLEN];
> +	char res_type[ICMAP_KEYNAME_MAXLEN];
> +	char tmp_key[ICMAP_KEYNAME_MAXLEN];
> +	int res;
> +
> +	if (event != ICMAP_TRACK_ADD) {
> +		return ;
> +	}
> +
> +	res = sscanf(key_name, "resources.%[^.].%[^.].%[^.]", res_type, res_name, tmp_key);
> +	if (res != 3) {
> +		return ;
> +	}
> +
> +	if (strcmp(tmp_key, "state") != 0) {
> +		return ;
> +	}
> +
> +	snprintf(tmp_key, ICMAP_KEYNAME_MAXLEN, "resources.%s.%s.", res_type, res_name);
> +	wd_resource_create (tmp_key, res_name);
>  }
>  
>  static void wd_scan_resources (void)
>  {
> -	hdb_handle_t obj_finder;
> -	hdb_handle_t obj_finder2;
> -	hdb_handle_t resource_type;
> -	hdb_handle_t resource;
>  	int res_count = 0;
> +	icmap_track_t icmap_track;
> +	icmap_iter_t iter;
> +	const char *key_name;
> +	int res;
> +	char res_name[ICMAP_KEYNAME_MAXLEN];
> +	char res_type[ICMAP_KEYNAME_MAXLEN];
> +	char tmp_key[ICMAP_KEYNAME_MAXLEN];
>  
>  	ENTER();
>  
> -	api->object_find_create (
> -		OBJECT_PARENT_HANDLE,
> -		"resources", strlen ("resources"),
> -		&obj_finder);
> -
> -	api->object_find_next (obj_finder, &resources_obj);
> -	api->object_find_destroy (obj_finder);
> +	iter = icmap_iter_init("resources.");
> +	while ((key_name = icmap_iter_next(iter, NULL, NULL)) != NULL) {
> +		res = sscanf(key_name, "resources.%[^.].%[^.].%[^.]", res_type, res_name, tmp_key);
> +		if (res != 3) {
> +			continue ;
> +		}
>  
> -	/* this will be the system or process level
> -	 */
> -	api->object_find_create (
> -		resources_obj,
> -		NULL, 0,
> -		&obj_finder);
> -	while (api->object_find_next (obj_finder,
> -			&resource_type) == 0) {
> -
> -		api->object_find_create (
> -			resource_type,
> -			NULL, 0,
> -			&obj_finder2);
> -
> -		while (api->object_find_next (obj_finder2,
> -				&resource) == 0) {
> -
> -			if (wd_resource_create (resource) == 0) {
> -				res_count++;
> -			}
> +		if (strcmp(tmp_key, "state") != 0) {
> +			continue ;
>  		}
> -		api->object_find_destroy (obj_finder2);
>  
> -		api->object_track_start (resource_type, OBJECT_TRACK_DEPTH_ONE,
> -			NULL, wd_resource_object_created, NULL,
> -			NULL, NULL);
> +		snprintf(tmp_key, ICMAP_KEYNAME_MAXLEN, "resources.%s.%s.", res_type, res_name);
> +		if (wd_resource_create (tmp_key, res_name) == 0) {
> +			res_count++;
> +		}
>  	}
> -	api->object_find_destroy (obj_finder);
> +	icmap_iter_finalize(iter);
> +
> +	icmap_track_add("resources.process.", ICMAP_TRACK_ADD | ICMAP_TRACK_PREFIX,
> +			wd_resource_created_cb, NULL, &icmap_track);
> +	icmap_track_add("resources.system.", ICMAP_TRACK_ADD | ICMAP_TRACK_PREFIX,
> +			wd_resource_created_cb, NULL, &icmap_track);
> +
>  	if (res_count == 0) {
>  		log_printf (LOGSYS_LEVEL_INFO, "no resources configured.");
>  	}
> @@ -724,25 +666,19 @@ static int setup_watchdog(void)
>  	return 0;
>  }
>  
> -static void wd_top_level_key_changed(object_change_type_t change_type,
> -	hdb_handle_t parent_object_handle,
> -	hdb_handle_t object_handle,
> -	const void *object_name_pt, size_t object_name_len,
> -	const void *key_name_pt, size_t key_len,
> -	const void *key_value_pt, size_t key_value_len,
> -	void *priv_data_pt)
> +static void wd_top_level_key_changed(
> +	int32_t event,
> +	const char *key_name,
> +	struct icmap_notify_value new_val,
> +	struct icmap_notify_value old_val,
> +	void *user_data)
>  {
> -	uint64_t tmp_value;
> -	int32_t tmp_value_32;
> -	char str_copy[256];
> +	uint32_t tmp_value_32;
>  
>  	ENTER();
> -	if (change_type != OBJECT_KEY_DELETED &&
> -		strncmp ((char*)key_name_pt, "watchdog_timeout", key_len) == 0) {
> -		memcpy(str_copy, key_name_pt, key_len);
> -		str_copy[key_len] = '\0';
> -		if (str_to_uint64_t(str_copy, &tmp_value, 2, 120) == CS_OK) {
> -			tmp_value_32 = tmp_value;
> +
> +	if (icmap_get_uint32("resources.watchdog_timeout", &tmp_value_32) != CS_OK) {
> +		if (tmp_value_32 >= 2 && tmp_value_32 <= 120) {
>  			watchdog_timeout_apply (tmp_value_32);
>  		}
>  	}
> @@ -753,47 +689,32 @@ static void wd_top_level_key_changed(object_change_type_t change_type,
>  
>  static void watchdog_timeout_get_initial (void)
>  {
> -	int32_t res;
> -	char watchdog_timeout_str[32];
> -	size_t watchdog_timeout_len;
> -	objdb_value_types_t watchdog_timeout_type;
>  	uint32_t tmp_value_32;
> -	uint64_t tmp_value;
> +	icmap_track_t icmap_track;
>  
>  	ENTER();
>  
> -	res = api->object_key_get_typed (resources_obj,
> -			"watchdog_timeout",
> -			(void**)&watchdog_timeout_str, &watchdog_timeout_len,
> -			&watchdog_timeout_type);
> -	if (res != 0) {
> +	if (icmap_get_uint32("resources.watchdog_timeout", &tmp_value_32) != CS_OK) {
>  		watchdog_timeout_apply (WD_DEFAULT_TIMEOUT_SEC);
>  
> -		watchdog_timeout_len = snprintf (watchdog_timeout_str, 32, "%d", watchdog_timeout);
> -		api->object_key_create_typed (resources_obj,
> -			"watchdog_timeout", &watchdog_timeout_str,
> -			watchdog_timeout_len,
> -			OBJDB_VALUETYPE_STRING);
> +		icmap_set_uint32("resources.watchdog_timeout", watchdog_timeout);
>  	}
>  	else {
> -		if (str_to_uint64_t(watchdog_timeout_str, &tmp_value, 2, 120) == CS_OK) {
> -			tmp_value_32 = tmp_value;
> +		if (tmp_value_32 >= 2 && tmp_value_32 <= 120) {
>  			watchdog_timeout_apply (tmp_value_32);
>  		} else {
>  			watchdog_timeout_apply (WD_DEFAULT_TIMEOUT_SEC);
>  		}
>  	}
>  
> -	api->object_track_start (resources_obj, OBJECT_TRACK_DEPTH_ONE,
> -		wd_top_level_key_changed, NULL, NULL,
> -		NULL, NULL);
> +	icmap_track_add("resources.watchdog_timeout", ICMAP_TRACK_MODIFY,
> +			wd_top_level_key_changed, NULL, &icmap_track);
>  
>  }
>  
>  static int wd_exec_init_fn (
>  	struct corosync_api_v1 *corosync_api)
>  {
> -	hdb_handle_t obj;
>  
>  	ENTER();
>  #ifdef COROSYNC_SOLARIS
> @@ -801,16 +722,6 @@ static int wd_exec_init_fn (
>  #endif
>  	api = corosync_api;
>  
> -	object_find_or_create (OBJECT_PARENT_HANDLE,
> -		&resources_obj,
> -		"resources", strlen ("resources"));
> -	object_find_or_create (resources_obj,
> -		&obj,
> -		"system", strlen ("system"));
> -	object_find_or_create (resources_obj,
> -		&obj,
> -		"process", strlen ("process"));
> -
>  	watchdog_timeout_get_initial();
>  
>  	setup_watchdog();

_______________________________________________
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