ctdb-daemon: Add accessors for CTDB_DB_FLAGS_READONLY flag
authorAmitay Isaacs <amitay@gmail.com>
Thu, 2 Mar 2017 04:44:48 +0000 (15:44 +1100)
committerMartin Schwenke <martins@samba.org>
Thu, 29 Jun 2017 08:34:26 +0000 (10:34 +0200)
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
ctdb/common/common.h
ctdb/common/ctdb_ltdb.c
ctdb/server/ctdb_call.c
ctdb/server/ctdb_daemon.c
ctdb/server/ctdb_ltdb_server.c
ctdb/server/ctdb_recover.c

index 5c823a14e6f6108d264aaa3c6e4783b4e6efc2c4..0085fcfa989df175fa8af5600bae14dd977866f3 100644 (file)
@@ -47,6 +47,10 @@ struct ctdb_db_context *ctdb_db_handle(struct ctdb_context *ctdb,
 bool ctdb_db_persistent(struct ctdb_db_context *ctdb_db);
 bool ctdb_db_volatile(struct ctdb_db_context *ctdb_db);
 
+bool ctdb_db_readonly(struct ctdb_db_context *ctdb_db);
+void ctdb_db_set_readonly(struct ctdb_db_context *ctdb_db);
+void ctdb_db_reset_readonly(struct ctdb_db_context *ctdb_db);
+
 uint32_t ctdb_lmaster(struct ctdb_context *ctdb, const TDB_DATA *key);
 
 int ctdb_ltdb_fetch(struct ctdb_db_context *ctdb_db,
index 37ffda8f070296dd2d00b5bd1cd84dee0c18c363..818ac76d3876b433e630106adb2a9f42930c6511 100644 (file)
@@ -88,6 +88,21 @@ bool ctdb_db_volatile(struct ctdb_db_context *ctdb_db)
        return !ctdb_db->persistent;
 }
 
+bool ctdb_db_readonly(struct ctdb_db_context *ctdb_db)
+{
+       return ctdb_db->readonly;
+}
+
+void ctdb_db_set_readonly(struct ctdb_db_context *ctdb_db)
+{
+       ctdb_db->readonly = true;
+}
+
+void ctdb_db_reset_readonly(struct ctdb_db_context *ctdb_db)
+{
+       ctdb_db->readonly = false;
+}
+
 /*
   return the lmaster given a key
 */
index 320a13aceaccfc56ec0b793720a1e9b44b8ab06b..86498cf3a9623265aa582f37f9704480beb5218b 100644 (file)
@@ -961,7 +961,7 @@ void ctdb_request_call(struct ctdb_context *ctdb, struct ctdb_req_header *hdr)
        }
 
        /* Dont do READONLY if we don't have a tracking database */
-       if ((c->flags & CTDB_WANT_READONLY) && !ctdb_db->readonly) {
+       if ((c->flags & CTDB_WANT_READONLY) && !ctdb_db_readonly(ctdb_db)) {
                c->flags &= ~CTDB_WANT_READONLY;
        }
 
index 91a86c32dc9b5f8baa9401cebf4a2c7fb933d228..591729baea3c125a9213359dcd590146be369adf 100644 (file)
@@ -681,7 +681,7 @@ static void daemon_request_call_from_client(struct ctdb_client *client,
        }
 
        /* Dont do READONLY if we don't have a tracking database */
-       if ((c->flags & CTDB_WANT_READONLY) && !ctdb_db->readonly) {
+       if ((c->flags & CTDB_WANT_READONLY) && !ctdb_db_readonly(ctdb_db)) {
                c->flags &= ~CTDB_WANT_READONLY;
        }
 
index 5c994c90694c0ae6a828e1ab09293e68dcfd6b88..1282929366c3274e30d25cb9faf7611fab6d31c7 100644 (file)
@@ -718,7 +718,7 @@ int ctdb_set_db_readonly(struct ctdb_context *ctdb, struct ctdb_db_context *ctdb
 {
        char *ropath;
 
-       if (ctdb_db->readonly) {
+       if (ctdb_db_readonly(ctdb_db)) {
                return 0;
        }
 
@@ -745,7 +745,7 @@ int ctdb_set_db_readonly(struct ctdb_context *ctdb, struct ctdb_db_context *ctdb
 
        DEBUG(DEBUG_NOTICE,("OPENED tracking database : '%s'\n", ropath));
 
-       ctdb_db->readonly = true;
+       ctdb_db_set_readonly(ctdb_db);
 
        DEBUG(DEBUG_NOTICE, ("Readonly property set on DB %s\n", ctdb_db->db_name));
 
@@ -1292,7 +1292,7 @@ int32_t ctdb_control_db_detach(struct ctdb_context *ctdb, TDB_DATA indata,
        }
 
        /* Free readonly tracking database */
-       if (ctdb_db->readonly) {
+       if (ctdb_db_readonly(ctdb_db)) {
                talloc_free(ctdb_db->rottdb);
        }
 
index b9fdaa7ed74b0a4cdf92ef248e452b3c6c999d14..9097f7a3ffa8d4b994940609add9e736391ba6ed 100644 (file)
@@ -118,7 +118,7 @@ ctdb_control_getdbmap(struct ctdb_context *ctdb, uint32_t opcode, TDB_DATA indat
                if (ctdb_db_persistent(ctdb_db)) {
                        dbid_map->dbs[i].flags |= CTDB_DB_FLAGS_PERSISTENT;
                }
-               if (ctdb_db->readonly != 0) {
+               if (ctdb_db_readonly(ctdb_db)) {
                        dbid_map->dbs[i].flags |= CTDB_DB_FLAGS_READONLY;
                }
                if (ctdb_db->sticky != 0) {
@@ -513,15 +513,14 @@ int32_t ctdb_control_push_db(struct ctdb_context *ctdb, TDB_DATA indata)
        DEBUG(DEBUG_DEBUG,("finished push of %u records for dbid 0x%x\n",
                 reply->count, reply->db_id));
 
-       if (ctdb_db->readonly) {
+       if (ctdb_db_readonly(ctdb_db)) {
                DEBUG(DEBUG_CRIT,("Clearing the tracking database for dbid 0x%x\n",
                                  ctdb_db->db_id));
                if (tdb_wipe_all(ctdb_db->rottdb) != 0) {
                        DEBUG(DEBUG_ERR,("Failed to wipe tracking database for 0x%x. Dropping read-only delegation support\n", ctdb_db->db_id));
-                       ctdb_db->readonly = false;
                        tdb_close(ctdb_db->rottdb);
                        ctdb_db->rottdb = NULL;
-                       ctdb_db->readonly = false;
+                       ctdb_db_reset_readonly(ctdb_db);
                }
                while (ctdb_db->revokechild_active != NULL) {
                        talloc_free(ctdb_db->revokechild_active);
@@ -702,7 +701,7 @@ int32_t ctdb_control_db_push_confirm(struct ctdb_context *ctdb,
                return -1;
        }
 
-       if (ctdb_db->readonly) {
+       if (ctdb_db_readonly(ctdb_db)) {
                DEBUG(DEBUG_ERR,
                      ("Clearing the tracking database for dbid 0x%x\n",
                       ctdb_db->db_id));
@@ -711,10 +710,9 @@ int32_t ctdb_control_db_push_confirm(struct ctdb_context *ctdb,
                              ("Failed to wipe tracking database for 0x%x."
                               " Dropping read-only delegation support\n",
                               ctdb_db->db_id));
-                       ctdb_db->readonly = false;
                        tdb_close(ctdb_db->rottdb);
                        ctdb_db->rottdb = NULL;
-                       ctdb_db->readonly = false;
+                       ctdb_db_reset_readonly(ctdb_db);
                }
 
                while (ctdb_db->revokechild_active != NULL) {