This patch adds a config_writeconfig() call to the configuration API,
this is called by objdb when object_write_config() is called.
Chrissie
Index: exec/config.h
===================================================================
--- exec/config.h (revision 1519)
+++ exec/config.h (working copy)
@@ -37,6 +37,7 @@
struct config_iface_ver0 {
int (*config_readconfig) (struct objdb_iface_ver0 *objdb, char **error_string);
+ int (*config_writeconfig) (struct objdb_iface_ver0 *objdb, char **error_string);
};
Index: exec/objdb.c
===================================================================
--- exec/objdb.c (revision 1519)
+++ exec/objdb.c (working copy)
@@ -36,10 +36,15 @@
#include <stdio.h>
#include <errno.h>
#include "objdb.h"
+#include "config.h"
+#include "logsys.h"
+#include "main.h"
#include "../lcr/lcr_comp.h"
#include "../include/hdb.h"
#include "../include/list.h"
+LOGSYS_DECLARE_SUBSYS ("OBJDB", LOG_INFO);
+
struct object_key {
void *key_name;
int key_len;
@@ -66,6 +71,8 @@
int object_key_valid_list_entries;
};
+struct objdb_iface_ver0 objdb_iface;
+
static struct hdb_handle_database object_instance_database = {
.handle_count = 0,
.handles = 0,
@@ -1084,6 +1091,28 @@
return (res);
}
+static int object_write_config(void)
+{
+ struct config_iface_ver0 **modules;
+ int num_modules;
+ int i;
+ int res;
+ char *error_string;
+
+ main_get_config_modules(&modules, &num_modules);
+ for (i=0; i<num_modules; i++) {
+ if (modules[i]->config_writeconfig) {
+ res = modules[i]->config_writeconfig(&objdb_iface, &error_string);
+ if (res) {
+ log_printf (LOG_LEVEL_ERROR, error_string);
+ return res;
+ }
+ log_printf (LOG_LEVEL_NOTICE, error_string);
+ }
+ }
+ return 0;
+}
+
struct objdb_iface_ver0 objdb_iface = {
.objdb_init = objdb_init,
.object_create = object_create,
@@ -1106,7 +1135,8 @@
.object_iter_from = object_iter_from,
.object_priv_get = object_priv_get,
.object_parent_get = object_parent_get,
- .object_dump = object_dump
+ .object_dump = object_dump,
+ .object_write_config = object_write_config,
};
struct lcr_iface objdb_iface_ver0[1] = {
Index: exec/objdb.h
===================================================================
--- exec/objdb.h (revision 1519)
+++ exec/objdb.h (working copy)
@@ -168,6 +168,8 @@
int *key_len,
void **value,
int *value_len);
+
+ int (*object_write_config) (void);
};
#endif /* OBJDB_H_DEFINED */
Index: exec/main.c
===================================================================
--- exec/main.c (revision 1519)
+++ exec/main.c (working copy)
@@ -103,6 +103,10 @@
static char delivery_data[MESSAGE_SIZE_MAX];
+static int num_config_modules;
+
+static struct config_iface_ver0 *config_modules[MAX_DYNAMIC_SERVICES];
+
SaClmClusterNodeT *(*main_clm_get_by_nodeid) (unsigned int node_id);
static void sigusr2_handler (int num)
@@ -418,6 +422,12 @@
(header, nodeid);
}
+void main_get_config_modules(struct config_iface_ver0 ***modules, int *num)
+{
+ *modules = config_modules;
+ *num = num_config_modules;
+}
+
int main (int argc, char **argv)
{
char *error_string;
@@ -500,6 +510,8 @@
objdb->objdb_init ();
+ num_config_modules = 0;
+
/* User's bootstrap config service */
config_iface = getenv("OPENAIS_DEFAULT_CONFIG_IFACE");
if (!config_iface) {
@@ -531,6 +543,7 @@
openais_exit_error (AIS_DONE_MAINCONFIGREAD);
}
log_printf (LOG_LEVEL_NOTICE, error_string);
+ config_modules[num_config_modules++] = config;
iface = strtok(NULL, ":");
}
Index: exec/main.h
===================================================================
--- exec/main.h (revision 1519)
+++ exec/main.h (working copy)
@@ -38,6 +38,8 @@
#include "../include/saAis.h"
#include "../include/saClm.h"
#include "../include/ipc_gen.h"
+#include "objdb.h"
+#include "config.h"
#include "totempg.h"
#ifndef AIS_EXEC_H_DEFINED
@@ -61,4 +63,6 @@
extern SaClmClusterNodeT *(*main_clm_get_by_nodeid) (unsigned int node_id);
+extern void main_get_config_modules(struct config_iface_ver0 ***modules, int *num);
+
#endif /* AIS_EXEC_H_DEFINED */
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais