int ctdb_daemon_set_call(struct ctdb_context *ctdb, uint32_t db_id,
ctdb_fn_t fn, int id);
+int ctdb_control(struct ctdb_context *ctdb, uint32_t destnode, uint64_t srvid,
+ uint32_t opcode, uint32_t flags, TDB_DATA data,
+ TALLOC_CTX *mem_ctx, TDB_DATA *outdata, int32_t *status);
+
#endif
#include "system/filesys.h"
#include "popt.h"
#include "cmdline.h"
+#include "../include/ctdb.h"
#include "../include/ctdb_private.h"
printf(" setvnnmap <vnn> <generation> <numslots> <lmaster>*\n");
printf(" getdbmap <vnn> lists databases on a node\n");
printf(" getnodemap <vnn> lists nodes known to a ctdb daemon\n");
+ printf(" createdb <vnn> <dbname> create a database\n");
printf(" catdb <vnn> <dbid> lists all keys in a remote tdb\n");
printf(" cpdb <fromvnn> <tovnn> <dbid> lists all keys in a remote tdb\n");
printf(" setdmaster <vnn> <dbid> <dmaster> sets new dmaster for all records in the database\n");
return 0;
}
+/*
+ create a database
+ */
+static int control_createdb(struct ctdb_context *ctdb, int argc, const char **argv)
+{
+ uint32_t vnn;
+ const char *dbname;
+ int ret;
+ int32_t res;
+ TDB_DATA data;
+
+ if (argc < 2) {
+ usage();
+ }
+
+ vnn = strtoul(argv[0], NULL, 0);
+ dbname = argv[1];
+
+ /* tell ctdb daemon to attach */
+ data.dptr = discard_const(dbname);
+ data.dsize = strlen(dbname)+1;
+ ret = ctdb_control(ctdb, vnn, 0, CTDB_CONTROL_DB_ATTACH,
+ 0, data, ctdb, &data, &res);
+ if (ret != 0 || res != 0 || data.dsize != sizeof(uint32_t)) {
+ DEBUG(0,("Failed to attach to database '%s'\n", dbname));
+ return -1;
+ }
+
+ return 0;
+}
+
/*
ping all node
*/
ret = control_setdmaster(ctdb, extra_argc-1, extra_argv+1);
} else if (strcmp(control, "cleardb") == 0) {
ret = control_cleardb(ctdb, extra_argc-1, extra_argv+1);
+ } else if (strcmp(control, "createdb") == 0) {
+ ret = control_createdb(ctdb, extra_argc-1, extra_argv+1);
} else if (strcmp(control, "getrecmode") == 0) {
ret = control_getrecmode(ctdb, extra_argc-1, extra_argv+1);
} else if (strcmp(control, "setrecmode") == 0) {