Bladeren bron

Add writeback call to objdb

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@1530 fd59a12c-fef9-0310-b244-a6a79926bd2f
Patrick Caulfield 18 jaren geleden
bovenliggende
commit
87e7ea9c1e
5 gewijzigde bestanden met toevoegingen van 44 en 1 verwijderingen
  1. 1 0
      exec/config.h
  2. 13 0
      exec/main.c
  3. 4 0
      exec/main.h
  4. 24 1
      exec/objdb.c
  5. 2 0
      exec/objdb.h

+ 1 - 0
exec/config.h

@@ -37,6 +37,7 @@
 
 
 struct config_iface_ver0 {
 struct config_iface_ver0 {
 	int (*config_readconfig) (struct objdb_iface_ver0 *objdb, char **error_string);
 	int (*config_readconfig) (struct objdb_iface_ver0 *objdb, char **error_string);
+	int (*config_writeconfig) (struct objdb_iface_ver0 *objdb, char **error_string);
 };
 };
 
 
 
 

+ 13 - 0
exec/main.c

@@ -103,6 +103,10 @@ static struct totem_logging_configuration totem_logging_configuration;
 
 
 static char delivery_data[MESSAGE_SIZE_MAX];
 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);
 SaClmClusterNodeT *(*main_clm_get_by_nodeid) (unsigned int node_id);
 
 
 static void sigusr2_handler (int num)
 static void sigusr2_handler (int num)
@@ -418,6 +422,12 @@ static void deliver_fn (
 		(header, nodeid);
 		(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)
 int main (int argc, char **argv)
 {
 {
 	char *error_string;
 	char *error_string;
@@ -500,6 +510,8 @@ int main (int argc, char **argv)
 
 
 	objdb->objdb_init ();
 	objdb->objdb_init ();
 
 
+	num_config_modules = 0;
+
 	/*
 	/*
 	 * Bootstrap in the default configuration parser or use
 	 * Bootstrap in the default configuration parser or use
 	 * the openais default built in parser if the configuration parser
 	 * the openais default built in parser if the configuration parser
@@ -535,6 +547,7 @@ int main (int argc, char **argv)
 			openais_exit_error (AIS_DONE_MAINCONFIGREAD);
 			openais_exit_error (AIS_DONE_MAINCONFIGREAD);
 		}
 		}
 		log_printf (LOG_LEVEL_NOTICE, error_string);
 		log_printf (LOG_LEVEL_NOTICE, error_string);
+		config_modules[num_config_modules++] = config;
 
 
 		iface = strtok(NULL, ":");
 		iface = strtok(NULL, ":");
 	}
 	}

+ 4 - 0
exec/main.h

@@ -38,6 +38,8 @@
 #include "../include/saAis.h"
 #include "../include/saAis.h"
 #include "../include/saClm.h"
 #include "../include/saClm.h"
 #include "../include/ipc_gen.h"
 #include "../include/ipc_gen.h"
+#include "objdb.h"
+#include "config.h"
 #include "totempg.h"
 #include "totempg.h"
 
 
 #ifndef AIS_EXEC_H_DEFINED
 #ifndef AIS_EXEC_H_DEFINED
@@ -61,4 +63,6 @@ poll_handle aisexec_poll_handle;
 
 
 extern SaClmClusterNodeT *(*main_clm_get_by_nodeid) (unsigned int node_id);
 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 */
 #endif /* AIS_EXEC_H_DEFINED */

+ 24 - 1
exec/objdb.c

@@ -36,6 +36,8 @@
 #include <stdio.h>
 #include <stdio.h>
 #include <errno.h>
 #include <errno.h>
 #include "objdb.h"
 #include "objdb.h"
+#include "config.h"
+#include "main.h"
 #include "../lcr/lcr_comp.h"
 #include "../lcr/lcr_comp.h"
 #include "../include/hdb.h"
 #include "../include/hdb.h"
 #include "../include/list.h"
 #include "../include/list.h"
@@ -66,6 +68,8 @@ struct object_instance {
 	int object_key_valid_list_entries;
 	int object_key_valid_list_entries;
 };
 };
 
 
+struct objdb_iface_ver0 objdb_iface;
+
 static struct hdb_handle_database object_instance_database = {
 static struct hdb_handle_database object_instance_database = {
 	.handle_count	= 0,
 	.handle_count	= 0,
 	.handles	= 0,
 	.handles	= 0,
@@ -1085,6 +1089,24 @@ static int object_dump(unsigned int object_handle,
 	return (res);
 	return (res);
 }
 }
 
 
+static int object_write_config(char **error_string)
+{
+	struct config_iface_ver0 **modules;
+	int num_modules;
+	int i;
+	int res;
+
+	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)
+				return res;
+		}
+	}
+	return 0;
+}
+
 struct objdb_iface_ver0 objdb_iface = {
 struct objdb_iface_ver0 objdb_iface = {
 	.objdb_init		= objdb_init,
 	.objdb_init		= objdb_init,
 	.object_create		= object_create,
 	.object_create		= object_create,
@@ -1107,7 +1129,8 @@ struct objdb_iface_ver0 objdb_iface = {
 	.object_iter_from	= object_iter_from,
 	.object_iter_from	= object_iter_from,
 	.object_priv_get	= object_priv_get,
 	.object_priv_get	= object_priv_get,
 	.object_parent_get	= object_parent_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] = {
 struct lcr_iface objdb_iface_ver0[1] = {

+ 2 - 0
exec/objdb.h

@@ -168,6 +168,8 @@ struct objdb_iface_ver0 {
 		int *key_len,
 		int *key_len,
 		void **value,
 		void **value,
 		int *value_len);
 		int *value_len);
+
+	int (*object_write_config) (char **error_string);
 };
 };
 
 
 #endif /* OBJDB_H_DEFINED */
 #endif /* OBJDB_H_DEFINED */