dbwrap_ctdb: implement DBWRAP_FLAG_OPTIMIZE_READONLY_ACCESS
authorStefan Metzmacher <metze@samba.org>
Tue, 28 Jan 2014 20:24:22 +0000 (21:24 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 7 Feb 2014 15:06:06 +0000 (16:06 +0100)
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 <obnox@samba.org>

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Michael Adam <obnox@samba.org>
source3/lib/dbwrap/dbwrap_ctdb.c

index 2770129a177d5e3c6edc5843a2e91717a604a19e..87e644dbe5fe938e6cf97a5e1a11278ca67ca7bb 100644 (file)
@@ -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,