diff options
| -rw-r--r-- | CRDT/bulk_token_bucket.c | 1 | ||||
| -rw-r--r-- | CRDT/crdt_base_gtest.cpp | 4 | ||||
| -rw-r--r-- | CRDT/crdt_tb_gtest.cpp | 19 | ||||
| -rw-r--r-- | CRDT/fair_token_bucket.c | 9 | ||||
| -rw-r--r-- | 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; i<n_replica; i++) { diff --git a/CRDT/crdt_tb_gtest.cpp b/CRDT/crdt_tb_gtest.cpp index 8b3b3ec..d759ead 100644 --- a/CRDT/crdt_tb_gtest.cpp +++ b/CRDT/crdt_tb_gtest.cpp @@ -759,13 +759,13 @@ double test_fair_token_bucket(struct sftb_class *classes, size_t n_class, long l step.tv_sec=0; step.tv_usec=(suseconds_t)step_us; struct fair_token_bucket *ftb[n_replica]; - for(int i=0; i<n_replica+1; i++) + for(int i=0; i<n_replica; i++) { uuid_generate(uuid); ftb[i]=fair_token_bucket_new(uuid, now, CIR, CBS, 8192); } int sync_interval_ms=40; - long long got=0, got1=0; + long long got=0; for(int i=0; i<duration_s*(1000*1000/step_us); i++) { timeradd(&now, &step, &now); @@ -781,16 +781,6 @@ double test_fair_token_bucket(struct sftb_class *classes, size_t n_class, long l classes[idx].weight, TB_CONSUME_NORMAL, this_demand); - got1=fair_token_bucket_consume(ftb[n_replica], now, - (const char*) &(classes[idx].class_id), - sizeof(classes[idx].class_id), - classes[idx].weight, - TB_CONSUME_NORMAL, - this_demand); - if(got>got1) - { - //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; i<mycase->duration_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<<i); test[i].duration_s=100; bulk_token_bucket_test(test+i); diff --git a/CRDT/fair_token_bucket.c b/CRDT/fair_token_bucket.c index d38dcec..c0024f8 100644 --- a/CRDT/fair_token_bucket.c +++ b/CRDT/fair_token_bucket.c @@ -51,7 +51,7 @@ struct fair_token_bucket *fair_token_bucket_new(uuid_t uuid, struct timeval now, } void fair_token_bucket_configure(struct fair_token_bucket *ftb, struct timeval now, long long CIR, long long CBS, long long divisor) { - if(divisor>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; i<FAIR_TB_WEIGHT_MAX; i++) + { + info->active_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) |
