Bläddra i källkod

Change sync_init api call to pass information relevant for making
synchronization decisions.


git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@2305 fd59a12c-fef9-0310-b244-a6a79926bd2f

Steven Dake 16 år sedan
förälder
incheckning
e1b054ae0a
6 ändrade filer med 49 tillägg och 16 borttagningar
  1. 12 3
      exec/evil.c
  2. 3 3
      exec/sync.c
  3. 5 2
      exec/sync.h
  4. 16 5
      exec/syncv2.c
  5. 4 1
      include/corosync/engine/coroapi.h
  6. 9 2
      services/cpg.c

+ 12 - 3
exec/evil.c

@@ -76,7 +76,10 @@
 #include "sync.h"
 #include "sync.h"
 #include "evil.h"
 #include "evil.h"
 
 
-static void clm_sync_init (void);
+static void clm_sync_init (
+	const unsigned int *member_list,
+	size_t member_list_entries,
+	const struct memb_ring_id *ring_id);
 
 
 static int clm_sync_process (void);
 static int clm_sync_process (void);
 
 
@@ -98,7 +101,10 @@ static struct sync_callbacks clm_sync_operations = {
 
 
 static struct corosync_api_v1 *api = NULL;
 static struct corosync_api_v1 *api = NULL;
 
 
-static void sync_dummy_init (void)
+static void sync_dummy_init (
+	const unsigned int *member_list,
+	size_t member_list_entries,
+	const struct memb_ring_id *ring_id)
 {
 {
 }
 }
 
 
@@ -329,7 +335,10 @@ static int clm_nodejoin_send (void)
 /*
 /*
  * This is a noop for this service
  * This is a noop for this service
  */
  */
-static void clm_sync_init (void)
+static void clm_sync_init (
+	const unsigned int *member_list,
+	size_t member_list_entries,
+	const struct memb_ring_id *ring_id)
 {
 {
 	return;
 	return;
 }
 }

+ 3 - 3
exec/sync.c

@@ -78,7 +78,7 @@ static struct sync_callbacks sync_callbacks;
 static int sync_processing = 0;
 static int sync_processing = 0;
 
 
 static void (*sync_next_start) (
 static void (*sync_next_start) (
-	unsigned int *member_list,
+	const unsigned int *member_list,
 	size_t member_list_entries,
 	size_t member_list_entries,
 	const struct memb_ring_id *ring_id);
 	const struct memb_ring_id *ring_id);
 
 
@@ -176,7 +176,7 @@ static void sync_start_init (const struct memb_ring_id *ring_id)
 
 
 static void sync_service_init (struct memb_ring_id *ring_id)
 static void sync_service_init (struct memb_ring_id *ring_id)
 {
 {
-	sync_callbacks.sync_init ();
+	sync_callbacks.sync_init (my_member_list, my_member_list_entries, ring_id);
 	totempg_callback_token_destroy (&sync_callback_token_handle);
 	totempg_callback_token_destroy (&sync_callback_token_handle);
 
 
 	/*
 	/*
@@ -264,7 +264,7 @@ int sync_register (
 		struct sync_callbacks *callbacks),
 		struct sync_callbacks *callbacks),
 
 
 	void (*next_start) (
 	void (*next_start) (
-		unsigned int *member_list,
+		const unsigned int *member_list,
 		size_t member_list_entries,
 		size_t member_list_entries,
 		const struct memb_ring_id *ring_id))
 		const struct memb_ring_id *ring_id))
 {
 {

+ 5 - 2
exec/sync.h

@@ -40,7 +40,10 @@
 #include "totemsrp.h"
 #include "totemsrp.h"
 
 
 struct sync_callbacks {
 struct sync_callbacks {
-	void (*sync_init) (void);
+	void (*sync_init) (
+		const unsigned int *member_list,
+		size_t member_list_entries,
+		const struct memb_ring_id *ring_id);
 	int (*sync_process) (void);
 	int (*sync_process) (void);
 	void (*sync_activate) (void);
 	void (*sync_activate) (void);
 	void (*sync_abort) (void);
 	void (*sync_abort) (void);
@@ -53,7 +56,7 @@ int sync_register (
 		struct sync_callbacks *callbacks),
 		struct sync_callbacks *callbacks),
 
 
 	void (*next_start) (
 	void (*next_start) (
-		unsigned int *member_list,
+		const unsigned int *member_list,
 		size_t member_list_entries,
 		size_t member_list_entries,
 		const struct memb_ring_id *ring_id));
 		const struct memb_ring_id *ring_id));
 
 

+ 16 - 5
exec/syncv2.c

@@ -80,7 +80,10 @@ enum sync_state {
 
 
 struct service_entry {
 struct service_entry {
 	int service_id;
 	int service_id;
-	void (*sync_init) (void);
+	void (*sync_init) (
+		const unsigned int *member_list,
+		size_t member_list_entries,
+		const struct memb_ring_id *ring_id);
 	void (*sync_abort) (void);
 	void (*sync_abort) (void);
 	int (*sync_process) (void);
 	int (*sync_process) (void);
 	void (*sync_activate) (void);
 	void (*sync_activate) (void);
@@ -113,7 +116,11 @@ static int my_processing_idx = 0;
 
 
 static hdb_handle_t my_schedwrk_handle;
 static hdb_handle_t my_schedwrk_handle;
 
 
-static struct processor_entry my_processor_list[128];
+static struct processor_entry my_processor_list[PROCESSOR_COUNT_MAX];
+
+static unsigned int my_member_list[PROCESSOR_COUNT_MAX];
+
+static size_t my_member_list_entries = 0;
 
 
 static int my_processor_list_entries = 0;
 static int my_processor_list_entries = 0;
 
 
@@ -123,7 +130,7 @@ static int my_service_list_entries = 0;
 
 
 static const struct memb_ring_id sync_ring_id;
 static const struct memb_ring_id sync_ring_id;
 
 
-static struct service_entry my_initial_service_list[128];
+static struct service_entry my_initial_service_list[PROCESSOR_COUNT_MAX];
 
 
 static int my_initial_service_list_entries;
 static int my_initial_service_list_entries;
 
 
@@ -229,7 +236,10 @@ static void sync_barrier_handler (unsigned int nodeid, const void *msg)
 	}
 	}
 }
 }
 
 
-static void dummy_sync_init (void)
+static void dummy_sync_init (
+	const unsigned int *member_list,
+	unsigned int member_list_entries,
+	const struct memb_ring_id *ring_id)
 {
 {
 }
 }
 
 
@@ -438,7 +448,8 @@ static int schedwrk_processor (const void *context)
 
 
 	if (my_service_list[my_processing_idx].state == INIT) {
 	if (my_service_list[my_processing_idx].state == INIT) {
 		my_service_list[my_processing_idx].state = PROCESS;
 		my_service_list[my_processing_idx].state = PROCESS;
-		my_service_list[my_processing_idx].sync_init ();
+		my_service_list[my_processing_idx].sync_init (my_member_list, my_member_list_entries,
+			&my_ring_id);
 	}
 	}
 	if (my_service_list[my_processing_idx].state == PROCESS) {
 	if (my_service_list[my_processing_idx].state == PROCESS) {
 		my_service_list[my_processing_idx].state = PROCESS;
 		my_service_list[my_processing_idx].state = PROCESS;

+ 4 - 1
include/corosync/engine/coroapi.h

@@ -629,7 +629,10 @@ struct corosync_service_engine {
 		const unsigned int *joined_list, size_t joined_list_entries,
 		const unsigned int *joined_list, size_t joined_list_entries,
 		const struct memb_ring_id *ring_id);
 		const struct memb_ring_id *ring_id);
 	enum cs_sync_mode sync_mode;
 	enum cs_sync_mode sync_mode;
-	void (*sync_init) (void);
+	void (*sync_init) (
+		const unsigned int *member_list,
+		size_t member_list_entries,
+		const struct memb_ring_id *ring_id);
 	int (*sync_process) (void);
 	int (*sync_process) (void);
 	void (*sync_activate) (void);
 	void (*sync_activate) (void);
 	void (*sync_abort) (void);
 	void (*sync_abort) (void);

+ 9 - 2
services/cpg.c

@@ -206,7 +206,11 @@ static int cpg_node_joinleave_send (unsigned int pid, const mar_cpg_name_t *grou
 
 
 static int cpg_exec_send_joinlist(void);
 static int cpg_exec_send_joinlist(void);
 
 
-static void cpg_sync_init (void);
+static void cpg_sync_init (
+	const unsigned int *member_list,
+	size_t member_list_entries,
+	const struct memb_ring_id *ring_id);
+
 static int  cpg_sync_process (void);
 static int  cpg_sync_process (void);
 static void cpg_sync_activate (void);
 static void cpg_sync_activate (void);
 static void cpg_sync_abort (void);
 static void cpg_sync_abort (void);
@@ -354,7 +358,10 @@ struct req_exec_cpg_downlist {
 
 
 static struct req_exec_cpg_downlist g_req_exec_cpg_downlist;
 static struct req_exec_cpg_downlist g_req_exec_cpg_downlist;
 
 
-static void cpg_sync_init (void)
+static void cpg_sync_init (
+	const unsigned int *member_list,
+	size_t member_list_entries,
+	const struct memb_ring_id *ring_id)
 {
 {
 }
 }