ctdb-recoverd: Only check for LMASTER nodes in the VNN map
authorMartin Schwenke <martin@meltin.net>
Wed, 21 Aug 2019 04:35:09 +0000 (14:35 +1000)
committerMartin Schwenke <martins@samba.org>
Wed, 21 Aug 2019 11:50:30 +0000 (11:50 +0000)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14085

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/server/ctdb_recoverd.c

index 2633c755752be57e3a368858b5e3babbd6aedb72..c1c2a88b12c7f5c82b92d7833683ba0895ef31ee 100644 (file)
@@ -2989,13 +2989,19 @@ static void main_loop(struct ctdb_context *ctdb, struct ctdb_recoverd *rec,
                return;
        }
 
-       /* verify that all active nodes in the nodemap also exist in 
-          the vnnmap.
+       /*
+        * Verify that all active lmaster nodes in the nodemap also
+        * exist in the vnnmap
         */
        for (j=0; j<nodemap->num; j++) {
                if (nodemap->nodes[j].flags & NODE_FLAGS_INACTIVE) {
                        continue;
                }
+               if (! ctdb_node_has_capabilities(rec->caps,
+                                                ctdb->nodes[j]->pnn,
+                                                CTDB_CAP_LMASTER)) {
+                       continue;
+               }
                if (nodemap->nodes[j].pnn == pnn) {
                        continue;
                }
@@ -3006,8 +3012,8 @@ static void main_loop(struct ctdb_context *ctdb, struct ctdb_recoverd *rec,
                        }
                }
                if (i == vnnmap->size) {
-                       DEBUG(DEBUG_ERR, (__location__ " Node %u is active in the nodemap but did not exist in the vnnmap\n", 
-                                 nodemap->nodes[j].pnn));
+                       D_ERR("Active LMASTER node %u is not in the vnnmap\n",
+                             nodemap->nodes[j].pnn);
                        ctdb_set_culprit(rec, nodemap->nodes[j].pnn);
                        do_recovery(rec, mem_ctx, pnn, nodemap, vnnmap);
                        return;