summaryrefslogtreecommitdiffstats
path: root/ctdb/client
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronniesahlberg@gmail.com>2012-03-20 16:58:35 +1100
committerRonnie Sahlberg <ronniesahlberg@gmail.com>2012-03-20 17:12:19 +1100
commitfa3a06246ac45b1406ca7b9067376050cd80e3e2 (patch)
treec88b6a3ababf85116ff184ec1b2b52fafce500d5 /ctdb/client
parent462cdbc5c4e7d1c0dcbeec7a4767783d3f45db2d (diff)
downloadsamba-fa3a06246ac45b1406ca7b9067376050cd80e3e2.tar.gz
samba-fa3a06246ac45b1406ca7b9067376050cd80e3e2.tar.xz
samba-fa3a06246ac45b1406ca7b9067376050cd80e3e2.zip
STICKY: add prototype code to make records stick to a node to "calm" down if they are found to be very hot and accessed by a lot of clients.
This can improve performance and stop clients from having to chase a rapidly migrating/bouncing record (This used to be ctdb commit d0d98f7e45e5084b81335b004d50bddc80cdc219)
Diffstat (limited to 'ctdb/client')
-rw-r--r--ctdb/client/ctdb_client.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/ctdb/client/ctdb_client.c b/ctdb/client/ctdb_client.c
index 9f4e8fd69d2..b01e258626b 100644
--- a/ctdb/client/ctdb_client.c
+++ b/ctdb/client/ctdb_client.c
@@ -4630,3 +4630,41 @@ int ctdb_ctrl_set_db_readonly(struct ctdb_context *ctdb, uint32_t destnode, uint
state = ctdb_ctrl_set_db_readonly_send(ctdb, destnode, dbid);
return ctdb_ctrl_set_db_readonly_recv(ctdb, state);
}
+
+/*
+ set a database to be sticky
+ */
+struct ctdb_client_control_state *
+ctdb_ctrl_set_db_sticky_send(struct ctdb_context *ctdb, uint32_t destnode, uint32_t dbid)
+{
+ TDB_DATA data;
+
+ data.dptr = (uint8_t *)&dbid;
+ data.dsize = sizeof(dbid);
+
+ return ctdb_control_send(ctdb, destnode, 0,
+ CTDB_CONTROL_SET_DB_STICKY, 0, data,
+ ctdb, NULL, NULL);
+}
+
+int ctdb_ctrl_set_db_sticky_recv(struct ctdb_context *ctdb, struct ctdb_client_control_state *state)
+{
+ int ret;
+ int32_t res;
+
+ ret = ctdb_control_recv(ctdb, state, ctdb, NULL, &res, NULL);
+ if (ret != 0 || res != 0) {
+ DEBUG(DEBUG_ERR,(__location__ " ctdb_ctrl_set_db_sticky_recv failed ret:%d res:%d\n", ret, res));
+ return -1;
+ }
+
+ return 0;
+}
+
+int ctdb_ctrl_set_db_sticky(struct ctdb_context *ctdb, uint32_t destnode, uint32_t dbid)
+{
+ struct ctdb_client_control_state *state;
+
+ state = ctdb_ctrl_set_db_sticky_send(ctdb, destnode, dbid);
+ return ctdb_ctrl_set_db_sticky_recv(ctdb, state);
+}