ReadOnly: add a readonly flag to the getdbmap control and show the readonly setting...
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Thu, 1 Sep 2011 00:28:15 +0000 (10:28 +1000)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Thu, 1 Sep 2011 00:28:15 +0000 (10:28 +1000)
include/ctdb_client.h
server/ctdb_recover.c
tools/ctdb.c

index 05e12c7f950f14dae75e757d0ba46a0dafec45df..a9e47be40ad9311b0b6eebb1980a3261fbbef3fa 100644 (file)
@@ -212,6 +212,7 @@ struct ctdb_dbid_map {
        struct ctdb_dbid {
                uint32_t dbid;
 #define CTDB_DB_FLAGS_PERSISTENT       0x01
+#define CTDB_DB_FLAGS_READONLY         0x02
                uint8_t flags;
        } dbs[1];
 };
index bfd9bae772013e949ac575e709158b7a3f6d5b76..e1a4776af18ae8d8d89a0c65418e35d61ce70966 100644 (file)
@@ -190,6 +190,9 @@ ctdb_control_getdbmap(struct ctdb_context *ctdb, uint32_t opcode, TDB_DATA indat
                if (ctdb_db->persistent != 0) {
                        dbid_map->dbs[i].flags |= CTDB_DB_FLAGS_PERSISTENT;
                }
+               if (ctdb_db->readonly != 0) {
+                       dbid_map->dbs[i].flags |= CTDB_DB_FLAGS_READONLY;
+               }
        }
 
        return 0;
index d853699d8ae5c0ebd510dcf5dd0ac9aed826fc7f..1770fe4e8055c38ed810326a4a8deab9c22e0091 100644 (file)
@@ -3554,12 +3554,13 @@ static int control_getdbmap(struct ctdb_context *ctdb, int argc, const char **ar
        }
 
        if(options.machinereadable){
-               printf(":ID:Name:Path:Persistent:Unhealthy:\n");
+               printf(":ID:Name:Path:Persistent:Unhealthy:ReadOnly:\n");
                for(i=0;i<dbmap->num;i++){
                        const char *path;
                        const char *name;
                        const char *health;
                        bool persistent;
+                       bool readonly;
 
                        ctdb_ctrl_getdbpath(ctdb, TIMELIMIT(), options.pnn,
                                            dbmap->dbs[i].dbid, ctdb, &path);
@@ -3568,9 +3569,10 @@ static int control_getdbmap(struct ctdb_context *ctdb, int argc, const char **ar
                        ctdb_ctrl_getdbhealth(ctdb, TIMELIMIT(), options.pnn,
                                              dbmap->dbs[i].dbid, ctdb, &health);
                        persistent = dbmap->dbs[i].flags & CTDB_DB_FLAGS_PERSISTENT;
-                       printf(":0x%08X:%s:%s:%d:%d:\n",
+                       readonly   = dbmap->dbs[i].flags & CTDB_DB_FLAGS_READONLY;
+                       printf(":0x%08X:%s:%s:%d:%d:%d:\n",
                               dbmap->dbs[i].dbid, name, path,
-                              !!(persistent), !!(health));
+                              !!(persistent), !!(health), !!(readonly));
                }
                return 0;
        }
@@ -3581,14 +3583,17 @@ static int control_getdbmap(struct ctdb_context *ctdb, int argc, const char **ar
                const char *name;
                const char *health;
                bool persistent;
+               bool readonly;
 
                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].flags & CTDB_DB_FLAGS_PERSISTENT;
-               printf("dbid:0x%08x name:%s path:%s%s%s\n",
+               readonly   = dbmap->dbs[i].flags & CTDB_DB_FLAGS_READONLY;
+               printf("dbid:0x%08x name:%s path:%s%s%s%s\n",
                       dbmap->dbs[i].dbid, name, path,
                       persistent?" PERSISTENT":"",
+                      readonly?" READONLY":"",
                       health?" UNHEALTHY":"");
        }
 
@@ -3621,6 +3626,7 @@ static int control_getdbstatus(struct ctdb_context *ctdb, int argc, const char *
                const char *name;
                const char *health;
                bool persistent;
+               bool readonly;
 
                ctdb_ctrl_getdbname(ctdb, TIMELIMIT(), options.pnn, dbmap->dbs[i].dbid, ctdb, &name);
                if (strcmp(name, db_name) != 0) {
@@ -3630,9 +3636,11 @@ 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].flags & CTDB_DB_FLAGS_PERSISTENT;
-               printf("dbid: 0x%08x\nname: %s\npath: %s\nPERSISTENT: %s\nHEALTH: %s\n",
+               readonly   = dbmap->dbs[i].flags & CTDB_DB_FLAGS_READONLY;
+               printf("dbid: 0x%08x\nname: %s\npath: %s\nPERSISTENT: %s\nREADONLY: %s\nHEALTH: %s\n",
                       dbmap->dbs[i].dbid, name, path,
                       persistent?"yes":"no",
+                      readonly?"yes":"no",
                       health?health:"OK");
                return 0;
        }