From 831edcf0a4197ff097c2ef12e92f6e4df2dcbf0c Mon Sep 17 00:00:00 2001 From: Zheng Chao Date: Wed, 7 Jun 2023 19:48:35 +0800 Subject: :bug: fix uninitialized memory in bulk token bucket --- CRDT/bulk_token_bucket.c | 1 + CRDT/crdt_base_gtest.cpp | 4 +++- CRDT/crdt_tb_gtest.cpp | 19 +++++-------------- CRDT/fair_token_bucket.c | 9 ++++++--- test/swarmkv_gtest.cpp | 10 ++++++++++ 5 files changed, 25 insertions(+), 18 deletions(-) diff --git a/CRDT/bulk_token_bucket.c b/CRDT/bulk_token_bucket.c index 679a3d1..895557c 100644 --- a/CRDT/bulk_token_bucket.c +++ b/CRDT/bulk_token_bucket.c @@ -160,6 +160,7 @@ void bulk_token_bucket_configure(struct bulk_token_bucket *btb, struct timeval n memcpy(&btb->cfg.timestamp, &now, sizeof(btb->cfg.timestamp)); g_array_resize(btb->consumed, bucket_num); btb->refilled=realloc(btb->refilled, btb->cfg.bucket_num*sizeof(struct refill_mark)); + memset(btb->refilled, 0, btb->cfg.bucket_num*sizeof(struct refill_mark)); return; } void bulk_token_bucket_info(const struct bulk_token_bucket *btb, struct timeval now, struct bulk_token_bucket_info *info) diff --git a/CRDT/crdt_base_gtest.cpp b/CRDT/crdt_base_gtest.cpp index 483d501..24aa476 100644 --- a/CRDT/crdt_base_gtest.cpp +++ b/CRDT/crdt_base_gtest.cpp @@ -1234,6 +1234,7 @@ TEST(CMSketch, I5K) } } EXPECT_NEAR(pass, n_item, n_item*(1-info.confidence)); + CM_sketch_free(cms); } static void CMS_sync(struct CM_sketch *list[], size_t n) { @@ -1777,7 +1778,8 @@ TEST(GArray, Reset) { uuid_t uuid; size_t n_replica=2; - int array_sz=1024, round=100; + int array_sz=1024; + size_t round=100; struct g_array *a[n_replica]; for(size_t i=0; igot1) - { - //printf("%lld %lld\n", got, got1); - } classes[idx].allocated_tokens+=got; classes[idx].demand_tokens+=this_demand; @@ -1089,7 +1079,7 @@ void bulk_token_bucket_test(struct btb_case *mycase) bk[i].ideal_tokens=max_tokens; } } - int sync_interval_ms=2000; + int sync_interval_ms=200; for(int i=0; iduration_s*(1000*1000/step_us); i++) { timeradd(&now, &step, &now); @@ -1185,6 +1175,7 @@ TEST(BulkTokenBucket, Merge) uuid_generate(uuid); timeradd(&now, &step, &now); btb[i]=bulk_token_bucket_new(uuid, now, CIR, CBS, 128*i); + allocated[i]=0; } int r=0; int duration_s=100, sync_interval_ms=400; @@ -1220,7 +1211,7 @@ TEST(BulkTokenBucket, RareCollision) test[i].CIR=1000*1000; test[i].CBS=1000*1000; test[i].bucket_num=512; - test[i].n_replica=1; + test[i].n_replica=2; test[i].key_num=(1<ftb->divisor) + if(divisor > ftb->divisor) { ftb->divisor=divisor; g_array_resize(ftb->sfq, ftb->divisor); @@ -132,8 +132,11 @@ long long fair_token_bucket_consume(struct fair_token_bucket *ftb, struct timeva void fair_token_bucket_info(const struct fair_token_bucket *ftb, struct timeval now, struct fair_token_bucket_info *info) { - info->active_key_number=ftb->n_active_key; - info->divisor=ftb->divisor; + for(int i=0; iactive_key_number += ST_hyperloglog_count(ftb->hll[i]); + } + info->divisor = ftb->divisor; OC_token_bucket_info(ftb->bucket, now, &info->bucket_info); return; } diff --git a/test/swarmkv_gtest.cpp b/test/swarmkv_gtest.cpp index 4213b6d..bbcd8ba 100644 --- a/test/swarmkv_gtest.cpp +++ b/test/swarmkv_gtest.cpp @@ -1395,6 +1395,10 @@ TEST_F(SwarmkvTwoNodes, TypeFairTokenBucket) exec_successful=cmd_exec_arg_wait(arg, CMD_EXEC_TIMEOUT_MS); cmd_exec_arg_clear(arg); + reply=swarmkv_command(db[1], "FTINFO %s", key); + EXPECT_NEAR(reply->elements[13]->integer, n_member, n_member/5); + swarmkv_reply_free(reply); + cmd_exec_arg_free(arg); } TEST_F(SwarmkvTwoNodes, TypeBulkTokenBucket) @@ -1449,6 +1453,11 @@ TEST_F(SwarmkvTwoNodes, TypeBulkTokenBucket) EXPECT_NEAR(reply->elements[7]->integer, n_member, n_member/5); swarmkv_reply_free(reply); + reply=swarmkv_command(db[1], "BTINFO %s user-001", key); + EXPECT_NEAR(reply->elements[7]->integer, n_member, n_member/5); + EXPECT_LE(reply->elements[9]->integer, capacity); + swarmkv_reply_free(reply); + cmd_exec_arg_expect_integer(arg, 1); swarmkv_del(db[0], key, strlen(key), generic_callback, arg); exec_successful=cmd_exec_arg_wait(arg, CMD_EXEC_TIMEOUT_MS); @@ -1460,6 +1469,7 @@ TEST_F(SwarmkvTwoNodes, TypeBulkTokenBucket) exec_successful=cmd_exec_arg_wait(arg, CMD_EXEC_TIMEOUT_MS); cmd_exec_arg_clear(arg); + cmd_exec_arg_free(arg); } TEST_F(SwarmkvTwoNodes, TypeHash) -- cgit v1.2.3