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

Reply via email to