diff options
author | Amitay Isaacs <amitay@gmail.com> | 2013-07-12 17:33:13 +1000 |
---|---|---|
committer | Amitay Isaacs <amitay@gmail.com> | 2013-07-29 16:00:46 +1000 |
commit | 054d8727edd3b0a1d328a9599e7fe392f7fc7bd6 (patch) | |
tree | bb0a3c131f81f5e5734c6dd39c857dbc7e458a99 /ctdb/server/ctdb_call.c | |
parent | d8fc36781ca8a3ddcb9c7893dc21640e3636485b (diff) | |
download | samba-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.c | 20 |
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; |