banning: Do not come out of ban if databases are not frozen
authorAmitay Isaacs <amitay@gmail.com>
Mon, 1 Jul 2013 07:40:36 +0000 (17:40 +1000)
committerMichael Adam <obnox@samba.org>
Mon, 26 Aug 2013 11:35:53 +0000 (13:35 +0200)
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
(cherry picked from commit a60f228f8380f222f838eb619d2ab55f96f11ac2)

server/ctdb_banning.c

index 7931c2a3ade2729f0de46090fa5286165c857efc..09840509b2819aff9a141c72eb060bfdeeb130ba 100644 (file)
@@ -32,6 +32,21 @@ ctdb_ban_node_event(struct event_context *ev, struct timed_event *te,
                               struct timeval t, void *private_data)
 {
        struct ctdb_context *ctdb = talloc_get_type(private_data, struct ctdb_context);
+       bool freeze_failed = false;
+       int i;
+
+       /* Make sure we were able to freeze databases during banning */
+       for (i=1; i<=NUM_DB_PRIORITIES; i++) {
+               if (ctdb->freeze_mode[i] != CTDB_FREEZE_FROZEN) {
+                       freeze_failed = true;
+                       break;
+               }
+       }
+       if (freeze_failed) {
+               DEBUG(DEBUG_ERR, ("Banning timedout, but still unable to freeze databases\n"));
+               ctdb_ban_self(ctdb);
+               return;
+       }
 
        DEBUG(DEBUG_ERR,("Banning timedout\n"));
        ctdb->nodes[ctdb->pnn]->flags &= ~NODE_FLAGS_BANNED;