#include "swarmkv/swarmkv.h" #include "test_utils.h" #include "log.h" #include #include #include #include #include #include #include #define PERF_TEST_EXEC_TO_MS 10000 void set_counter(struct cmd_exec_arg *exec_arg, void *cb_arg) { unsigned long long *counter=(unsigned long long *)cb_arg; if(exec_arg->success) (*counter)++; return; } void *blocking_call_thread(void *thread_arg) { struct swarmkv *db=(struct swarmkv *)thread_arg; size_t n_key=1024*60, i=0; char key[256]={0}, value[256]={0}; uuid_t uuid; char uuid_str[36]; int *success=ALLOC(int, 1); uuid_generate(uuid); uuid_unparse_lower(uuid, uuid_str); struct cmd_exec_arg *arg=NULL; unsigned long long set_success_counter=0, get_success_counter=0, del_success_counter=0; arg=cmd_exec_arg_new(); for(i=0; iprint_reply_on_fail=1; swarmkv_tconsume(db, key, strlen(key), tokens, cmd_exec_generic_callback, arg); ret=cmd_exec_arg_wait(arg, PERF_TEST_EXEC_TO_MS); cmd_exec_arg_clear(arg); if(ret==1) got_token_cnt++; else printf("tconsume %s failed\n", key); round++; } cmd_exec_arg_free(arg); int *success=ALLOC(int, 1); EXPECT_EQ(got_token_cnt, round); if(got_token_cnt==round) *success=1; else *success=0; return success; } TEST(Performance, Sync) { size_t NODE_NUMBER=2; size_t CALL_THREAD_PER_NODE=2; size_t WORKER_THREAD_NUMBER=1; struct swarmkv *db[NODE_NUMBER]; char *err=NULL; const char *log_path="./swarmkv-sync.log"; unsigned int p2p_port_start=9310, health_port_start=10310; char node_list_str[1024]={0}; for(size_t i=0; itype, SWARMKV_REPLY_STATUS); if(reply->type != SWARMKV_REPLY_STATUS) { swarmkv_reply_print(reply, stdout); } swarmkv_reply_free(reply); } srand(171); g_tconsume_running_flag=1; pthread_t threads[NODE_NUMBER][CALL_THREAD_PER_NODE]; for(size_t i=0; itype, SWARMKV_REPLY_ARRAY); EXPECT_EQ(reply->n_element, NODE_NUMBER); swarmkv_reply_free(reply); for(size_t j=1; jtype, SWARMKV_REPLY_ARRAY); EXPECT_EQ(reply->n_element, NODE_NUMBER-2); swarmkv_reply_free(reply); } } for(size_t i=1; i