From a97b588b63f437d25c4344c76014326dbf0cbdb0 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 28 Jan 2014 21:24:22 +0100 Subject: [PATCH] dbwrap_ctdb: implement DBWRAP_FLAG_OPTIMIZE_READONLY_ACCESS For non-persistent databases we try to use CTDB_CONTROL_SET_DB_READONLY in order to make use of readonly records. Pair-Programmed-With: Michael Adam Signed-off-by: Stefan Metzmacher Signed-off-by: Michael Adam --- source3/lib/dbwrap/dbwrap_ctdb.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/source3/lib/dbwrap/dbwrap_ctdb.c b/source3/lib/dbwrap/dbwrap_ctdb.c index 2770129a177..87e644dbe5f 100644 --- a/source3/lib/dbwrap/dbwrap_ctdb.c +++ b/source3/lib/dbwrap/dbwrap_ctdb.c @@ -1649,6 +1649,27 @@ struct db_context *db_open_ctdb(TALLOC_CTX *mem_ctx, return NULL; } +#ifdef HAVE_CTDB_WANT_READONLY_DECL + if (!result->persistent && + (dbwrap_flags & DBWRAP_FLAG_OPTIMIZE_READONLY_ACCESS)) + { + TDB_DATA indata; + + indata = make_tdb_data((uint8_t *)&db_ctdb->db_id, + sizeof(db_ctdb->db_id)); + + status = ctdbd_control_local( + conn, CTDB_CONTROL_SET_DB_READONLY, 0, 0, indata, + NULL, NULL, &cstatus); + if (!NT_STATUS_IS_OK(status) || (cstatus != 0)) { + DEBUG(1, ("CTDB_CONTROL_SET_DB_READONLY failed: " + "%s, %d\n", nt_errstr(status), cstatus)); + TALLOC_FREE(result); + return NULL; + } + } +#endif + lp_ctx = loadparm_init_s3(db_path, loadparm_s3_helpers()); db_ctdb->wtdb = tdb_wrap_open(db_ctdb, db_path, hash_size, tdb_flags, -- 2.11.4.GIT