summaryrefslogtreecommitdiff
path: root/src/cells/heavy_keeper.c
diff options
context:
space:
mode:
authorchenzizhan <[email protected]>2024-10-14 11:27:41 +0800
committerchenzizhan <[email protected]>2024-10-14 11:27:41 +0800
commit652bccee18d8555232dc1679cfbe7bf677181c77 (patch)
tree1d3c795060c5d697e281dbfd1cf2b455d420e2d8 /src/cells/heavy_keeper.c
parent2d9b9cda59297fa80889c875b909881d25709045 (diff)
Performance: Cache cell for repeatedly adding metrics to the same cell
Diffstat (limited to 'src/cells/heavy_keeper.c')
-rw-r--r--src/cells/heavy_keeper.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/cells/heavy_keeper.c b/src/cells/heavy_keeper.c
index 82fe4be..eff0c78 100644
--- a/src/cells/heavy_keeper.c
+++ b/src/cells/heavy_keeper.c
@@ -565,9 +565,6 @@ static inline uint64_t cal_hash_val_with_seed(const char *key, size_t key_len, u
return XXH3_64bits_withSeed(key, key_len, seed);
}
-/*
-1 for newly add something. 0 for not add. -1 for unexpected cases.
-*/
int heavy_keeper_add(struct heavy_keeper *heavy_keeper, const char *key, size_t key_len, long long count, void *arg) {
assert(count >= 0);
if (count == 0) {
@@ -575,11 +572,11 @@ int heavy_keeper_add(struct heavy_keeper *heavy_keeper, const char *key, size_t
const struct heap_entry *entry = sorted_set_find_entry(heavy_keeper->top_K_heap, key, key_len);
if (entry != NULL && !sorted_set_entry_dying(entry)) {
- return 0;
+ return 1;
}
sorted_set_insert(heavy_keeper->top_K_heap, key, key_len, count, arg);
- return 1;
+ return 2;
}
return 0;
}
@@ -631,19 +628,19 @@ int heavy_keeper_add(struct heavy_keeper *heavy_keeper, const char *key, size_t
if (not_in_sorted_set) {
if (sorted_set_cardinality(summary) != heavy_keeper->K) {
sorted_set_insert(summary, key, key_len, maxv, arg);
- return 1;
+ return 2;
}
long long min_value = sorted_set_get_min_score(summary);
if (maxv > min_value || min_value == NOT_FIND) {
sorted_set_insert(summary, key, key_len, maxv, arg);
- return 1;
+ return 2;
}
return 0;
} else {
if (maxv > old_cnt) {
sorted_set_incrby(summary, key, key_len, maxv - old_cnt);
}
- return 1; // no popped, but the exdata definitely exists in the sorted set
+ return 1;
}
}