From 33c305e37fae6f804a33df6de581e9c4e0838d1e Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Thu, 1 Sep 2011 10:21:55 +1000 Subject: [PATCH] ReadOnly: Change the ctdb_db structure to keep a uint8_t for flags instead of a boolean for 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 | 3 ++- server/ctdb_recover.c | 4 +++- server/ctdb_recoverd.c | 9 +++++---- tools/ctdb.c | 12 ++++++------ tools/ctdb_vacuum.c | 4 ++-- 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/include/ctdb_client.h b/include/ctdb_client.h index 720f0733..05e12c7f 100644 --- a/include/ctdb_client.h +++ b/include/ctdb_client.h @@ -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, diff --git a/server/ctdb_recover.c b/server/ctdb_recover.c index f865dbad..bfd9bae7 100644 --- a/server/ctdb_recover.c +++ b/server/ctdb_recover.c @@ -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; diff --git a/server/ctdb_recoverd.c b/server/ctdb_recoverd.c index 4963c3f7..ce2aad88 100644 --- a/server/ctdb_recoverd.c +++ b/server/ctdb_recoverd.c @@ -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;inum;i++) { if (dbmap->dbs[i].dbid == recs->db_id) { - persistent = dbmap->dbs[i].persistent; + persistent = dbmap->dbs[i].flags & CTDB_DB_FLAGS_PERSISTENT; break; } } @@ -1513,7 +1514,7 @@ static int do_recovery(struct ctdb_recoverd *rec, for (i=0;inum;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)); diff --git a/tools/ctdb.c b/tools/ctdb.c index 33635c9c..935bb195 100644 --- a/tools/ctdb.c +++ b/tools/ctdb.c @@ -3579,7 +3579,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)); @@ -3597,7 +3597,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":"", @@ -3641,7 +3641,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", @@ -4225,7 +4225,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); @@ -4277,7 +4277,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")); @@ -4624,7 +4624,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])); diff --git a/tools/ctdb_vacuum.c b/tools/ctdb_vacuum.c index bd75a69e..cbe3c5c8 100644 --- a/tools/ctdb_vacuum.c +++ b/tools/ctdb_vacuum.c @@ -467,7 +467,7 @@ int ctdb_vacuum(struct ctdb_context *ctdb, int argc, const char **argv) for (i=0;inum;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;inum;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; } -- 2.34.1