Merge the object iteration repair patch into corosync so openais services load.

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@1611 fd59a12c-fef9-0310-b244-a6a79926bd2f
This commit is contained in:
Steven Dake 2008-07-24 12:58:44 +00:00
parent 13b48d09d4
commit 5c257afb8c
10 changed files with 445 additions and 261 deletions

View File

@ -86,8 +86,9 @@ void apidef_init (struct objdb_iface_ver0 *objdb) {
apidef_corosync_api_v1.object_destroy = objdb->object_destroy;
apidef_corosync_api_v1.object_valid_set = objdb->object_valid_set;
apidef_corosync_api_v1.object_key_valid_set = objdb->object_key_valid_set;
apidef_corosync_api_v1.object_find_reset = objdb->object_find_reset;
apidef_corosync_api_v1.object_find = objdb->object_find;
apidef_corosync_api_v1.object_find_create = objdb->object_find_create;
apidef_corosync_api_v1.object_find_next = objdb->object_find_next;
apidef_corosync_api_v1.object_find_destroy = objdb->object_find_destroy;
apidef_corosync_api_v1.object_key_get = objdb->object_key_get;
apidef_corosync_api_v1.object_priv_get = objdb->object_priv_get;
apidef_corosync_api_v1.object_key_replace = objdb->object_key_replace;

View File

@ -1,5 +1,6 @@
/*
* Copyright (c) 2002-2005 MontaVista Software, Inc.
* Copyright (c) 2006-2008 Red Hat, Inc.
*
* All rights reserved.
*
@ -105,18 +106,23 @@ int openais_main_config_read (
unsigned int object_logger_subsys_handle;
char *value;
char *error_reason = error_string_response;
unsigned int object_find_handle;
unsigned int object_find_logsys_handle;
int global_debug = 0;
memset (main_config, 0, sizeof (struct main_config));
objdb->object_find_reset (OBJECT_PARENT_HANDLE);
objdb->object_find_create (
OBJECT_PARENT_HANDLE,
"logging",
strlen ("logging"),
&object_find_handle);
main_config->logmode = LOG_MODE_FLUSH_AFTER_CONFIG;
if (objdb->object_find (
OBJECT_PARENT_HANDLE,
"logging",
strlen ("logging"),
&object_service_handle) == 0) {
if (objdb->object_find_next (
object_find_handle,
&object_service_handle) == 0) {
if (!objdb_get_string (objdb,object_service_handle, "to_file", &value)) {
if (strcmp (value, "yes") == 0) {
@ -144,15 +150,15 @@ int openais_main_config_read (
}
if (!objdb_get_string (objdb,object_service_handle, "debug", &value)) {
if (strcmp (value, "on") == 0) {
global_debug = 1;
} else
if (strcmp (value, "off") == 0) {
global_debug = 0;
} else {
goto parse_error;
}
}
if (strcmp (value, "on") == 0) {
global_debug = 1;
} else
if (strcmp (value, "off") == 0) {
global_debug = 0;
} else {
goto parse_error;
}
}
if (!objdb_get_string (objdb,object_service_handle, "timestamp", &value)) {
if (strcmp (value, "on") == 0) {
main_config->logmode |= LOG_MODE_DISPLAY_TIMESTAMP;
@ -179,17 +185,46 @@ int openais_main_config_read (
}
if (!objdb_get_string (objdb,object_service_handle, "syslog_facility", &value)) {
main_config->syslog_facility = logsys_facility_id_get(value);
if (main_config->syslog_facility < 0) {
if (strcmp (value, "daemon") == 0) {
main_config->syslog_facility = LOG_DAEMON;
} else
if (strcmp (value, "local0") == 0) {
main_config->syslog_facility = LOG_LOCAL0;
} else
if (strcmp (value, "local1") == 0) {
main_config->syslog_facility = LOG_LOCAL1;
} else
if (strcmp (value, "local2") == 0) {
main_config->syslog_facility = LOG_LOCAL2;
} else
if (strcmp (value, "local3") == 0) {
main_config->syslog_facility = LOG_LOCAL3;
} else
if (strcmp (value, "local4") == 0) {
main_config->syslog_facility = LOG_LOCAL4;
} else
if (strcmp (value, "local5") == 0) {
main_config->syslog_facility = LOG_LOCAL5;
} else
if (strcmp (value, "local6") == 0) {
main_config->syslog_facility = LOG_LOCAL6;
} else
if (strcmp (value, "local7") == 0) {
main_config->syslog_facility = LOG_LOCAL7;
} else {
error_reason = "unknown syslog facility specified";
goto parse_error;
}
}
objdb->object_find_reset(object_service_handle);
while (objdb->object_find (object_service_handle,
objdb->object_find_create (
object_service_handle,
"logger_subsys",
strlen ("logger_subsys"),
&object_find_logsys_handle);
while (objdb->object_find_next (
object_find_logsys_handle,
&object_logger_subsys_handle) == 0) {
if (!objdb_get_string (objdb,
@ -208,22 +243,11 @@ int openais_main_config_read (
logsys_logger.priority = LOG_LEVEL_DEBUG;
} else
if (strcmp (value, "off") == 0) {
logsys_logger.priority = LOG_LEVEL_INFO;
logsys_logger.priority &= ~LOG_LEVEL_DEBUG;
} else {
goto parse_error;
}
}
else {
if (global_debug)
logsys_logger.priority = LOG_LEVEL_DEBUG;
}
if (logsys_logger.priority != LOG_LEVEL_DEBUG) {
if (!objdb_get_string (objdb, object_logger_subsys_handle, "syslog_level", &value)) {
logsys_logger.priority = logsys_priority_id_get(value);
if (logsys_logger.priority < 0)
logsys_logger.priority = LOG_LEVEL_INFO;
}
}
if (!objdb_get_string (objdb, object_logger_subsys_handle, "tags", &value)) {
char *token = strtok (value, "|");
@ -265,14 +289,20 @@ int openais_main_config_read (
logsys_logger.priority);
}
objdb->object_find_destroy (object_find_logsys_handle);
}
objdb->object_find_reset (OBJECT_PARENT_HANDLE);
if (objdb->object_find (
OBJECT_PARENT_HANDLE,
"aisexec",
strlen ("aisexec"),
&object_service_handle) == 0) {
objdb->object_find_destroy (object_find_handle);
objdb->object_find_create (
OBJECT_PARENT_HANDLE,
"aisexec",
strlen ("aisexec"),
&object_find_handle);
if (objdb->object_find_next (
object_find_handle,
&object_service_handle) == 0) {
if (!objdb_get_string (objdb,object_service_handle, "user", &value)) {
main_config->user = strdup(value);
@ -282,6 +312,8 @@ int openais_main_config_read (
}
}
objdb->object_find_destroy (object_find_handle);
/* Default user/group */
if (!main_config->user)
main_config->user = "ais";

View File

@ -1,6 +1,6 @@
/*
* Copyright (c) 2006 MontaVista Software, Inc.
* Copyright (c) 2008 Red Hat, Inc.
* Copyright (c) 2007-2008 Red Hat, Inc.
*
* All rights reserved.
*
@ -68,6 +68,13 @@ struct object_instance {
int object_key_valid_list_entries;
};
struct object_find_instance {
struct list_head *find_child_list;
struct list_head *child_head;
void *object_name;
int object_len;
};
struct objdb_iface_ver0 objdb_iface;
static struct hdb_handle_database object_instance_database = {
@ -77,6 +84,13 @@ static struct hdb_handle_database object_instance_database = {
.mutex = PTHREAD_MUTEX_INITIALIZER
};
static struct hdb_handle_database object_find_instance_database = {
.handle_count = 0,
.handles = 0,
.iterator = 0,
.mutex = PTHREAD_MUTEX_INITIALIZER
};
static int objdb_init (void)
{
@ -439,61 +453,89 @@ error_exit:
/*
* object db reading
*/
static int object_find_reset (
unsigned int object_handle)
static int object_find_create (
unsigned int object_handle,
void *object_name,
int object_len,
unsigned int *object_find_handle)
{
unsigned int res;
struct object_instance *instance;
struct object_instance *object_instance;
struct object_find_instance *object_find_instance;
res = hdb_handle_get (&object_instance_database,
object_handle, (void *)&instance);
object_handle, (void *)&object_instance);
if (res != 0) {
goto error_exit;
}
instance->find_child_list = &instance->child_head;
res = hdb_handle_create (&object_find_instance_database,
sizeof (struct object_find_instance), object_find_handle);
if (res != 0) {
goto error_put;
}
res = hdb_handle_get (&object_find_instance_database,
*object_find_handle, (void *)&object_find_instance);
if (res != 0) {
goto error_destroy;
}
object_find_instance->find_child_list = &object_instance->child_head;
object_find_instance->child_head = &object_instance->child_head;
object_find_instance->object_name = object_name;
object_find_instance->object_len = object_len;
hdb_handle_put (&object_instance_database, object_handle);
hdb_handle_put (&object_find_instance_database, *object_find_handle);
return (0);
error_destroy:
hdb_handle_destroy (&object_instance_database, *object_find_handle);
error_put:
hdb_handle_put (&object_instance_database, object_handle);
error_exit:
return (-1);
}
static int object_find (
unsigned int parent_object_handle,
void *object_name,
int object_name_len,
static int object_find_next (
unsigned int object_find_handle,
unsigned int *object_handle)
{
unsigned int res;
struct object_instance *instance;
struct object_instance *find_instance = NULL;
struct object_find_instance *object_find_instance;
struct object_instance *object_instance = NULL;
struct list_head *list;
unsigned int found = 0;
res = hdb_handle_get (&object_instance_database,
parent_object_handle, (void *)&instance);
res = hdb_handle_get (&object_find_instance_database,
object_find_handle, (void *)&object_find_instance);
if (res != 0) {
goto error_exit;
}
res = -ENOENT;
for (list = instance->find_child_list->next;
list != &instance->child_head; list = list->next) {
res = -1;
for (list = object_find_instance->find_child_list->next;
list != object_find_instance->child_head; list = list->next) {
find_instance = list_entry (list, struct object_instance,
object_instance = list_entry (list, struct object_instance,
child_list);
if ((find_instance->object_name_len == object_name_len) &&
(memcmp (find_instance->object_name, object_name,
object_name_len) == 0)) {
if ((object_instance->object_name_len ==
object_find_instance->object_len) &&
(memcmp (object_instance->object_name,
object_find_instance->object_name,
object_find_instance->object_len) == 0)) {
found = 1;
break;
}
}
instance->find_child_list = list;
hdb_handle_put (&object_instance_database, parent_object_handle);
object_find_instance->find_child_list = list;
hdb_handle_put (&object_find_instance_database, object_find_handle);
if (found) {
*object_handle = find_instance->object_handle;
*object_handle = object_instance->object_handle;
res = 0;
}
return (res);
@ -502,6 +544,12 @@ error_exit:
return (-1);
}
static int object_find_destroy (
unsigned int object_find_handle)
{
return (0);
}
static int object_key_get (
unsigned int object_handle,
void *key_name,
@ -1117,8 +1165,9 @@ struct objdb_iface_ver0 objdb_iface = {
.object_destroy = object_destroy,
.object_valid_set = object_valid_set,
.object_key_valid_set = object_key_valid_set,
.object_find_reset = object_find_reset,
.object_find = object_find,
.object_find_create = object_find_create,
.object_find_next = object_find_next,
.object_find_destroy = object_find_destroy,
.object_find_from = object_find_from,
.object_key_get = object_key_get,
.object_key_iter = object_key_iter,

View File

@ -1,5 +1,6 @@
/*
* Copyright (c) 2006 MontaVista Software, Inc.
* Copyright (c) 2007-2008 Red Hat, Inc.
*
* All rights reserved.
*
@ -83,15 +84,19 @@ struct objdb_iface_ver0 {
struct object_key_valid *object_key_valid_list,
unsigned int object_key_valid_list_entries);
int (*object_find_reset) (
unsigned int parent_object_handle);
int (*object_find) (
int (*object_find_create) (
unsigned int parent_object_handle,
void *object_name,
int object_name_len,
unsigned int *object_find_handle);
int (*object_find_next) (
unsigned int object_find_handle,
unsigned int *object_handle);
int (*object_find_destroy) (
unsigned int object_find_handle);
int (*object_key_get) (
unsigned int object_handle,
void *key_name,

View File

@ -52,6 +52,7 @@
#include "../include/coroapi.h"
#include "service.h"
LOGSYS_DECLARE_SUBSYS ("SERV", LOG_INFO);
struct default_service {
@ -65,7 +66,6 @@ static struct default_service default_services[] = {
.ver = 0,
},
{
.name = "corosync_cfg",
.ver = 0,
},
@ -83,22 +83,27 @@ struct corosync_service_engine *ais_service[SERVICE_HANDLER_MAXIMUM_COUNT];
static unsigned int object_internal_configuration_handle;
static unsigned int default_services_requested (struct corosync_api_v1 *api)
static unsigned int default_services_requested (struct corosync_api_v1 *corosync_api)
{
unsigned int object_service_handle;
unsigned int object_find_handle;
char *value;
/*
* Don't link default services if they have been disabled
*/
api->object_find_reset (OBJECT_PARENT_HANDLE);
if (api->object_find (
corosync_api->object_find_create (
OBJECT_PARENT_HANDLE,
"aisexec",
strlen ("aisexec"),
&object_find_handle);
if (corosync_api->object_find_next (
object_find_handle,
&object_service_handle) == 0) {
if ( ! api->object_key_get (object_service_handle,
if ( ! corosync_api->object_key_get (object_service_handle,
"defaultservices",
strlen ("defaultservices"),
(void *)&value,
@ -109,11 +114,14 @@ static unsigned int default_services_requested (struct corosync_api_v1 *api)
}
}
}
return (-1);
corosync_api->object_find_destroy (object_find_handle);
return (-1);
}
unsigned int openais_service_link_and_init (
struct corosync_api_v1 *api,
struct corosync_api_v1 *corosync_api,
char *service_name,
unsigned int service_ver)
{
@ -135,7 +143,7 @@ unsigned int openais_service_link_and_init (
&iface_ver0_p,
(void *)0);
iface_ver0 = (struct corosync_service_engine_iface_ver0 *)iface_ver0_p;
iface_ver0 = (struct openais_service_engine_iface_ver0 *)iface_ver0_p;
if (iface_ver0 == 0) {
log_printf(LOG_LEVEL_ERROR, "Service failed to load '%s'.\n", service_name);
@ -150,40 +158,40 @@ unsigned int openais_service_link_and_init (
ais_service[service->id] = service;
if (service->config_init_fn) {
res = service->config_init_fn (api);
res = service->config_init_fn (corosync_api);
}
if (service->exec_init_fn) {
res = service->exec_init_fn (api);
res = service->exec_init_fn (corosync_api);
}
/*
* Store service in object database
*/
api->object_create (object_internal_configuration_handle,
corosync_api->object_create (object_internal_configuration_handle,
&object_service_handle,
"service",
strlen ("service"));
api->object_key_create (object_service_handle,
corosync_api->object_key_create (object_service_handle,
"name",
strlen ("name"),
service_name,
strlen (service_name) + 1);
api->object_key_create (object_service_handle,
corosync_api->object_key_create (object_service_handle,
"ver",
strlen ("ver"),
&service_ver,
sizeof (service_ver));
res = api->object_key_create (object_service_handle,
res = corosync_api->object_key_create (object_service_handle,
"handle",
strlen ("handle"),
&handle,
sizeof (handle));
api->object_key_create (object_service_handle,
corosync_api->object_key_create (object_service_handle,
"service_id",
strlen ("service_id"),
&service->id,
@ -194,7 +202,7 @@ unsigned int openais_service_link_and_init (
}
static int openais_service_unlink_common (
struct corosync_api_v1 *api,
struct corosync_api_v1 *corosync_api,
unsigned int object_service_handle,
const char *service_name,
unsigned int service_version)
@ -203,13 +211,13 @@ static int openais_service_unlink_common (
unsigned short *service_id;
unsigned int *found_service_handle;
res = api->object_key_get (object_service_handle,
res = corosync_api->object_key_get (object_service_handle,
"handle",
strlen ("handle"),
(void *)&found_service_handle,
NULL);
res = api->object_key_get (object_service_handle,
res = corosync_api->object_key_get (object_service_handle,
"service_id",
strlen ("service_id"),
(void *)&service_id,
@ -227,7 +235,7 @@ static int openais_service_unlink_common (
}
extern unsigned int openais_service_unlink_and_exit (
struct corosync_api_v1 *api,
struct corosync_api_v1 *corosync_api,
char *service_name,
unsigned int service_ver)
{
@ -235,20 +243,25 @@ extern unsigned int openais_service_unlink_and_exit (
unsigned int object_service_handle;
char *found_service_name;
unsigned int *found_service_ver;
unsigned int object_find_handle;
while (api->object_find (
corosync_api->object_find_create (
object_internal_configuration_handle,
"service",
strlen ("service"),
&object_find_handle);
while (corosync_api->object_find_next (
object_find_handle,
&object_service_handle) == 0) {
api->object_key_get (object_service_handle,
corosync_api->object_key_get (object_service_handle,
"name",
strlen ("name"),
(void *)&found_service_name,
NULL);
api->object_key_get (object_service_handle,
corosync_api->object_key_get (object_service_handle,
"ver",
strlen ("ver"),
(void *)&found_service_ver,
@ -261,49 +274,76 @@ extern unsigned int openais_service_unlink_and_exit (
(service_ver == *found_service_ver)) {
res = openais_service_unlink_common (
api, object_service_handle,
corosync_api, object_service_handle,
service_name, service_ver);
api->object_destroy (object_service_handle);
corosync_api->object_destroy (object_service_handle);
return res;
}
}
corosync_api->object_find_destroy (object_find_handle);
return (-1);
}
extern unsigned int openais_service_unlink_all (
struct corosync_api_v1 *api)
struct corosync_api_v1 *corosync_api)
{
char *service_name;
unsigned int *service_ver;
unsigned int object_service_handle;
unsigned int object_find_handle;
unsigned int res;
log_printf(LOG_LEVEL_NOTICE, "Unloading all openais components\n");
api->object_find_reset (object_internal_configuration_handle);
res = 0;
/*
* TODO
* Deleting of keys not supported during iteration at this time
* hence this ugly hack
*/
for (;;) {
corosync_api->object_find_create (
object_internal_configuration_handle,
"service",
strlen ("service"),
&object_find_handle);
while (api->object_find (object_internal_configuration_handle,
"service",
strlen ("service"),
&object_service_handle) == 0) {
api->object_key_get (object_service_handle,
res = corosync_api->object_find_next (
object_find_handle,
&object_service_handle);
/*
* Exit from unloading
*/
if (res == -1) {
break;
}
corosync_api->object_key_get (
object_service_handle,
"name",
strlen ("name"),
(void *)&service_name,
NULL);
api->object_key_get (object_service_handle,
corosync_api->object_key_get (
object_service_handle,
"ver",
strlen ("ver"),
(void *)&service_ver,
NULL);
openais_service_unlink_common (
api, object_service_handle, service_name, *service_ver);
corosync_api, object_service_handle,
service_name, *service_ver);
corosync_api->object_destroy (object_service_handle);
corosync_api->object_find_destroy (object_find_handle);
api->object_destroy (object_service_handle);
api->object_find_reset (object_internal_configuration_handle);
}
return (0);
@ -312,7 +352,7 @@ extern unsigned int openais_service_unlink_all (
/*
* Links default services into the executive
*/
unsigned int openais_service_defaults_link_and_init (struct corosync_api_v1 *api)
unsigned int openais_service_defaults_link_and_init (struct corosync_api_v1 *corosync_api)
{
unsigned int i;
@ -320,27 +360,30 @@ unsigned int openais_service_defaults_link_and_init (struct corosync_api_v1 *api
char *found_service_name;
char *found_service_ver;
unsigned int found_service_ver_atoi;
unsigned int object_find_handle;
api->object_create (OBJECT_PARENT_HANDLE,
corosync_api->object_create (OBJECT_PARENT_HANDLE,
&object_internal_configuration_handle,
"internal_configuration",
strlen ("internal_configuration"));
api->object_find_reset (OBJECT_PARENT_HANDLE);
while (api->object_find (
corosync_api->object_find_create (
OBJECT_PARENT_HANDLE,
"service",
strlen ("service"),
&object_find_handle);
while (corosync_api->object_find_next (
object_find_handle,
&object_service_handle) == 0) {
api->object_key_get (object_service_handle,
corosync_api->object_key_get (object_service_handle,
"name",
strlen ("name"),
(void *)&found_service_name,
NULL);
api->object_key_get (object_service_handle,
corosync_api->object_key_get (object_service_handle,
"ver",
strlen ("ver"),
(void *)&found_service_ver,
@ -349,19 +392,22 @@ unsigned int openais_service_defaults_link_and_init (struct corosync_api_v1 *api
found_service_ver_atoi = atoi (found_service_ver);
openais_service_link_and_init (
api,
corosync_api,
found_service_name,
found_service_ver_atoi);
}
if (default_services_requested (api) == 0) {
corosync_api->object_find_destroy (object_find_handle);
if (default_services_requested (corosync_api) == 0) {
return (0);
}
for (i = 0;
i < sizeof (default_services) / sizeof (struct default_service); i++) {
openais_service_link_and_init (
api,
corosync_api,
default_services[i].name,
default_services[i].ver);
}

View File

@ -1,6 +1,6 @@
/*
* Copyright (c) 2002-2005 MontaVista Software, Inc.
* Copyright (c) 2006-2007 Red Hat, Inc.
* Copyright (c) 2006-2008 Red Hat, Inc.
*
* All rights reserved.
*
@ -46,16 +46,14 @@
#include <arpa/inet.h>
#include <sys/param.h>
#include "../include/list.h"
#include "swab.h"
#include "list.h"
#include "util.h"
#include "totem.h"
#include "totemconfig.h"
#include "logsys.h"
#include "objdb.h"
#if defined(OPENAIS_BSD) || defined(OPENAIS_DARWIN)
#define HZ 100 /* 10ms */
#endif
#include "tlist.h" /* for HZ */
#define TOKEN_RETRANSMITS_BEFORE_LOSS_CONST 4
#define TOKEN_TIMEOUT 1000
@ -79,19 +77,22 @@ static char error_string_response[512];
/* These just makes the code below a little neater */
static inline int objdb_get_string (
struct objdb_iface_ver0 *objdb, unsigned int object_service_handle,
struct objdb_iface_ver0 *objdb,
unsigned int object_service_handle,
char *key, char **value)
{
int res;
*value = NULL;
if ( !(res = objdb->object_key_get (object_service_handle,
key,
strlen (key),
(void *)value,
NULL))) {
if (*value)
key,
strlen (key),
(void *)value,
NULL))) {
if (*value) {
return 0;
}
}
return -1;
}
@ -103,16 +104,62 @@ static inline void objdb_get_int (
char *value = NULL;
if (!objdb->object_key_get (object_service_handle,
key,
strlen (key),
(void *)&value,
NULL)) {
key,
strlen (key),
(void *)&value,
NULL)) {
if (value) {
*intvalue = atoi(value);
}
}
}
static unsigned int totem_handle_find (
struct objdb_iface_ver0 *objdb,
unsigned int *totem_find_handle) {
unsigned int object_find_handle;
unsigned int res;
/*
* Find a network section
*/
objdb->object_find_create (
OBJECT_PARENT_HANDLE,
"network",
strlen ("network"),
&object_find_handle);
res = objdb->object_find_next (
object_find_handle,
totem_find_handle);
objdb->object_find_destroy (object_find_handle);
/*
* Network section not found in configuration, checking for totem
*/
if (res == -1) {
objdb->object_find_create (
OBJECT_PARENT_HANDLE,
"totem",
strlen ("totem"),
&object_find_handle);
res = objdb->object_find_next (
object_find_handle,
totem_find_handle);
objdb->object_find_destroy (object_find_handle);
}
if (res == -1) {
return (-1);
}
return (0);
}
extern int totem_config_read (
struct objdb_iface_ver0 *objdb,
@ -124,6 +171,13 @@ extern int totem_config_read (
unsigned int object_interface_handle;
char *str;
unsigned int ringnumber = 0;
unsigned int object_find_interface_handle;
res = totem_handle_find (objdb, &object_totem_handle);
if (res == -1) {
printf ("couldn't find totem handle\n");
return (-1);
}
memset (totem_config, 0, sizeof (struct totem_config));
totem_config->interfaces = malloc (sizeof (struct totem_interface) * INTERFACE_MAX);
@ -139,87 +193,78 @@ extern int totem_config_read (
strcpy (totem_config->rrp_mode, "none");
objdb->object_find_reset (OBJECT_PARENT_HANDLE);
if (objdb->object_find (
OBJECT_PARENT_HANDLE,
"network",
strlen ("network"),
&object_totem_handle) == 0 ||
objdb->object_find (
OBJECT_PARENT_HANDLE,
"totem",
strlen ("totem"),
&object_totem_handle) == 0) {
if (!objdb_get_string (objdb,object_totem_handle, "version", &str)) {
if (strcmp (str, "2") == 0) {
totem_config->version = 2;
}
if (!objdb_get_string (objdb, object_totem_handle, "version", &str)) {
if (strcmp (str, "2") == 0) {
totem_config->version = 2;
}
if (!objdb_get_string (objdb,object_totem_handle, "secauth", &str)) {
if (strcmp (str, "on") == 0) {
totem_config->secauth = 1;
}
if (strcmp (str, "off") == 0) {
totem_config->secauth = 0;
}
}
if (!objdb_get_string (objdb, object_totem_handle, "rrp_mode", &str)) {
strcpy (totem_config->rrp_mode, str);
}
/*
* Get interface node id
*/
objdb_get_int (objdb, object_totem_handle, "nodeid", &totem_config->node_id);
objdb_get_int (objdb,object_totem_handle, "threads", &totem_config->threads);
objdb_get_int (objdb,object_totem_handle, "netmtu", &totem_config->net_mtu);
objdb_get_int (objdb,object_totem_handle, "token", &totem_config->token_timeout);
objdb_get_int (objdb,object_totem_handle, "token_retransmit", &totem_config->token_retransmit_timeout);
objdb_get_int (objdb,object_totem_handle, "hold", &totem_config->token_hold_timeout);
objdb_get_int (objdb,object_totem_handle, "token_retransmits_before_loss_const", &totem_config->token_retransmits_before_loss_const);
objdb_get_int (objdb,object_totem_handle, "join", &totem_config->join_timeout);
objdb_get_int (objdb,object_totem_handle, "send_join", &totem_config->send_join_timeout);
objdb_get_int (objdb,object_totem_handle, "consensus", &totem_config->consensus_timeout);
objdb_get_int (objdb,object_totem_handle, "merge", &totem_config->merge_timeout);
objdb_get_int (objdb,object_totem_handle, "downcheck", &totem_config->downcheck_timeout);
objdb_get_int (objdb,object_totem_handle, "fail_recv_const", &totem_config->fail_to_recv_const);
objdb_get_int (objdb,object_totem_handle, "seqno_unchanged_const", &totem_config->seqno_unchanged_const);
objdb_get_int (objdb,object_totem_handle, "rrp_token_expired_timeout", &totem_config->rrp_token_expired_timeout);
objdb_get_int (objdb,object_totem_handle, "rrp_problem_count_timeout", &totem_config->rrp_problem_count_timeout);
objdb_get_int (objdb,object_totem_handle, "rrp_problem_count_threshold", &totem_config->rrp_problem_count_threshold);
objdb_get_int (objdb,object_totem_handle, "heartbeat_failures_allowed", &totem_config->heartbeat_failures_allowed);
objdb_get_int (objdb,object_totem_handle, "max_network_delay", &totem_config->max_network_delay);
objdb_get_int (objdb,object_totem_handle, "window_size", &totem_config->window_size);
objdb_get_string (objdb, object_totem_handle, "vsftype", &totem_config->vsf_type);
objdb_get_int (objdb,object_totem_handle, "max_messages", &totem_config->max_messages);
}
while (objdb->object_find (
object_totem_handle,
"interface",
strlen ("interface"),
&object_interface_handle) == 0) {
if (!objdb_get_string (objdb, object_totem_handle, "secauth", &str)) {
if (strcmp (str, "on") == 0) {
totem_config->secauth = 1;
}
if (strcmp (str, "off") == 0) {
totem_config->secauth = 0;
}
}
if (!objdb_get_string (objdb, object_totem_handle, "rrp_mode", &str)) {
strcpy (totem_config->rrp_mode, str);
}
/*
* Get interface node id
*/
objdb_get_int (objdb, object_totem_handle, "nodeid", &totem_config->node_id);
objdb_get_int (objdb,object_totem_handle, "threads", &totem_config->threads);
objdb_get_int (objdb,object_totem_handle, "netmtu", &totem_config->net_mtu);
objdb_get_int (objdb,object_totem_handle, "token", &totem_config->token_timeout);
objdb_get_int (objdb,object_totem_handle, "token_retransmit", &totem_config->token_retransmit_timeout);
objdb_get_int (objdb,object_totem_handle, "hold", &totem_config->token_hold_timeout);
objdb_get_int (objdb,object_totem_handle, "token_retransmits_before_loss_const", &totem_config->token_retransmits_before_loss_const);
objdb_get_int (objdb,object_totem_handle, "join", &totem_config->join_timeout);
objdb_get_int (objdb,object_totem_handle, "send_join", &totem_config->send_join_timeout);
objdb_get_int (objdb,object_totem_handle, "consensus", &totem_config->consensus_timeout);
objdb_get_int (objdb,object_totem_handle, "merge", &totem_config->merge_timeout);
objdb_get_int (objdb,object_totem_handle, "downcheck", &totem_config->downcheck_timeout);
objdb_get_int (objdb,object_totem_handle, "fail_recv_const", &totem_config->fail_to_recv_const);
objdb_get_int (objdb,object_totem_handle, "seqno_unchanged_const", &totem_config->seqno_unchanged_const);
objdb_get_int (objdb,object_totem_handle, "rrp_token_expired_timeout", &totem_config->rrp_token_expired_timeout);
objdb_get_int (objdb,object_totem_handle, "rrp_problem_count_timeout", &totem_config->rrp_problem_count_timeout);
objdb_get_int (objdb,object_totem_handle, "rrp_problem_count_threshold", &totem_config->rrp_problem_count_threshold);
objdb_get_int (objdb,object_totem_handle, "heartbeat_failures_allowed", &totem_config->heartbeat_failures_allowed);
objdb_get_int (objdb,object_totem_handle, "max_network_delay", &totem_config->max_network_delay);
objdb_get_int (objdb,object_totem_handle, "window_size", &totem_config->window_size);
objdb_get_string (objdb, object_totem_handle, "vsftype", &totem_config->vsf_type);
objdb_get_int (objdb,object_totem_handle, "max_messages", &totem_config->max_messages);
objdb->object_find_create (
object_totem_handle,
"interface",
strlen ("interface"),
&object_find_interface_handle);
while (objdb->object_find_next (
object_find_interface_handle,
&object_interface_handle) == 0) {
objdb_get_int (objdb, object_interface_handle, "ringnumber", &ringnumber);
@ -234,7 +279,7 @@ extern int totem_config_read (
* Get mcast port
*/
if (!objdb_get_string (objdb, object_interface_handle, "mcastport", &str)) {
totem_config->interfaces[ringnumber].ip_port = htons (atoi (str));
totem_config->interfaces[ringnumber].ip_port = atoi (str);
}
/*
@ -248,9 +293,9 @@ extern int totem_config_read (
totem_config->interface_count++;
}
return 0;
objdb->object_find_destroy (object_find_interface_handle);
return (-1);
return 0;
}
int totem_config_validate (
@ -555,7 +600,7 @@ int totem_config_keyread (
{
int got_key = 0;
char *key_location = NULL;
unsigned int object_service_handle;
unsigned int object_totem_handle;
int res;
memset (totem_config->private_key, 0, 128);
@ -565,38 +610,31 @@ int totem_config_keyread (
return (0);
}
if (objdb->object_find (
OBJECT_PARENT_HANDLE,
"network",
strlen ("network"),
&object_service_handle) == 0 ||
objdb->object_find (
OBJECT_PARENT_HANDLE,
"totem",
strlen ("totem"),
&object_service_handle) == 0) {
/* objdb may store the location of the key file */
if (!objdb_get_string (objdb,object_service_handle, "keyfile", &key_location)
&& key_location) {
res = read_keyfile(key_location, totem_config, error_string);
if (res)
goto key_error;
got_key = 1;
res = totem_handle_find (objdb, &object_totem_handle);
if (res == -1) {
return (-1);
}
/* objdb may store the location of the key file */
if (!objdb_get_string (objdb,object_totem_handle, "keyfile", &key_location)
&& key_location) {
res = read_keyfile(key_location, totem_config, error_string);
if (res) {
goto key_error;
}
else { /* Or the key itself may be in the objdb */
char *key = NULL;
int key_len;
res = objdb->object_key_get (object_service_handle,
"key",
strlen ("key"),
(void *)&key,
&key_len);
if (res == 0 && key) {
memcpy(totem_config->private_key, key, key_len);
totem_config->private_key_len = key_len;
got_key = 1;
}
got_key = 1;
} else { /* Or the key itself may be in the objdb */
char *key = NULL;
int key_len;
res = objdb->object_key_get (object_totem_handle,
"key",
strlen ("key"),
(void *)&key,
&key_len);
if (res == 0 && key) {
memcpy(totem_config->private_key, key, key_len);
totem_config->private_key_len = key_len;
got_key = 1;
}
}

View File

@ -132,15 +132,19 @@ struct corosync_api_v1 {
struct object_key_valid *object_key_valid_list,
unsigned int object_key_valid_list_entries);
int (*object_find_reset) (
unsigned int parent_object_handle);
int (*object_find) (
int (*object_find_create) (
unsigned int parent_object_handle,
void *object_name,
int object_name_len,
unsigned int *object_find_handle);
int (*object_find_next) (
unsigned int object_find_handle,
unsigned int *object_handle);
int (*object_find_destroy) (
unsigned int object_find_handle);
int (*object_key_get) (
unsigned int object_handle,
void *key_name,

View File

@ -10,6 +10,8 @@
* - Refactoring of code into several AMF files
* - Serializers/deserializers
*
* Copyright (c) 2007-2008 Red Hat, Inc.
*
* All rights reserved.
*
* This software licensed under BSD license, the text of which follows:
@ -51,7 +53,6 @@
#include <errno.h>
#include <sys/types.h>
#include <regex.h>
#include <assert.h>
#include "../include/saAis.h"
#include "../include/saAmf.h"
@ -1010,12 +1011,16 @@ int amf_enabled (struct objdb_iface_ver0 *objdb)
unsigned int object_service_handle;
char *value;
int enabled = 0;
unsigned int object_find_handle;
objdb->object_find_reset (OBJECT_PARENT_HANDLE);
if (objdb->object_find (
objdb->object_find_create (
OBJECT_PARENT_HANDLE,
"amf",
strlen ("amf"),
&object_find_handle);
if (objdb->object_find_next (
object_find_handle,
&object_service_handle) == 0) {
value = NULL;
@ -1034,6 +1039,8 @@ int amf_enabled (struct objdb_iface_ver0 *objdb)
}
}
objdb->object_find_destroy (object_find_handle);
return enabled;
}

View File

@ -3114,18 +3114,22 @@ static int evt_lib_exit(void *conn)
static int evt_exec_init(struct corosync_api_v1 *corosync_api)
{
unsigned int object_service_handle;
unsigned int object_find_handle;
char *value;
api = corosync_api;
log_printf(LOG_LEVEL_DEBUG, "Evt exec init request\n");
api->object_find_reset (OBJECT_PARENT_HANDLE);
if (api->object_find (
OBJECT_PARENT_HANDLE,
"event",
strlen ("event"),
&object_service_handle) == 0) {
api->object_find_create (
OBJECT_PARENT_HANDLE,
"event",
strlen ("event"),
&object_find_handle);
if (api->object_find_next (
object_find_handle,
&object_service_handle) == 0) {
value = NULL;
if ( !api->object_key_get (object_service_handle,

View File

@ -227,7 +227,6 @@ static int read_config_file_into_objdb(
objdb->object_key_create(object_handle, "ver", strlen("ver"),
"0", 2);
#ifdef OUTAA
/*
* Load msg module
*/
@ -247,7 +246,6 @@ static int read_config_file_into_objdb(
"openais_lck", strlen("openais_lck") + 1);
objdb->object_key_create(object_handle, "ver", strlen("ver"),
"0", 2);
#endif
sprintf (error_reason, "Successfully read main configuration file '%s'.\n", filename);
*error_string = error_reason;