ctdb-recoverd: Improve election win messages
[obnox/samba/samba-obnox.git] / ctdb / server / ctdb_recover.c
index 94732a8c5d5a6e742a1608899c24fe1943ea93ed..3be4840b462e9b75ac90d33a57cc5dee046a4977 100644 (file)
@@ -744,19 +744,19 @@ int32_t ctdb_control_db_push_confirm(struct ctdb_context *ctdb,
        outdata->dsize = sizeof(uint32_t);
 
        talloc_free(state);
+       ctdb_db->push_started = false;
        ctdb_db->push_state = NULL;
 
        return 0;
 }
 
 struct set_recmode_state {
+       struct ctdb_context *ctdb;
        struct ctdb_req_control_old *c;
 };
 
-static void set_recmode_handler(struct ctdb_context *ctdb,
-                               char status,
+static void set_recmode_handler(char status,
                                double latency,
-                               struct ctdb_cluster_mutex_handle *h,
                                void *private_data)
 {
        struct set_recmode_state *state = talloc_get_type_abort(
@@ -769,7 +769,7 @@ static void set_recmode_handler(struct ctdb_context *ctdb,
                /* Mutex taken */
                DEBUG(DEBUG_ERR,
                      ("ERROR: Daemon able to take recovery lock on \"%s\" during recovery\n",
-                      ctdb->recovery_lock));
+                      state->ctdb->recovery_lock));
                s = -1;
                err = "Took recovery lock from daemon during recovery - probably a cluster filesystem lock coherence problem";
                break;
@@ -777,12 +777,12 @@ static void set_recmode_handler(struct ctdb_context *ctdb,
        case '1':
                /* Contention */
                DEBUG(DEBUG_DEBUG, (__location__ " Recovery lock check OK\n"));
-               ctdb->recovery_mode = CTDB_RECOVERY_NORMAL;
-               ctdb_process_deferred_attach(ctdb);
+               state->ctdb->recovery_mode = CTDB_RECOVERY_NORMAL;
+               ctdb_process_deferred_attach(state->ctdb);
 
                s = 0;
 
-               CTDB_UPDATE_RECLOCK_LATENCY(ctdb, "daemon reclock",
+               CTDB_UPDATE_RECLOCK_LATENCY(state->ctdb, "daemon reclock",
                                            reclock.ctdbd, latency);
                break;
 
@@ -795,8 +795,8 @@ static void set_recmode_handler(struct ctdb_context *ctdb,
                DEBUG(DEBUG_WARNING,
                      (__location__
                       "Time out getting recovery lock, allowing recmode set anyway\n"));
-               ctdb->recovery_mode = CTDB_RECOVERY_NORMAL;
-               ctdb_process_deferred_attach(ctdb);
+               state->ctdb->recovery_mode = CTDB_RECOVERY_NORMAL;
+               ctdb_process_deferred_attach(state->ctdb);
 
                s = 0;
                break;
@@ -808,7 +808,7 @@ static void set_recmode_handler(struct ctdb_context *ctdb,
                err = "Unexpected error when testing recovery lock";
        }
 
-       ctdb_request_control_reply(ctdb, state->c, NULL, s, err);
+       ctdb_request_control_reply(state->ctdb, state->c, NULL, s, err);
        talloc_free(state);
 }
 
@@ -914,20 +914,17 @@ int32_t ctdb_control_set_recmode(struct ctdb_context *ctdb,
                DEBUG(DEBUG_ERR, (__location__ " out of memory\n"));
                return -1;
        }
+       state->ctdb = ctdb;
        state->c = NULL;
 
-       h = ctdb_cluster_mutex(state, ctdb, ctdb->recovery_lock, 5);
+       h = ctdb_cluster_mutex(state, ctdb, ctdb->recovery_lock, 5,
+                              set_recmode_handler, state, NULL, NULL);
        if (h == NULL) {
                talloc_free(state);
                return -1;
        }
 
        state->c = talloc_steal(state, c);
-
-       /* set_recmode_handler() frees state/h */
-       ctdb_cluster_mutex_set_handler(h,
-                                      set_recmode_handler,
-                                      state);
        *async_reply = true;
 
        return 0;
@@ -1609,12 +1606,14 @@ int32_t ctdb_control_set_recmaster(struct ctdb_context *ctdb, uint32_t opcode, T
 
        if (ctdb->pnn != new_recmaster && ctdb->recovery_master == ctdb->pnn) {
                DEBUG(DEBUG_NOTICE,
-                     ("This node (%u) is no longer the recovery master\n", ctdb->pnn));
+                     ("Remote node (%u) is now the recovery master\n",
+                      new_recmaster));
        }
 
        if (ctdb->pnn == new_recmaster && ctdb->recovery_master != new_recmaster) {
                DEBUG(DEBUG_NOTICE,
-                     ("This node (%u) is now the recovery master\n", ctdb->pnn));
+                     ("This node (%u) is now the recovery master\n",
+                      ctdb->pnn));
        }
 
        ctdb->recovery_master = new_recmaster;