ReadOnly: Change the ctdb_db structure to keep a uint8_t for flags instead of a boole...
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Thu, 1 Sep 2011 00:21:55 +0000 (10:21 +1000)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Thu, 1 Sep 2011 00:21:55 +0000 (10:21 +1000)
the persistent flag.
This is the same size as the original boolean but allows ut to add additional flags for the database

include/ctdb_client.h
server/ctdb_recover.c
server/ctdb_recoverd.c
tools/ctdb.c
tools/ctdb_vacuum.c

index 720f0733611ac77a24bb324be99fcc7b66fe7c6c..05e12c7f950f14dae75e757d0ba46a0dafec45df 100644 (file)
@@ -211,7 +211,8 @@ struct ctdb_dbid_map {
        uint32_t num;
        struct ctdb_dbid {
                uint32_t dbid;
-               bool persistent;
+#define CTDB_DB_FLAGS_PERSISTENT       0x01
+               uint8_t flags;
        } dbs[1];
 };
 int ctdb_ctrl_getdbmap(struct ctdb_context *ctdb,
index f865dbadfbecd11f29160325da452fcca3376b76..bfd9bae772013e949ac575e709158b7a3f6d5b76 100644 (file)
@@ -187,7 +187,9 @@ ctdb_control_getdbmap(struct ctdb_context *ctdb, uint32_t opcode, TDB_DATA indat
        dbid_map->num = len;
        for (i=0,ctdb_db=ctdb->db_list;ctdb_db;i++,ctdb_db=ctdb_db->next){
                dbid_map->dbs[i].dbid       = ctdb_db->db_id;
-               dbid_map->dbs[i].persistent = ctdb_db->persistent;
+               if (ctdb_db->persistent != 0) {
+                       dbid_map->dbs[i].flags |= CTDB_DB_FLAGS_PERSISTENT;
+               }
        }
 
        return 0;
index 2db9109532d60a06c76da735de740125bf9a1ec9..44a9e4bfad08f921d39835173cf26978c2431e21 100644 (file)
@@ -439,7 +439,8 @@ static int create_missing_remote_databases(struct ctdb_context *ctdb, struct ctd
                                return -1;
                        }
                        ctdb_ctrl_createdb(ctdb, CONTROL_TIMEOUT(), nodemap->nodes[j].pnn, 
-                                          mem_ctx, name, dbmap->dbs[db].persistent);
+                                          mem_ctx, name,
+                                          dbmap->dbs[db].flags & CTDB_DB_FLAGS_PERSISTENT);
                        if (ret != 0) {
                                DEBUG(DEBUG_ERR, (__location__ " Unable to create remote db:%s\n", name));
                                return -1;
@@ -502,7 +503,7 @@ static int create_missing_local_databases(struct ctdb_context *ctdb, struct ctdb
                                return -1;
                        }
                        ctdb_ctrl_createdb(ctdb, CONTROL_TIMEOUT(), pnn, mem_ctx, name, 
-                                          remote_dbmap->dbs[db].persistent);
+                                          remote_dbmap->dbs[db].flags & CTDB_DB_FLAGS_PERSISTENT);
                        if (ret != 0) {
                                DEBUG(DEBUG_ERR, (__location__ " Unable to create local db:%s\n", name));
                                return -1;
@@ -823,7 +824,7 @@ static void vacuum_fetch_handler(struct ctdb_context *ctdb, uint64_t srvid,
 
        for (i=0;i<dbmap->num;i++) {
                if (dbmap->dbs[i].dbid == recs->db_id) {
-                       persistent = dbmap->dbs[i].persistent;
+                       persistent = dbmap->dbs[i].flags & CTDB_DB_FLAGS_PERSISTENT;
                        break;
                }
        }
@@ -1515,7 +1516,7 @@ static int do_recovery(struct ctdb_recoverd *rec,
        for (i=0;i<dbmap->num;i++) {
                ret = recover_database(rec, mem_ctx,
                                       dbmap->dbs[i].dbid,
-                                      dbmap->dbs[i].persistent,
+                                      dbmap->dbs[i].flags & CTDB_DB_FLAGS_PERSISTENT,
                                       pnn, nodemap, generation);
                if (ret != 0) {
                        DEBUG(DEBUG_ERR, (__location__ " Failed to recover database 0x%x\n", dbmap->dbs[i].dbid));
index 4f915d9721799ec826f59f2420565edb689483d6..d853699d8ae5c0ebd510dcf5dd0ac9aed826fc7f 100644 (file)
@@ -123,7 +123,7 @@ static int db_exists(struct ctdb_context *ctdb, const char *db_name, bool *persi
                ctdb_ctrl_getdbname(ctdb, TIMELIMIT(), options.pnn, dbmap->dbs[i].dbid, ctdb, &name);
                if (!strcmp(name, db_name)) {
                        if (persistent) {
-                               *persistent = dbmap->dbs[i].persistent;
+                               *persistent = dbmap->dbs[i].flags & CTDB_DB_FLAGS_PERSISTENT;
                        }
                        return 0;
                }
@@ -3567,7 +3567,7 @@ static int control_getdbmap(struct ctdb_context *ctdb, int argc, const char **ar
                                            dbmap->dbs[i].dbid, ctdb, &name);
                        ctdb_ctrl_getdbhealth(ctdb, TIMELIMIT(), options.pnn,
                                              dbmap->dbs[i].dbid, ctdb, &health);
-                       persistent = dbmap->dbs[i].persistent;
+                       persistent = dbmap->dbs[i].flags & CTDB_DB_FLAGS_PERSISTENT;
                        printf(":0x%08X:%s:%s:%d:%d:\n",
                               dbmap->dbs[i].dbid, name, path,
                               !!(persistent), !!(health));
@@ -3585,7 +3585,7 @@ static int control_getdbmap(struct ctdb_context *ctdb, int argc, const char **ar
                ctdb_ctrl_getdbpath(ctdb, TIMELIMIT(), options.pnn, dbmap->dbs[i].dbid, ctdb, &path);
                ctdb_ctrl_getdbname(ctdb, TIMELIMIT(), options.pnn, dbmap->dbs[i].dbid, ctdb, &name);
                ctdb_ctrl_getdbhealth(ctdb, TIMELIMIT(), options.pnn, dbmap->dbs[i].dbid, ctdb, &health);
-               persistent = dbmap->dbs[i].persistent;
+               persistent = dbmap->dbs[i].flags & CTDB_DB_FLAGS_PERSISTENT;
                printf("dbid:0x%08x name:%s path:%s%s%s\n",
                       dbmap->dbs[i].dbid, name, path,
                       persistent?" PERSISTENT":"",
@@ -3629,7 +3629,7 @@ static int control_getdbstatus(struct ctdb_context *ctdb, int argc, const char *
 
                ctdb_ctrl_getdbpath(ctdb, TIMELIMIT(), options.pnn, dbmap->dbs[i].dbid, ctdb, &path);
                ctdb_ctrl_getdbhealth(ctdb, TIMELIMIT(), options.pnn, dbmap->dbs[i].dbid, ctdb, &health);
-               persistent = dbmap->dbs[i].persistent;
+               persistent = dbmap->dbs[i].flags & CTDB_DB_FLAGS_PERSISTENT;
                printf("dbid: 0x%08x\nname: %s\npath: %s\nPERSISTENT: %s\nHEALTH: %s\n",
                       dbmap->dbs[i].dbid, name, path,
                       persistent?"yes":"no",
@@ -4223,7 +4223,7 @@ static int control_backupdb(struct ctdb_context *ctdb, int argc, const char **ar
                                     allow_unhealthy));
        }
 
-       ctdb_db = ctdb_attach(ctdb, argv[0], dbmap->dbs[i].persistent, 0);
+       ctdb_db = ctdb_attach(ctdb, argv[0], dbmap->dbs[i].flags & CTDB_DB_FLAGS_PERSISTENT, 0);
        if (ctdb_db == NULL) {
                DEBUG(DEBUG_ERR,("Unable to attach to database '%s'\n", argv[0]));
                talloc_free(tmp_ctx);
@@ -4275,7 +4275,7 @@ static int control_backupdb(struct ctdb_context *ctdb, int argc, const char **ar
 
        dbhdr.version = DB_VERSION;
        dbhdr.timestamp = time(NULL);
-       dbhdr.persistent = dbmap->dbs[i].persistent;
+       dbhdr.persistent = dbmap->dbs[i].flags & CTDB_DB_FLAGS_PERSISTENT;
        dbhdr.size = bd->len;
        if (strlen(argv[0]) >= MAX_DB_NAME) {
                DEBUG(DEBUG_ERR,("Too long dbname\n"));
@@ -4622,7 +4622,7 @@ static int control_wipedb(struct ctdb_context *ctdb, int argc,
                return -1;
        }
 
-       ctdb_db = ctdb_attach(ctdb, argv[0], dbmap->dbs[i].persistent, 0);
+       ctdb_db = ctdb_attach(ctdb, argv[0], dbmap->dbs[i].flags & CTDB_DB_FLAGS_PERSISTENT, 0);
        if (ctdb_db == NULL) {
                DEBUG(DEBUG_ERR, ("Unable to attach to database '%s'\n",
                                  argv[0]));
index bd75a69e2564763b69e3f5ffbb467d8570e7df50..cbe3c5c8bbcb5f6b52e91a034b39774fbf0370f4 100644 (file)
@@ -467,7 +467,7 @@ int ctdb_vacuum(struct ctdb_context *ctdb, int argc, const char **argv)
 
        for (i=0;i<dbmap->num;i++) {
                if (ctdb_vacuum_db(ctdb, dbmap->dbs[i].dbid, nodemap, 
-                                  dbmap->dbs[i].persistent, vacuum_limit) != 0) {
+                                  dbmap->dbs[i].flags & CTDB_DB_FLAGS_PERSISTENT, vacuum_limit) != 0) {
                        DEBUG(DEBUG_ERR,("Failed to vacuum db 0x%x\n", dbmap->dbs[i].dbid));
                        return -1;
                }
@@ -630,7 +630,7 @@ int ctdb_repack(struct ctdb_context *ctdb, int argc, const char **argv)
 
        for (i=0;i<dbmap->num;i++) {
                if (ctdb_repack_db(ctdb, dbmap->dbs[i].dbid, 
-                                  dbmap->dbs[i].persistent, repack_limit) != 0) {
+                                  dbmap->dbs[i].flags & CTDB_DB_FLAGS_PERSISTENT, repack_limit) != 0) {
                        DEBUG(DEBUG_ERR,("Failed to repack db 0x%x\n", dbmap->dbs[i].dbid));
                        return -1;
                }