/*
check if a database exists
*/
-static bool db_exists(struct ctdb_context *ctdb, const char *dbarg, uint32_t *dbid, uint8_t *flags)
+static bool db_exists(struct ctdb_context *ctdb, const char *dbarg,
+ uint32_t *dbid, const char **dbname, uint8_t *flags)
{
int i, ret;
struct ctdb_dbid_map *dbmap=NULL;
bool dbid_given = false, found = false;
uint32_t id;
TALLOC_CTX *tmp_ctx = talloc_new(ctdb);
+ const char *name;
ret = ctdb_ctrl_getdbmap(ctdb, TIMELIMIT(), options.pnn, tmp_ctx, &dbmap);
if (ret != 0) {
break;
}
} else {
- const char *name;
ret = ctdb_ctrl_getdbname(ctdb, TIMELIMIT(), options.pnn, dbmap->dbs[i].dbid, tmp_ctx, &name);
if (ret != 0) {
DEBUG(DEBUG_ERR, ("Unable to get dbname from dbid %u\n", dbmap->dbs[i].dbid));
}
}
+ if (found && dbid_given && dbname != NULL) {
+ ret = ctdb_ctrl_getdbname(ctdb, TIMELIMIT(), options.pnn, dbmap->dbs[i].dbid, tmp_ctx, &name);
+ if (ret != 0) {
+ DEBUG(DEBUG_ERR, ("Unable to get dbname from dbid %u\n", dbmap->dbs[i].dbid));
+ found = false;
+ goto fail;
+ }
+ }
+
if (found) {
if (dbid) *dbid = id;
+ if (dbname) *dbname = talloc_strdup(ctdb, name);
if (flags) *flags = dbmap->dbs[i].flags;
} else {
DEBUG(DEBUG_ERR,("No database matching '%s' found\n", dbarg));
usage();
}
- if (!db_exists(ctdb, argv[0], &db_id, NULL)) {
+ if (!db_exists(ctdb, argv[0], &db_id, NULL, NULL)) {
return -1;
}
usage();
}
- db_name = argv[0];
-
- if (!db_exists(ctdb, db_name, NULL, &flags)) {
+ if (!db_exists(ctdb, argv[0], NULL, &db_name, &flags)) {
return -1;
}
usage();
}
- db_name = argv[0];
-
- if (!db_exists(ctdb, db_name, NULL, &flags)) {
+ if (!db_exists(ctdb, argv[0], NULL, &db_name, &flags)) {
return -1;
}
usage();
}
- db_name = argv[0];
-
- if (!db_exists(ctdb, db_name, NULL, &flags)) {
+ if (!db_exists(ctdb, argv[0], NULL, &db_name, &flags)) {
return -1;
}
usage();
}
- db_name = argv[0];
-
- if (!db_exists(ctdb, db_name, NULL, &flags)) {
+ if (!db_exists(ctdb, argv[0], NULL, &db_name, &flags)) {
return -1;
}
usage();
}
- db_name = argv[0];
-
- if (!db_exists(ctdb, db_name, NULL, &flags)) {
+ if (!db_exists(ctdb, argv[0], NULL, &db_name, &flags)) {
talloc_free(tmp_ctx);
return -1;
}
usage();
}
- db_name = argv[0];
-
- if (!db_exists(ctdb, db_name, NULL, &flags)) {
+ if (!db_exists(ctdb, argv[0], NULL, &db_name, &flags)) {
talloc_free(tmp_ctx);
return -1;
}
usage();
}
- db_name = argv[0];
-
- if (!db_exists(ctdb, db_name, &db_id, &flags)) {
+ if (!db_exists(ctdb, argv[0], &db_id, &db_name, &flags)) {
return -1;
}
usage();
}
- if (!db_exists(ctdb, argv[0], &db_id, NULL)) {
+ if (!db_exists(ctdb, argv[0], &db_id, NULL, NULL)) {
return -1;
}
usage();
}
- if (!db_exists(ctdb, argv[0], &db_id, NULL)) {
+ if (!db_exists(ctdb, argv[0], &db_id, NULL, NULL)) {
return -1;
}
usage();
}
- if (!db_exists(ctdb, argv[0], &db_id, NULL)) {
+ if (!db_exists(ctdb, argv[0], &db_id, NULL, NULL)) {
return -1;
}
usage();
}
- if (!db_exists(ctdb, argv[0], &db_id, NULL)) {
+ if (!db_exists(ctdb, argv[0], &db_id, NULL, NULL)) {
return -1;
}
*/
static int control_backupdb(struct ctdb_context *ctdb, int argc, const char **argv)
{
+ const char *db_name;
int ret;
TALLOC_CTX *tmp_ctx = talloc_new(ctdb);
struct db_file_header dbhdr;
return -1;
}
- if (!db_exists(ctdb, argv[0], &db_id, &flags)) {
+ if (!db_exists(ctdb, argv[0], &db_id, &db_name, &flags)) {
return -1;
}
allow_unhealthy));
}
- ctdb_db = ctdb_attach(ctdb, TIMELIMIT(), argv[0], flags & CTDB_DB_FLAGS_PERSISTENT, 0);
+ ctdb_db = ctdb_attach(ctdb, TIMELIMIT(), db_name, 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);
static int control_wipedb(struct ctdb_context *ctdb, int argc,
const char **argv)
{
+ const char *db_name;
int ret;
TALLOC_CTX *tmp_ctx = talloc_new(ctdb);
TDB_DATA data;
return -1;
}
- if (!db_exists(ctdb, argv[0], NULL, &flags)) {
+ if (!db_exists(ctdb, argv[0], NULL, &db_name, &flags)) {
return -1;
}
- ctdb_db = ctdb_attach(ctdb, TIMELIMIT(), argv[0], flags & CTDB_DB_FLAGS_PERSISTENT, 0);
+ ctdb_db = ctdb_attach(ctdb, TIMELIMIT(), db_name, flags & CTDB_DB_FLAGS_PERSISTENT, 0);
if (ctdb_db == NULL) {
DEBUG(DEBUG_ERR, ("Unable to attach to database '%s'\n",
argv[0]));