ctdb-recoverd: Add message handler to assigning banning credits
authorAmitay Isaacs <amitay@gmail.com>
Thu, 17 Mar 2016 06:26:30 +0000 (17:26 +1100)
committerMartin Schwenke <martins@samba.org>
Fri, 25 Mar 2016 02:26:16 +0000 (03:26 +0100)
This will be called from recovery helper to assign banning credits to
misbehaving node.

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

index 680ce7774b673d4226cde7acb55982ae83c5ccf0..5d48fc3c4af51fbf370a2e27edfa64a63844649f 100644 (file)
@@ -2628,6 +2628,30 @@ static void process_ipreallocate_requests(struct ctdb_context *ctdb,
        srvid_requests_reply(ctdb, &current, result);
 }
 
+/*
+ * handler for assigning banning credits
+ */
+static void banning_handler(uint64_t srvid, TDB_DATA data, void *private_data)
+{
+       struct ctdb_recoverd *rec = talloc_get_type(
+               private_data, struct ctdb_recoverd);
+       uint32_t ban_pnn;
+
+       /* Ignore if we are not recmaster */
+       if (rec->ctdb->pnn != rec->recmaster) {
+               return;
+       }
+
+       if (data.dsize != sizeof(uint32_t)) {
+               DEBUG(DEBUG_ERR, (__location__ "invalid data size %zu\n",
+                                 data.dsize));
+               return;
+       }
+
+       ban_pnn = *(uint32_t *)data.dptr;
+
+       ctdb_set_culprit_count(rec, ban_pnn, rec->nodemap->num);
+}
 
 /*
   handler for recovery master elections
@@ -3856,6 +3880,10 @@ static void monitor_cluster(struct ctdb_context *ctdb)
        /* register a message port for sending memory dumps */
        ctdb_client_set_message_handler(ctdb, CTDB_SRVID_MEM_DUMP, mem_dump_handler, rec);
 
+       /* when a node is assigned banning credits */
+       ctdb_client_set_message_handler(ctdb, CTDB_SRVID_BANNING,
+                                       banning_handler, rec);
+
        /* register a message port for recovery elections */
        ctdb_client_set_message_handler(ctdb, CTDB_SRVID_ELECTION, election_handler, rec);