summaryrefslogtreecommitdiff
path: root/source3/lib/dbwrap/dbwrap_ctdb.c
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2012-02-03 11:00:54 +1100
committerAmitay Isaacs <amitay@samba.org>2012-03-05 01:11:26 +0100
commit5bda06877303b4ac01081b12f889db1409c0a6f6 (patch)
treeced934126e83567cf7d7f4539173c694d57e3a7f /source3/lib/dbwrap/dbwrap_ctdb.c
parent67bb5abe81dc64758a792060673b923cd77a018a (diff)
downloadsamba-5bda06877303b4ac01081b12f889db1409c0a6f6.tar.gz
samba-5bda06877303b4ac01081b12f889db1409c0a6f6.tar.bz2
samba-5bda06877303b4ac01081b12f889db1409c0a6f6.zip
dbwrap_ctdb: only fetch a read-only copy if we had a record already.
Because revoking read-only copies of records is expensive, we only want ctdbd to do it for high-turnover records. A basic heuristic is that if we don't find a local copy of the record, don't ask for a read-only copy. The fetch itself will cause ctdbd to migrate the record, so eventually we will have a local copy. Next time it gets migrated away, we'll call ctdbd_fetch() with local_copy = true. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'source3/lib/dbwrap/dbwrap_ctdb.c')
-rw-r--r--source3/lib/dbwrap/dbwrap_ctdb.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/source3/lib/dbwrap/dbwrap_ctdb.c b/source3/lib/dbwrap/dbwrap_ctdb.c
index 0f4efa359c..a05f9554b7 100644
--- a/source3/lib/dbwrap/dbwrap_ctdb.c
+++ b/source3/lib/dbwrap/dbwrap_ctdb.c
@@ -1203,9 +1203,14 @@ static NTSTATUS db_ctdb_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
SAFE_FREE(ctdb_data.dptr);
- /* we weren't able to get it locally - ask ctdb to fetch it for us */
+ /*
+ * We weren't able to get it locally - ask ctdb to fetch it for us.
+ * If we already had *something*, it's probably worth making a local
+ * read-only copy.
+ */
status = ctdbd_fetch(messaging_ctdbd_connection(), ctx->db_id, key,
- mem_ctx, data);
+ mem_ctx, data,
+ ctdb_data.dsize >= sizeof(struct ctdb_ltdb_header));
if (!NT_STATUS_IS_OK(status)) {
DEBUG(5, ("ctdbd_fetch failed: %s\n", nt_errstr(status)));
}