summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CRDT/bulk_token_bucket.c1
-rw-r--r--CRDT/crdt_base_gtest.cpp4
-rw-r--r--CRDT/crdt_tb_gtest.cpp19
-rw-r--r--CRDT/fair_token_bucket.c9
-rw-r--r--test/swarmkv_gtest.cpp10
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)