summaryrefslogtreecommitdiffstats
path: root/ctdb/server/ctdb_ltdb_server.c
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronniesahlberg@gmail.com>2011-11-08 06:55:46 +1100
committerRonnie Sahlberg <ronniesahlberg@gmail.com>2011-11-08 16:08:28 +1100
commit0e79b2d1e8befcc8924112faeb785b0648f35c43 (patch)
treea1130ebbc3a6c2c6bf4a95ac26dc47264dba03f6 /ctdb/server/ctdb_ltdb_server.c
parent8db9b73920da63c9eaa0822c9dd550714484fa13 (diff)
downloadsamba-0e79b2d1e8befcc8924112faeb785b0648f35c43.tar.gz
samba-0e79b2d1e8befcc8924112faeb785b0648f35c43.tar.xz
samba-0e79b2d1e8befcc8924112faeb785b0648f35c43.zip
Record Fetch Collapse: Collapse multiple fetch request into one single request.
When multiple clients fetch the same record concurrently, send only one single fetch across the network and deferr all other fetches locally. This improves performance for hot records and reduces cpu load on ctdb. (This used to be ctdb commit 82d6946ad8b3348e8b9d3d971f24925ade02d1be)
Diffstat (limited to 'ctdb/server/ctdb_ltdb_server.c')
-rw-r--r--ctdb/server/ctdb_ltdb_server.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/ctdb/server/ctdb_ltdb_server.c b/ctdb/server/ctdb_ltdb_server.c
index 745b3d256bc..713606d7593 100644
--- a/ctdb/server/ctdb_ltdb_server.c
+++ b/ctdb/server/ctdb_ltdb_server.c
@@ -962,6 +962,17 @@ again:
}
}
+ /* set up a rb tree we can use to track which records we have a
+ fetch-lock in-flight for so we can defer any additional calls
+ for the same record.
+ */
+ ctdb_db->deferred_fetch = trbt_create(ctdb_db, 0);
+ if (ctdb_db->deferred_fetch == NULL) {
+ DEBUG(DEBUG_ERR,("Failed to create deferred fetch rb tree for ctdb database\n"));
+ talloc_free(ctdb_db);
+ return -1;
+ }
+
DLIST_ADD(ctdb->db_list, ctdb_db);
/* setting this can help some high churn databases */