ctdb-daemon: Send STARTUP control after startup event
authorAmitay Isaacs <amitay@gmail.com>
Mon, 20 Nov 2017 04:27:52 +0000 (15:27 +1100)
committerMartin Schwenke <martins@samba.org>
Thu, 30 Nov 2017 14:29:48 +0000 (15:29 +0100)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13154

STARTUP control is primarily used to synchronise tcp tickles from running
nodes to a node which has just started up.  Earlier STARTUP control was
sent (using BROADCAST_ALL) after setup event.  Once the other nodes in
the cluster connected to this node, the queued up messages would be sent
and the tcp tickles would get synchronised.

Recent fix to drop messages to disconnected or not-yet-connected nodes,
the STARTUP control was never sent to the remote nodes and the tcp
tickles did not get synchronised.

To fix this problem send the STARTUP control (using BROADCAST_CONNECTED)
after startup event.  By this time all the running nodes in the cluster
are connected.

Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
Autobuild-User(master): Martin Schwenke <martins@samba.org>
Autobuild-Date(master): Thu Nov 30 15:29:48 CET 2017 on sn-devel-144

ctdb/server/ctdb_daemon.c
ctdb/server/ctdb_monitor.c

index aa2c92ed221062a279f822abdc8470a5c0e88043..459dd2932ee27bcc628c57ea91aa37a1f6319c8c 100644 (file)
@@ -1088,12 +1088,6 @@ static void ctdb_setup_event_callback(struct ctdb_context *ctdb, int status,
        }
        ctdb_run_notification_script(ctdb, "setup");
 
-       /* tell all other nodes we've just started up */
-       ctdb_daemon_send_control(ctdb, CTDB_BROADCAST_ALL,
-                                0, CTDB_CONTROL_STARTUP, 0,
-                                CTDB_CTRL_FLAG_NOREPLY,
-                                tdb_null, NULL, NULL);
-
        /* Start the recovery daemon */
        if (ctdb_start_recoverd(ctdb) != 0) {
                DEBUG(DEBUG_ALERT,("Failed to start recovery daemon\n"));
index 2ecbbb393c02d8dcbb776180953eef24760b083c..0a77665ec256f881fe2e217c653fdec3ce10a2e7 100644 (file)
@@ -240,6 +240,12 @@ static void ctdb_startup_callback(struct ctdb_context *ctdb, int status, void *p
        ctdb->monitor->next_interval = 2;
        ctdb_run_notification_script(ctdb, "startup");
 
+       /* tell all other nodes we've just started up */
+       ctdb_daemon_send_control(ctdb, CTDB_BROADCAST_CONNECTED,
+                                0, CTDB_CONTROL_STARTUP, 0,
+                                CTDB_CTRL_FLAG_NOREPLY,
+                                tdb_null, NULL, NULL);
+
        tevent_add_timer(ctdb->ev, ctdb->monitor->monitor_context,
                         timeval_current_ofs(ctdb->monitor->next_interval, 0),
                         ctdb_check_health, ctdb);