From 9987fe7209c3bd44ea0015d98d0f92b65ec70700 Mon Sep 17 00:00:00 2001 From: Amitay Isaacs Date: Wed, 23 Aug 2017 12:09:22 +1000 Subject: [PATCH] ctdb-client: Optionally return database id from ctdb_ctrl_createdb() BUG: https://bugzilla.samba.org/show_bug.cgi?id=12978 Signed-off-by: Amitay Isaacs Reviewed-by: Martin Schwenke --- ctdb/client/ctdb_client.c | 11 ++++++++++- ctdb/include/ctdb_client.h | 2 +- ctdb/server/ctdb_recoverd.c | 4 ++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/ctdb/client/ctdb_client.c b/ctdb/client/ctdb_client.c index 74874bab2b2..05710c964fa 100644 --- a/ctdb/client/ctdb_client.c +++ b/ctdb/client/ctdb_client.c @@ -1912,7 +1912,7 @@ int ctdb_ctrl_getdbseqnum(struct ctdb_context *ctdb, struct timeval timeout, */ int ctdb_ctrl_createdb(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, TALLOC_CTX *mem_ctx, - const char *name, uint8_t db_flags) + const char *name, uint8_t db_flags, uint32_t *db_id) { int ret; int32_t res; @@ -1937,6 +1937,15 @@ int ctdb_ctrl_createdb(struct ctdb_context *ctdb, struct timeval timeout, return -1; } + if (data.dsize != sizeof(uint32_t)) { + TALLOC_FREE(data.dptr); + return -1; + } + if (db_id != NULL) { + *db_id = *(uint32_t *)data.dptr; + } + talloc_free(data.dptr); + return 0; } diff --git a/ctdb/include/ctdb_client.h b/ctdb/include/ctdb_client.h index 8aaf9c4d643..7314760fdc8 100644 --- a/ctdb/include/ctdb_client.h +++ b/ctdb/include/ctdb_client.h @@ -251,7 +251,7 @@ int ctdb_ctrl_getdbseqnum(struct ctdb_context *ctdb, struct timeval timeout, int ctdb_ctrl_createdb(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, TALLOC_CTX *mem_ctx, - const char *name, uint8_t db_flags); + const char *name, uint8_t db_flags, uint32_t *db_id); int ctdb_ctrl_get_debuglevel(struct ctdb_context *ctdb, uint32_t destnode, int32_t *level); diff --git a/ctdb/server/ctdb_recoverd.c b/ctdb/server/ctdb_recoverd.c index 05aee463bef..386b72065e4 100644 --- a/ctdb/server/ctdb_recoverd.c +++ b/ctdb/server/ctdb_recoverd.c @@ -472,7 +472,7 @@ static int create_missing_remote_databases(struct ctdb_context *ctdb, struct ctd ret = ctdb_ctrl_createdb(ctdb, CONTROL_TIMEOUT(), nodemap->nodes[j].pnn, mem_ctx, name, - dbmap->dbs[db].flags); + dbmap->dbs[db].flags, NULL); if (ret != 0) { DEBUG(DEBUG_ERR, (__location__ " Unable to create remote db:%s\n", name)); return -1; @@ -536,7 +536,7 @@ static int create_missing_local_databases(struct ctdb_context *ctdb, struct ctdb } ctdb_ctrl_createdb(ctdb, CONTROL_TIMEOUT(), pnn, mem_ctx, name, - remote_dbmap->dbs[db].flags); + remote_dbmap->dbs[db].flags, NULL); if (ret != 0) { DEBUG(DEBUG_ERR, (__location__ " Unable to create local db:%s\n", name)); return -1;