diff options
| author | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2008-06-04 10:46:20 +1000 |
|---|---|---|
| committer | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2008-06-04 10:46:20 +1000 |
| commit | 1c88f422d54798d22d1f933d04e82dc97cfdfdaf (patch) | |
| tree | 59e9031ce9ea2431d4d9e93254eb672480a92083 | |
| parent | a594ac1e917a68e7514863d8976af2094fcfa701 (diff) | |
add a parameter for the tdb-flags to the client function
ctdb_attach() so that we can pass TDB_NOSYNC when we attach to
a persistent database and want fast unsafe writes instead of
slow but safe tdb_transaction writes.
enhance the ctdb_persistent test suite to test both safe and unsafe writes
(This used to be ctdb commit 4948574f5a290434f3edd0c052cf13f3645deec4)
| -rw-r--r-- | ctdb/client/ctdb_client.c | 4 | ||||
| -rw-r--r-- | ctdb/include/ctdb.h | 2 | ||||
| -rw-r--r-- | ctdb/server/ctdb_recoverd.c | 2 | ||||
| -rw-r--r-- | ctdb/tests/ctdb_bench.c | 2 | ||||
| -rw-r--r-- | ctdb/tests/ctdb_fetch.c | 2 | ||||
| -rw-r--r-- | ctdb/tests/ctdb_persistent.c | 14 | ||||
| -rw-r--r-- | ctdb/tests/ctdb_randrec.c | 2 | ||||
| -rw-r--r-- | ctdb/tests/ctdb_store.c | 2 | ||||
| -rw-r--r-- | ctdb/tests/ctdb_traverse.c | 2 | ||||
| -rwxr-xr-x | ctdb/tests/persistent.sh | 22 | ||||
| -rw-r--r-- | ctdb/tools/ctdb.c | 4 | ||||
| -rw-r--r-- | ctdb/tools/ctdb_vacuum.c | 4 |
12 files changed, 46 insertions, 16 deletions
diff --git a/ctdb/client/ctdb_client.c b/ctdb/client/ctdb_client.c index 921392c844..04befd05cb 100644 --- a/ctdb/client/ctdb_client.c +++ b/ctdb/client/ctdb_client.c @@ -1640,7 +1640,7 @@ static int ctdb_fetch_func(struct ctdb_call_info *call) /* attach to a specific database - client call */ -struct ctdb_db_context *ctdb_attach(struct ctdb_context *ctdb, const char *name, bool persistent) +struct ctdb_db_context *ctdb_attach(struct ctdb_context *ctdb, const char *name, bool persistent, uint32_t tdb_flags) { struct ctdb_db_context *ctdb_db; TDB_DATA data; @@ -1663,7 +1663,7 @@ struct ctdb_db_context *ctdb_attach(struct ctdb_context *ctdb, const char *name, data.dsize = strlen(name)+1; /* tell ctdb daemon to attach */ - ret = ctdb_control(ctdb, CTDB_CURRENT_NODE, 0, + ret = ctdb_control(ctdb, CTDB_CURRENT_NODE, tdb_flags, persistent?CTDB_CONTROL_DB_ATTACH_PERSISTENT:CTDB_CONTROL_DB_ATTACH, 0, data, ctdb_db, &data, &res, NULL, NULL); if (ret != 0 || res != 0 || data.dsize != sizeof(uint32_t)) { diff --git a/ctdb/include/ctdb.h b/ctdb/include/ctdb.h index 95d3f2f392..ecbe9576d6 100644 --- a/ctdb/include/ctdb.h +++ b/ctdb/include/ctdb.h @@ -185,7 +185,7 @@ int ctdb_start_daemon(struct ctdb_context *ctdb, bool do_fork); /* attach to a ctdb database */ -struct ctdb_db_context *ctdb_attach(struct ctdb_context *ctdb, const char *name, bool persistent); +struct ctdb_db_context *ctdb_attach(struct ctdb_context *ctdb, const char *name, bool persistent, uint32_t tdb_flags); /* find an attached ctdb_db handle given a name diff --git a/ctdb/server/ctdb_recoverd.c b/ctdb/server/ctdb_recoverd.c index 9a33819737..30b121ce16 100644 --- a/ctdb/server/ctdb_recoverd.c +++ b/ctdb/server/ctdb_recoverd.c @@ -866,7 +866,7 @@ static void vacuum_fetch_handler(struct ctdb_context *ctdb, uint64_t srvid, } /* attach to it */ - ctdb_db = ctdb_attach(ctdb, name, persistent); + ctdb_db = ctdb_attach(ctdb, name, persistent, 0); if (ctdb_db == NULL) { DEBUG(DEBUG_ERR,(__location__ " Failed to attach to database '%s'\n", name)); talloc_free(tmp_ctx); diff --git a/ctdb/tests/ctdb_bench.c b/ctdb/tests/ctdb_bench.c index c14ef2b3cd..2d6b3ab298 100644 --- a/ctdb/tests/ctdb_bench.c +++ b/ctdb/tests/ctdb_bench.c @@ -201,7 +201,7 @@ int main(int argc, const char *argv[]) &cluster_ready); /* attach to a specific database */ - ctdb_db = ctdb_attach(ctdb, "test.tdb", false); + ctdb_db = ctdb_attach(ctdb, "test.tdb", false, 0); if (!ctdb_db) { printf("ctdb_attach failed - %s\n", ctdb_errstr(ctdb)); exit(1); diff --git a/ctdb/tests/ctdb_fetch.c b/ctdb/tests/ctdb_fetch.c index 56eb244a70..2cc51d51bc 100644 --- a/ctdb/tests/ctdb_fetch.c +++ b/ctdb/tests/ctdb_fetch.c @@ -219,7 +219,7 @@ int main(int argc, const char *argv[]) &cluster_ready); /* attach to a specific database */ - ctdb_db = ctdb_attach(ctdb, "test.tdb", false); + ctdb_db = ctdb_attach(ctdb, "test.tdb", false, 0); if (!ctdb_db) { printf("ctdb_attach failed - %s\n", ctdb_errstr(ctdb)); exit(1); diff --git a/ctdb/tests/ctdb_persistent.c b/ctdb/tests/ctdb_persistent.c index b98e662cc7..7bd4ab8769 100644 --- a/ctdb/tests/ctdb_persistent.c +++ b/ctdb/tests/ctdb_persistent.c @@ -167,11 +167,12 @@ int main(int argc, const char *argv[]) { struct ctdb_context *ctdb; struct ctdb_db_context *ctdb_db; - + int unsafe_writes = 0; struct poptOption popt_options[] = { POPT_AUTOHELP POPT_CTDB_CMDLINE { "timelimit", 't', POPT_ARG_INT, &timelimit, 0, "timelimit", "integer" }, + { "unsafe-writes", 'u', POPT_ARG_NONE, &unsafe_writes, 0, "do not use tdb transactions when writing", NULL }, POPT_TABLEEND }; int opt; @@ -201,9 +202,18 @@ int main(int argc, const char *argv[]) ev = event_context_init(NULL); ctdb = ctdb_cmdline_client(ev); + if (ctdb == NULL) { + printf("Could not attach to daemon\n"); + return 1; + } /* attach to a specific database */ - ctdb_db = ctdb_attach(ctdb, "persistent.tdb", true); + if (unsafe_writes == 1) { + ctdb_db = ctdb_attach(ctdb, "persistent.tdb", true, TDB_NOSYNC); + } else { + ctdb_db = ctdb_attach(ctdb, "persistent.tdb", true, 0); + } + if (!ctdb_db) { printf("ctdb_attach failed - %s\n", ctdb_errstr(ctdb)); exit(1); diff --git a/ctdb/tests/ctdb_randrec.c b/ctdb/tests/ctdb_randrec.c index 287b57c34a..4b9b2bc93e 100644 --- a/ctdb/tests/ctdb_randrec.c +++ b/ctdb/tests/ctdb_randrec.c @@ -143,7 +143,7 @@ int main(int argc, const char *argv[]) ctdb = ctdb_cmdline_client(ev); /* attach to a specific database */ - ctdb_db = ctdb_attach(ctdb, "test.tdb", false); + ctdb_db = ctdb_attach(ctdb, "test.tdb", false, 0); if (!ctdb_db) { printf("ctdb_attach failed - %s\n", ctdb_errstr(ctdb)); exit(1); diff --git a/ctdb/tests/ctdb_store.c b/ctdb/tests/ctdb_store.c index 70ce7fb59d..ce4195c65f 100644 --- a/ctdb/tests/ctdb_store.c +++ b/ctdb/tests/ctdb_store.c @@ -139,7 +139,7 @@ int main(int argc, const char *argv[]) ctdb = ctdb_cmdline_client(ev); /* attach to a specific database */ - ctdb_db = ctdb_attach(ctdb, "test.tdb", false); + ctdb_db = ctdb_attach(ctdb, "test.tdb", false, 0); if (!ctdb_db) { printf("ctdb_attach failed - %s\n", ctdb_errstr(ctdb)); exit(1); diff --git a/ctdb/tests/ctdb_traverse.c b/ctdb/tests/ctdb_traverse.c index 136dfbc202..f5ca7159c4 100644 --- a/ctdb/tests/ctdb_traverse.c +++ b/ctdb/tests/ctdb_traverse.c @@ -92,7 +92,7 @@ int main(int argc, const char *argv[]) ctdb = ctdb_cmdline_client(ev); /* attach to a specific database */ - ctdb_db = ctdb_attach(ctdb, dbname, false); + ctdb_db = ctdb_attach(ctdb, dbname, false, 0); if (!ctdb_db) { printf("ctdb_attach failed - %s\n", ctdb_errstr(ctdb)); exit(1); diff --git a/ctdb/tests/persistent.sh b/ctdb/tests/persistent.sh index d952786cd6..327f8bcce9 100755 --- a/ctdb/tests/persistent.sh +++ b/ctdb/tests/persistent.sh @@ -5,7 +5,8 @@ if [ $# -gt 0 ]; then NUMNODES=$1 fi -echo "Starting $NUMNODES daemons" + +echo "Starting $NUMNODES daemons for SAFE persistent writes" tests/start_daemons.sh $NUMNODES || exit 1 killall -9 -q ctdb_persistent @@ -17,5 +18,24 @@ wait echo "Shutting down" bin/ctdb shutdown -n all --socket=sock.1 +killall -9 ctdbd + + + +echo "Starting $NUMNODES daemons for UNSAFE persistent writes" +tests/start_daemons.sh $NUMNODES || exit 1 + +killall -9 -q ctdb_persistent + +for i in `seq 1 $NUMNODES`; do + $VALGRIND bin/ctdb_persistent --unsafe-writes --timelimit 30 --socket sock.$i $* & +done +wait + +echo "Shutting down" +bin/ctdb shutdown -n all --socket=sock.1 +killall -9 ctdbd + + exit 0 diff --git a/ctdb/tools/ctdb.c b/ctdb/tools/ctdb.c index c8cfe80e5b..6df78130d6 100644 --- a/ctdb/tools/ctdb.c +++ b/ctdb/tools/ctdb.c @@ -1278,7 +1278,7 @@ static int control_catdb(struct ctdb_context *ctdb, int argc, const char **argv) } db_name = argv[0]; - ctdb_db = ctdb_attach(ctdb, db_name, false); + ctdb_db = ctdb_attach(ctdb, db_name, false, 0); if (ctdb_db == NULL) { DEBUG(DEBUG_ERR,("Unable to attach to database '%s'\n", db_name)); @@ -1633,7 +1633,7 @@ static int control_attach(struct ctdb_context *ctdb, int argc, const char **argv } db_name = argv[0]; - ctdb_db = ctdb_attach(ctdb, db_name, false); + ctdb_db = ctdb_attach(ctdb, db_name, false, 0); if (ctdb_db == NULL) { DEBUG(DEBUG_ERR,("Unable to attach to database '%s'\n", db_name)); return -1; diff --git a/ctdb/tools/ctdb_vacuum.c b/ctdb/tools/ctdb_vacuum.c index 1423582f0a..60a0b0a3ee 100644 --- a/ctdb/tools/ctdb_vacuum.c +++ b/ctdb/tools/ctdb_vacuum.c @@ -260,7 +260,7 @@ static int ctdb_vacuum_db(struct ctdb_context *ctdb, uint32_t db_id, struct ctdb return -1; } - ctdb_db = ctdb_attach(ctdb, name, persistent); + ctdb_db = ctdb_attach(ctdb, name, persistent, 0); if (ctdb_db == NULL) { DEBUG(DEBUG_ERR,(__location__ " Failed to attach to database '%s'\n", name)); talloc_free(vdata); @@ -579,7 +579,7 @@ static int ctdb_repack_db(struct ctdb_context *ctdb, uint32_t db_id, return -1; } - ctdb_db = ctdb_attach(ctdb, name, persistent); + ctdb_db = ctdb_attach(ctdb, name, persistent, 0); if (ctdb_db == NULL) { DEBUG(DEBUG_ERR,(__location__ " Failed to attach to database '%s'\n", name)); return -1; |
