echo
echo "Printing all databases on all nodes. they should all be empty"
echo "============================================================="
-bin/ctdb_control --socket=/tmp/ctdb.socket getdbmap 0 | egrep "^dbid:" | sed -e "s/^dbid://" -e "s/ .*$//" | while read DB; do
+bin/ctdb_control --socket=/tmp/ctdb.socket getdbmap 0 | egrep "^dbid:" | sed -e "s/^.*name://" -e "s/ .*$//" | while read DBNAME; do
seq 0 3 | while read NODE; do
- echo "Content of DB:$DB NODE:$NODE :"
- bin/ctdb_control --socket=/tmp/ctdb.socket catdb $NODE $DB
+ echo "Content of DBNAME:$DBNAME NODE:$NODE :"
+ bin/ctdb_control --socket=/tmp/ctdb.socket catdb $DBNAME $NODE
done
done
-
echo
echo
echo "Populating the databases"
echo
echo "Printing all databases on all nodes. there should be a record there"
echo "============================================================="
-bin/ctdb_control --socket=/tmp/ctdb.socket getdbmap 0 | egrep "^dbid:" | sed -e "s/^dbid://" -e "s/ .*$//" | while read DB; do
+bin/ctdb_control --socket=/tmp/ctdb.socket getdbmap 0 | egrep "^dbid:" | sed -e "s/^.*name://" -e "s/ .*$//" | while read DBNAME; do
seq 0 3 | while read NODE; do
- echo "Content of DB:$DB NODE:$NODE :"
- bin/ctdb_control --socket=/tmp/ctdb.socket catdb $NODE $DB
+ echo "Content of DBNAME:$DBNAME NODE:$NODE :"
+ bin/ctdb_control --socket=/tmp/ctdb.socket catdb $DBNAME $NODE
done
done
echo "and the record will have been migrated to node 0"
echo "================================================="
echo "Node 1:"
-bin/ctdb_control --socket=/tmp/ctdb.socket catdb 1 0x220c2a7b
+bin/ctdb_control --socket=/tmp/ctdb.socket catdb test4.tdb 1
echo "Node 2:"
-bin/ctdb_control --socket=/tmp/ctdb.socket catdb 2 0x220c2a7b
+bin/ctdb_control --socket=/tmp/ctdb.socket catdb test4.tdb 2
echo "Node 3:"
-bin/ctdb_control --socket=/tmp/ctdb.socket catdb 3 0x220c2a7b
+bin/ctdb_control --socket=/tmp/ctdb.socket catdb test4.tdb 3
echo "nodemap:"
bin/ctdb_control --socket=/tmp/ctdb.socket getnodemap 3
+echo
+echo
+echo "Traverse the cluster and dump the database"
+bin/ctdb_control --socket=/tmp/ctdb.socket catdb test4.tdb
#leave the ctdb daemons running so one can look at the box in more detail
" getdbmap <vnn> lists databases on a node\n"
" getnodemap <vnn> lists nodes known to a ctdb daemon\n"
" createdb <vnn> <dbname> create a database\n"
- " catdb <dbname> lists all keys/data in a db\n"
+ " catdb <dbname> [vnn] lists all keys/data in a db\n"
" cpdb <fromvnn> <tovnn> <dbid> lists all keys in a remote tdb\n"
" setdmaster <vnn> <dbid> <dmaster> sets new dmaster for all records in the database\n"
" cleardb <vnn> <dbid> deletes all records in a db\n"
}
for (i=0;i<dbmap->num;i++) {
const char *path;
+ const char *name;
ctdb_ctrl_getdbpath(ctdb, timeval_current_ofs(1, 0), CTDB_CURRENT_NODE, dbmap->dbids[i], ctdb, &path);
- printf("dbid:0x%08x path:%s\n", dbmap->dbids[i], path);
+ ctdb_ctrl_getdbname(ctdb, timeval_current_ofs(1, 0), CTDB_CURRENT_NODE, dbmap->dbids[i], ctdb, &name);
+ printf("dbid:0x%08x name:%s path:%s\n", dbmap->dbids[i], name, path);
}
/* 5: pull all records from all other nodes across to this node
{
const char *db_name;
struct ctdb_db_context *ctdb_db;
+ uint32_t vnn;
int ret;
if (argc < 1) {
return -1;
}
- ret = ctdb_dump_db(ctdb_db, stdout);
- if (ret == -1) {
- printf("Unable to dump database\n");
- return -1;
- }
+ if (argc==1) {
+ /* traverse and dump the cluster tdb */
+ ret = ctdb_dump_db(ctdb_db, stdout);
+ if (ret == -1) {
+ printf("Unable to dump database\n");
+ return -1;
+ }
+ } else {
+ struct ctdb_key_list keys;
+ int i;
+ /* dump only the local tdb of a specific node */
+ vnn = strtoul(argv[1], NULL, 0);
+ ret = ctdb_ctrl_pulldb(ctdb, vnn, ctdb_db->db_id, CTDB_LMASTER_ANY, ctdb, &keys);
+ if (ret == -1) {
+ printf("Unable to pull remote database\n");
+ return -1;
+ }
+ for(i=0;i<keys.num;i++){
+ char *keystr, *datastr;
+
+ keystr = hex_encode(ctdb, keys.keys[i].dptr, keys.keys[i].dsize);
+ datastr = hex_encode(ctdb, keys.data[i].dptr, keys.data[i].dsize);
+
+ printf("rsn:%llu lmaster:%d dmaster:%d key:%s data:%s\n", keys.headers[i].rsn, keys.lmasters[i], keys.headers[i].dmaster, keystr, datastr);
+ ret++;
+ }
+ }
+
talloc_free(ctdb_db);
printf("Dumped %d records\n", ret);
printf("Number of databases:%d\n", dbmap->num);
for(i=0;i<dbmap->num;i++){
const char *path;
+ const char *name;
ctdb_ctrl_getdbpath(ctdb, timeval_current_ofs(1, 0), CTDB_CURRENT_NODE, dbmap->dbids[i], ctdb, &path);
- printf("dbid:0x%08x path:%s\n", dbmap->dbids[i], path);
+ ctdb_ctrl_getdbname(ctdb, timeval_current_ofs(1, 0), CTDB_CURRENT_NODE, dbmap->dbids[i], ctdb, &name);
+ printf("dbid:0x%08x name:%s path:%s\n", dbmap->dbids[i], name, path);
}
return 0;