summaryrefslogtreecommitdiff
path: root/ctdb/server/ctdb_call.c
diff options
context:
space:
mode:
authorAmitay Isaacs <amitay@gmail.com>2013-07-12 17:33:13 +1000
committerAmitay Isaacs <amitay@gmail.com>2013-07-29 16:00:46 +1000
commit054d8727edd3b0a1d328a9599e7fe392f7fc7bd6 (patch)
treebb0a3c131f81f5e5734c6dd39c857dbc7e458a99 /ctdb/server/ctdb_call.c
parentd8fc36781ca8a3ddcb9c7893dc21640e3636485b (diff)
downloadsamba-054d8727edd3b0a1d328a9599e7fe392f7fc7bd6.tar.gz
ctdbd: Fix updating of hot keys in database statistics
Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit fde4b4db5a57f75c5efa5647c309f33e0d5a68f3)
Diffstat (limited to 'ctdb/server/ctdb_call.c')
-rw-r--r--ctdb/server/ctdb_call.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/ctdb/server/ctdb_call.c b/ctdb/server/ctdb_call.c
index aa69f93d6c8..6d144efd611 100644
--- a/ctdb/server/ctdb_call.c
+++ b/ctdb/server/ctdb_call.c
@@ -658,7 +658,7 @@ ctdb_defer_pinned_down_request(struct ctdb_context *ctdb, struct ctdb_db_context
static void
ctdb_update_db_stat_hot_keys(struct ctdb_db_context *ctdb_db, TDB_DATA key, int hopcount)
{
- int i;
+ int i, id;
/* smallest value is always at index 0 */
if (hopcount <= ctdb_db->statistics.hot_keys[0].count) {
@@ -681,16 +681,22 @@ ctdb_update_db_stat_hot_keys(struct ctdb_db_context *ctdb_db, TDB_DATA key, int
goto sort_keys;
}
- if (ctdb_db->statistics.hot_keys[0].key.dptr != NULL) {
- talloc_free(ctdb_db->statistics.hot_keys[0].key.dptr);
+ if (ctdb_db->statistics.num_hot_keys < MAX_HOT_KEYS) {
+ id = ctdb_db->statistics.num_hot_keys;
+ ctdb_db->statistics.num_hot_keys++;
+ } else {
+ id = 0;
}
- ctdb_db->statistics.hot_keys[0].key.dsize = key.dsize;
- ctdb_db->statistics.hot_keys[0].key.dptr = talloc_memdup(ctdb_db, key.dptr, key.dsize);
- ctdb_db->statistics.hot_keys[0].count = hopcount;
+ if (ctdb_db->statistics.hot_keys[id].key.dptr != NULL) {
+ talloc_free(ctdb_db->statistics.hot_keys[id].key.dptr);
+ }
+ ctdb_db->statistics.hot_keys[id].key.dsize = key.dsize;
+ ctdb_db->statistics.hot_keys[id].key.dptr = talloc_memdup(ctdb_db, key.dptr, key.dsize);
+ ctdb_db->statistics.hot_keys[id].count = hopcount;
sort_keys:
- for (i = 2; i < MAX_HOT_KEYS; i++) {
+ for (i = 1; i < MAX_HOT_KEYS; i++) {
if (ctdb_db->statistics.hot_keys[i].count < ctdb_db->statistics.hot_keys[0].count) {
hopcount = ctdb_db->statistics.hot_keys[i].count;
ctdb_db->statistics.hot_keys[i].count = ctdb_db->statistics.hot_keys[0].count;