From 22b7e4bbeaa84248b7d9d748f22e9a874b771417 Mon Sep 17 00:00:00 2001 From: Angus Salkeld Date: Thu, 15 Apr 2010 23:16:52 +0000 Subject: [PATCH] CTS: make record events blocking git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@2765 fd59a12c-fef9-0310-b244-a6a79926bd2f --- cts/agents/cpg_test_agent.c | 55 +++++++++++++++++++++---------------- cts/corosync.py | 10 +++---- cts/corotests.py | 6 ++++ 3 files changed, 43 insertions(+), 28 deletions(-) diff --git a/cts/agents/cpg_test_agent.c b/cts/agents/cpg_test_agent.c index 1f5babcd..139b74bc 100644 --- a/cts/agents/cpg_test_agent.c +++ b/cts/agents/cpg_test_agent.c @@ -185,26 +185,29 @@ static void config_change_callback ( /* group_name,ip,pid,join|leave */ - if (record_config_events_g == 0) { - return; - } for (i = 0; i < left_list_entries; i++) { - syslog (LOG_DEBUG, "%s() inserting leave event into list", __func__); + syslog (LOG_INFO, "%s(%d) %d:%s left", __func__, record_config_events_g, + left_list[i].nodeid, groupName->value); - log_pt = malloc (sizeof(log_entry_t)); - list_init (&log_pt->list); - snprintf (log_pt->log, LOG_STR_SIZE, "%s,%d,%d,left", - groupName->value, left_list[i].nodeid,left_list[i].pid); - list_add_tail(&log_pt->list, &config_chg_log_head); + if (record_config_events_g > 0) { + log_pt = malloc (sizeof(log_entry_t)); + list_init (&log_pt->list); + snprintf (log_pt->log, LOG_STR_SIZE, "%s,%d,%d,left", + groupName->value, left_list[i].nodeid,left_list[i].pid); + list_add_tail(&log_pt->list, &config_chg_log_head); + } } for (i = 0; i < joined_list_entries; i++) { - syslog (LOG_DEBUG, "%s() inserting join event into list", __func__); + syslog (LOG_INFO, "%s(%d) %d:%s joined", __func__, record_config_events_g, + left_list[i].nodeid, groupName->value); - log_pt = malloc (sizeof(log_entry_t)); - list_init (&log_pt->list); - snprintf (log_pt->log, LOG_STR_SIZE, "%s,%d,%d,join", - groupName->value, joined_list[i].nodeid,joined_list[i].pid); - list_add_tail (&log_pt->list, &config_chg_log_head); + if (record_config_events_g > 0) { + log_pt = malloc (sizeof(log_entry_t)); + list_init (&log_pt->list); + snprintf (log_pt->log, LOG_STR_SIZE, "%s,%d,%d,join", + groupName->value, joined_list[i].nodeid,joined_list[i].pid); + list_add_tail (&log_pt->list, &config_chg_log_head); + } } } @@ -219,10 +222,15 @@ static void record_messages (void) syslog (LOG_DEBUG,"%s() record:%d", __func__, record_messages_g); } -static void record_config_events (void) +static void record_config_events (int sock) { + char response[100]; + record_config_events_g = 1; - syslog (LOG_DEBUG,"%s() record:%d", __func__, record_config_events_g); + syslog (LOG_INFO, "%s() record:%d", __func__, record_config_events_g); + + snprintf (response, 100, "%s", OK_STR); + send (sock, response, strlen (response), 0); } static void read_config_event (int sock) @@ -233,12 +241,12 @@ static void read_config_event (int sock) if (list != &config_chg_log_head) { entry = list_entry (list, log_entry_t, list); - send (sock, entry->log, strlen (entry->log) + 1, 0); + send (sock, entry->log, strlen (entry->log), 0); list_del (&entry->list); free (entry); } else { syslog (LOG_DEBUG,"%s() no events in list", __func__); - send (sock, empty, strlen (empty) + 1, 0); + send (sock, empty, strlen (empty), 0); } } @@ -463,7 +471,7 @@ static void context_test (int sock) else { snprintf (response, 100, "%s", OK_STR); } - send (sock, response, strlen (response) + 1, 0); + send (sock, response, strlen (response), 0); } static void msg_blaster_zcb (int sock, char* num_to_send_str) @@ -531,6 +539,7 @@ static void do_command (int sock, char* func, char*args[], int num_args) "Could not join process group, error %d\n", result); exit (1); } + syslog (LOG_INFO, "called cpg_join()!"); } else if (strcmp ("cpg_leave",func) == 0) { @@ -568,7 +577,7 @@ static void do_command (int sock, char* func, char*args[], int num_args) cpg_local_get (cpg_handle, &local_nodeid); snprintf (response, 100, "%u",local_nodeid); - send (sock, response, strlen (response) + 1, 0); + send (sock, response, strlen (response), 0); } else if (strcmp ("cpg_finalize", func) == 0) { cpg_finalize (cpg_handle); @@ -576,7 +585,7 @@ static void do_command (int sock, char* func, char*args[], int num_args) cpg_fd = -1; } else if (strcmp ("record_config_events", func) == 0) { - record_config_events (); + record_config_events (sock); } else if (strcmp ("record_messages", func) == 0) { record_messages (); } else if (strcmp ("read_config_event", func) == 0) { @@ -591,7 +600,7 @@ static void do_command (int sock, char* func, char*args[], int num_args) context_test (sock); } else if (strcmp ("are_you_ok_dude", func) == 0) { snprintf (response, 100, "%s", OK_STR); - send (sock, response, strlen (response) + 1, 0); + send (sock, response, strlen (response), 0); } else { syslog (LOG_ERR,"%s RPC:%s not supported!", __func__, func); } diff --git a/cts/corosync.py b/cts/corosync.py index 3ba14507..bb818d62 100644 --- a/cts/corosync.py +++ b/cts/corosync.py @@ -423,11 +423,10 @@ class TestAgent(object): def stop(self): '''Tear down (undo) the given ScenarioComponent''' - if self.status(): - self.env.debug('test agent: stopping %s on node %s' % (self.binary, self.node)) - self.sock.close () - self.rsh(self.node, "killall " + self.binary + " 2>/dev/null") - self.started = False + self.env.debug('test agent: stopping %s on node %s' % (self.binary, self.node)) + self.sock.close () + self.rsh(self.node, "killall " + self.binary + " 2>/dev/null") + self.started = False def send (self, args): if not self.started: @@ -547,6 +546,7 @@ class CpgTestAgent(TestAgent): self.send (["record_config_events", "truncate"]) else: self.send (["record_config_events", "append"]) + return self.read () def read_config_event(self): self.send (["read_config_event"]) diff --git a/cts/corotests.py b/cts/corotests.py index c1680e5a..a91e0bd6 100644 --- a/cts/corotests.py +++ b/cts/corotests.py @@ -304,6 +304,12 @@ class CpgCfgChgOnNodeIsolate(CpgConfigChangeBase): def __init__(self, cm): CpgConfigChangeBase.__init__(self,cm) self.name="CpgCfgChgOnNodeIsolate" + + def config_valid(self, config): + if config.has_key('totem/rrp_mode'): + return False + else: + return True def failure_action(self): self.CM.log("isolating node " + self.wobbly)