]> git.proxmox.com Git - mirror_corosync.git/commitdiff
testvotequorum2: Opt for polling with old ringid
authorJan Friesse <jfriesse@redhat.com>
Mon, 4 Aug 2014 14:19:00 +0000 (16:19 +0200)
committerJan Friesse <jfriesse@redhat.com>
Tue, 5 Aug 2014 15:22:49 +0000 (17:22 +0200)
Option -F is added to force sending old ringid for given number of
times. Option is useful for testing failure scenario during corosync
synchronization phase.

Signed-off-by: Jan Friesse <jfriesse@redhat.com>
Reviewed-by: Christine Caulfield <ccaulfie@redhat.com>
test/testvotequorum2.c

index f545070f769fa0e1501f96136674019ae374b656..0a2e926df2d3cc41b3b5b5b0beaad395b3058952 100644 (file)
@@ -47,6 +47,8 @@
 static votequorum_handle_t handle;
 
 static votequorum_ring_id_t last_received_ring_id;
+static votequorum_ring_id_t ring_id_to_send;
+static int no_sent_old_ringid = 0;
 
 static int print_info(int ok_to_fail)
 {
@@ -88,11 +90,13 @@ static void votequorum_notification_fn(
        printf("\n");
 
        memcpy(&last_received_ring_id, &ring_id, sizeof(ring_id));
+       no_sent_old_ringid = 0;
 }
 
 static void usage(const char *command)
 {
-  printf("%s [-p <num>] [-t <time>] [-n <name>] [-c] [-m]\n", command);
+  printf("%s [-F <num>] [-p <num>] [-t <time>] [-n <name>] [-c] [-m]\n", command);
+       printf("      -F <num>  Number of times to send old ringid before actual ringid is sent (for testing, default = 0)\n");
         printf("      -p <num>  Number of times to poll qdevice (default 0=infinte)\n");
         printf("      -t <secs> Time (in seconds) to wait between polls (default=1)\n");
         printf("      -n <name> Name of quorum device (default QDEVICE)\n");
@@ -107,11 +111,12 @@ int main(int argc, char *argv[])
        int ret = 0;
        int cast_vote = 1, master_wins = 0;
        int pollcount=0, polltime=1, quiet=0, once=0;
+       int send_old_ringid = 0;
        int err;
        int opt;
        votequorum_callbacks_t callbacks;
        const char *devicename = "QDEVICE";
-       const char *options = "n:p:t:cmq1h";
+       const char *options = "F:n:p:t:cmq1h";
 
        memset(&callbacks, 0, sizeof(callbacks));
        callbacks.votequorum_notify_fn = votequorum_notification_fn;
@@ -130,6 +135,9 @@ int main(int argc, char *argv[])
                case 'q':
                        quiet = 1;
                        break;
+               case 'F':
+                       send_old_ringid = atoi(optarg)+1;
+                       break;
                case 'p':
                        pollcount = atoi(optarg)+1;
                        break;
@@ -191,7 +199,17 @@ int main(int argc, char *argv[])
                         }
 
                        if (!quiet) print_info(0);
-                       if ((err=votequorum_qdevice_poll(handle, devicename, cast_vote, last_received_ring_id)) != CS_OK &&
+
+                       if (no_sent_old_ringid + 1 >= send_old_ringid) {
+                               /*
+                                * Finally send correct ringid
+                                */
+                               memcpy(&ring_id_to_send, &last_received_ring_id, sizeof(ring_id_to_send));
+                       } else {
+                               no_sent_old_ringid++;
+                       }
+
+                       if ((err=votequorum_qdevice_poll(handle, devicename, cast_vote, ring_id_to_send)) != CS_OK &&
                             err != CS_ERR_MESSAGE_ERROR) {
                                fprintf(stderr, "qdevice poll FAILED: %d\n", err);
                                ret = -1;