ctdbd: New control CTDB_CONTROL_GET_RUNSTATE
authorMartin Schwenke <martin@meltin.net>
Tue, 21 May 2013 06:18:28 +0000 (16:18 +1000)
committerAmitay Isaacs <amitay@gmail.com>
Fri, 24 May 2013 04:08:07 +0000 (14:08 +1000)
Also new client function ctdb_ctrl_get_runstate().

Signed-off-by: Martin Schwenke <martin@meltin.net>
client/ctdb_client.c
include/ctdb_client.h
include/ctdb_protocol.h
server/ctdb_control.c

index 2ae89582f5500efb7708c85e83886318b3d64de7..e930bffc399a8bf5a92e8cf26b63b4f2991cb113 100644 (file)
@@ -1654,6 +1654,36 @@ int ctdb_ctrl_ping(struct ctdb_context *ctdb, uint32_t destnode)
        return res;
 }
 
+int ctdb_ctrl_get_runstate(struct ctdb_context *ctdb, 
+                          struct timeval timeout, 
+                          uint32_t destnode,
+                          uint32_t *runstate)
+{
+       TDB_DATA outdata;
+       int32_t res;
+       int ret;
+
+       ret = ctdb_control(ctdb, destnode, 0, CTDB_CONTROL_GET_RUNSTATE, 0,
+                          tdb_null, ctdb, &outdata, &res, &timeout, NULL);
+       if (ret != 0 || res != 0) {
+               DEBUG(DEBUG_ERR,("ctdb_control for get_runstate failed\n"));
+               return ret != 0 ? ret : res;
+       }
+
+       if (outdata.dsize != sizeof(uint32_t)) {
+               DEBUG(DEBUG_ERR,("Invalid return data in get_runstate\n"));
+               talloc_free(outdata.dptr);
+               return -1;
+       }
+
+       if (runstate != NULL) {
+               *runstate = *(uint32_t *)outdata.dptr;
+       }
+       talloc_free(outdata.dptr);
+
+       return 0;
+}
+
 /*
   find the real path to a ltdb 
  */
index 564c5632514d657209fb1825d3d4d6ef9ef080fa..873992370130f74cbec4830094474bfd66b0cd3f 100644 (file)
@@ -295,6 +295,11 @@ int ctdb_ctrl_process_exists(struct ctdb_context *ctdb, uint32_t destnode, pid_t
 
 int ctdb_ctrl_ping(struct ctdb_context *ctdb, uint32_t destnode);
 
+int ctdb_ctrl_get_runstate(struct ctdb_context *ctdb, 
+                          struct timeval timeout, 
+                          uint32_t destnode,
+                          uint32_t *runstate);
+
 int ctdb_ctrl_get_config(struct ctdb_context *ctdb);
 
 int ctdb_ctrl_get_debuglevel(struct ctdb_context *ctdb, uint32_t destnode, int32_t *level);
index 09ce01a5e3a46bdf8e38f1b72d25e6ed91b999c7..10f643bb7ff9b1e10533cf24667ca4970e75bb54 100644 (file)
@@ -405,6 +405,7 @@ enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS          = 0,
                    CTDB_CONTROL_TRAVERSE_ALL_EXT        = 135,
                    CTDB_CONTROL_RECEIVE_RECORDS         = 136,
                    CTDB_CONTROL_IPREALLOCATED           = 137,
+                   CTDB_CONTROL_GET_RUNSTATE            = 138,
 };
 
 /*
index 5e0c27581f53d29aaa46a9519c24eaf48a88c752..bf4a20d90ae51cd1c93a193355eedff4dd7adb7d 100644 (file)
@@ -207,6 +207,13 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb,
                CHECK_CONTROL_DATA_SIZE(0);
                return ctdb->num_clients;
 
+       case CTDB_CONTROL_GET_RUNSTATE:
+               CHECK_CONTROL_DATA_SIZE(0);
+               outdata->dptr = (uint8_t *)&ctdb->runstate;
+               outdata->dsize = sizeof(uint32_t);
+               return 0;
+
+
        case CTDB_CONTROL_SET_DB_READONLY: {
                uint32_t db_id;
                struct ctdb_db_context *ctdb_db;