client: Add ctdb_ctrl_getdbseqnum() function
authorAmitay Isaacs <amitay@gmail.com>
Fri, 23 Aug 2013 06:52:24 +0000 (16:52 +1000)
committerAmitay Isaacs <amitay@gmail.com>
Fri, 4 Oct 2013 05:15:34 +0000 (15:15 +1000)
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
client/ctdb_client.c
include/ctdb_client.h

index 9addc63151b2756e2c51478f115b8f3a3c9650bc..43670519c1a974a263165479368c58da11cf176f 100644 (file)
@@ -1858,6 +1858,40 @@ int ctdb_ctrl_getdbhealth(struct ctdb_context *ctdb,
        return 0;
 }
 
+/*
+ * get db sequence number
+ */
+int ctdb_ctrl_getdbseqnum(struct ctdb_context *ctdb, struct timeval timeout,
+                         uint32_t destnode, uint32_t dbid, uint64_t *seqnum)
+{
+       int ret;
+       int32_t res;
+       TDB_DATA data, outdata;
+
+       data.dptr = (uint8_t *)&dbid;
+       data.dsize = sizeof(uint64_t);  /* This is just wrong */
+
+       ret = ctdb_control(ctdb, destnode, 0, CTDB_CONTROL_GET_DB_SEQNUM,
+                          0, data, ctdb, &outdata, &res, &timeout, NULL);
+       if (ret != 0 || res != 0) {
+               DEBUG(DEBUG_ERR,("ctdb_control for getdbesqnum failed\n"));
+               return -1;
+       }
+
+       if (outdata.dsize != sizeof(uint64_t)) {
+               DEBUG(DEBUG_ERR,("Invalid return data in get_dbseqnum\n"));
+               talloc_free(outdata.dptr);
+               return -1;
+       }
+
+       if (seqnum != NULL) {
+               *seqnum = *(uint64_t *)outdata.dptr;
+       }
+       talloc_free(outdata.dptr);
+
+       return 0;
+}
+
 /*
   create a database
  */
index 9d1a4d367ad7989a74bfeb1e9256480a467d6d2f..35ce6d1b26fdbbbbd8610a38d35a7aac14db9e00 100644 (file)
@@ -293,6 +293,8 @@ int ctdb_ctrl_getdbhealth(struct ctdb_context *ctdb,
                          uint32_t destnode,
                          uint32_t dbid, TALLOC_CTX *mem_ctx,
                          const char **reason);
+int ctdb_ctrl_getdbseqnum(struct ctdb_context *ctdb, struct timeval timeout,
+                         uint32_t destnode, uint32_t dbid, uint64_t *seqnum);
 int ctdb_ctrl_createdb(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, TALLOC_CTX *mem_ctx, const char *name, bool persistent);
 
 int ctdb_ctrl_process_exists(struct ctdb_context *ctdb, uint32_t destnode, pid_t pid);