diff options
author | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2012-03-20 16:58:35 +1100 |
---|---|---|
committer | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2012-03-20 17:12:19 +1100 |
commit | fa3a06246ac45b1406ca7b9067376050cd80e3e2 (patch) | |
tree | c88b6a3ababf85116ff184ec1b2b52fafce500d5 /ctdb/client | |
parent | 462cdbc5c4e7d1c0dcbeec7a4767783d3f45db2d (diff) | |
download | samba-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.c | 38 |
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); +} |