From: Andrew Tridgell Date: Sun, 22 Apr 2007 14:53:09 +0000 (+0200) Subject: mark authoritative records X-Git-Tag: tevent-0.9.20~348^2~2851 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1349f0bd49ba9a1f1098bbd94e85ede2e5bc9710;p=thirdparty%2Fsamba.git mark authoritative records (This used to be ctdb commit f2076338221c5cb28f9045ce5345cc6a9b429f1a) --- diff --git a/ctdb/tools/ctdb_dump.c b/ctdb/tools/ctdb_dump.c index cf89dcf09c8..a76034edea5 100644 --- a/ctdb/tools/ctdb_dump.c +++ b/ctdb/tools/ctdb_dump.c @@ -36,15 +36,25 @@ static void usage(void) exit(1); } +struct node_info { + uint32_t num_nodes; + uint32_t vnn; +}; + static int traverse_fn(struct tdb_context *tdb, TDB_DATA key, TDB_DATA data, void *p) { - int *num_nodes = (int *)p; + struct node_info *info = (struct node_info *)p; struct id { dev_t dev; ino_t inode; } *id; struct ctdb_ltdb_header *h = (struct ctdb_ltdb_header *)data.dptr; char *keystr; + uint32_t lmaster; + int authoritative=0; + + lmaster = ctdb_hash(&key) % info->num_nodes; + id = (struct id *)key.dptr; if (key.dsize == sizeof(*id)) { keystr = talloc_asprintf(NULL, "%llu:%llu", @@ -52,11 +62,12 @@ static int traverse_fn(struct tdb_context *tdb, TDB_DATA key, TDB_DATA data, voi } else { keystr = hex_encode(NULL, key.dptr, key.dsize); } + authoritative = (info->vnn == lmaster || info->vnn == h->dmaster); printf(" rec %s lmaster=%u dmaster=%u %c\n", keystr, - ctdb_hash(&key) % (*num_nodes), + lmaster, h->dmaster, - ); + authoritative?'A':' '); talloc_free(keystr); return 0; } @@ -76,6 +87,7 @@ int main(int argc, const char *argv[]) int i, extra_argc = 0; poptContext pc; struct tdb_wrap *db; + struct node_info info; pc = poptGetContext(argv[0], argc, argv, popt_options, POPT_CONTEXT_KEEP_FIRST); @@ -108,7 +120,9 @@ int main(int argc, const char *argv[]) } printf("db %s\n", extra_argv[i]); - tdb_traverse(db->tdb, traverse_fn, &extra_argc); + info.vnn = i; + info.num_nodes = extra_argc; + tdb_traverse(db->tdb, traverse_fn, &info); talloc_free(db); }