diff options
| author | fengweihao <[email protected]> | 2023-02-28 14:30:20 +0800 |
|---|---|---|
| committer | fengweihao <[email protected]> | 2023-02-28 14:30:20 +0800 |
| commit | b0f980a3b598009a76d9cd92b44147dc7e13e5de (patch) | |
| tree | afd23853d3a1a5c71afda37db424a6ecc075bb83 | |
| parent | a338d8d40555aaee90b0d6334bfc3c64ffa32d06 (diff) | |
The watch slots changes function adds resp code judgmentsv3.0.2
Add a log level and path interface
| -rw-r--r-- | include/swarmkv/swarmkv.h | 2 | ||||
| -rw-r--r-- | src/inc_internal/swarmkv_common.h | 1 | ||||
| -rw-r--r-- | src/swarmkv.c | 9 | ||||
| -rw-r--r-- | src/swarmkv_api.c | 10 | ||||
| -rw-r--r-- | src/swarmkv_keyspace.c | 24 | ||||
| -rw-r--r-- | test/swarmkv_cli_test.cpp | 18 |
6 files changed, 45 insertions, 19 deletions
diff --git a/include/swarmkv/swarmkv.h b/include/swarmkv/swarmkv.h index f2e05d0..46a6897 100644 --- a/include/swarmkv/swarmkv.h +++ b/include/swarmkv/swarmkv.h @@ -54,6 +54,8 @@ int swarmkv_options_set_sync_interval_us(struct swarmkv_options *opts, unsigned int swarmkv_options_set_bind_address(struct swarmkv_options *opts, const char* ip_addr); int swarmkv_options_set_logger(struct swarmkv_options *opts, void *logger); +int swarmkv_options_set_log_level(struct swarmkv_options *opts, int loglevel); +int swarmkv_options_set_log_path(struct swarmkv_options *opts, const char *logpath); int swarmkv_options_set_consul_port(struct swarmkv_options *opts, unsigned int consul_port); int swarmkv_options_set_consul_host(struct swarmkv_options *opts, const char* ip_addr); int swarmkv_options_set_dryrun(struct swarmkv_options *opts); diff --git a/src/inc_internal/swarmkv_common.h b/src/inc_internal/swarmkv_common.h index f4d8cde..cdf6605 100644 --- a/src/inc_internal/swarmkv_common.h +++ b/src/inc_internal/swarmkv_common.h @@ -69,6 +69,7 @@ struct swarmkv_options unsigned int sync_interval_us; struct log_handle *logger; int loglevel; + const char *logpath; char cluster_announce_ip[MAX_IPV4_ADDR_LEN]; char bind_address[MAX_IPV4_ADDR_LEN]; char consul_agent_host[MAX_IPV4_ADDR_LEN]; diff --git a/src/swarmkv.c b/src/swarmkv.c index 224a2a3..97da504 100644 --- a/src/swarmkv.c +++ b/src/swarmkv.c @@ -1172,7 +1172,14 @@ struct swarmkv *swarmkv_open(struct swarmkv_options *opts, const char *db_name, else { char log_path[1024]=""; - snprintf(log_path, sizeof(log_path), "%s.log", db_name); + if(opts->logpath) + { + snprintf(log_path, sizeof(log_path), "%s/%s.log", opts->logpath, db_name); + } + else + { + snprintf(log_path, sizeof(log_path), "%s.log", db_name); + } db->logger=log_handle_create(log_path, opts->loglevel); } swarmkv_create_thread_ctx(db); diff --git a/src/swarmkv_api.c b/src/swarmkv_api.c index a6fea66..92731f7 100644 --- a/src/swarmkv_api.c +++ b/src/swarmkv_api.c @@ -95,6 +95,16 @@ int swarmkv_options_set_logger(struct swarmkv_options *opts, void *logger) opts->logger=logger; return 0; } +int swarmkv_options_set_log_level(struct swarmkv_options *opts, int loglevel) +{ + opts->loglevel=loglevel; + return 0; +} +int swarmkv_options_set_log_path(struct swarmkv_options *opts, const char *logpath) +{ + opts->logpath=logpath; + return 0; +} int swarmkv_options_set_disable_run_for_leader(struct swarmkv_options *opts) { opts->run_for_leader_flag=0; diff --git a/src/swarmkv_keyspace.c b/src/swarmkv_keyspace.c index e17a445..c03281e 100644 --- a/src/swarmkv_keyspace.c +++ b/src/swarmkv_keyspace.c @@ -807,18 +807,24 @@ void consul_watch_leadership_changes_async(struct swarmkv_keyspace* ks) } void watch_slots_changes_on_success(void *result, void *arg) { + struct evhttp_request *req=(struct evhttp_request*)result; struct swarmkv_keyspace *ks=(struct swarmkv_keyspace*)arg; cJSON *metadata_array=NULL, *metadata=NULL, *value=NULL, *modify_idx=NULL; - int i=0; - - struct key_slot *new_slots=NULL; - struct evhttp_request *req=(struct evhttp_request*)result; - struct evbuffer *buf=NULL; - buf=evhttp_request_get_input_buffer(req); - size_t len = evbuffer_get_length(buf); - sds resp_body_buff=sdsnewlen(SDS_NOINIT, len); - evbuffer_copyout(buf, resp_body_buff, len); + int i=0,resp_code=0; + resp_code=evhttp_request_get_response_code(req); + if(resp_code!=200) + { + log_info(ks->logger, MODULE_SWARMKV_KEYSPACE, "watch slot changes failed: HTTP code %d.", resp_code); + consul_watch_slots_changes_async(ks); + return; + } + struct key_slot *new_slots=NULL; + struct evbuffer *buf=NULL; + buf=evhttp_request_get_input_buffer(req); + size_t len = evbuffer_get_length(buf); + sds resp_body_buff=sdsnewlen(SDS_NOINIT, len); + evbuffer_copyout(buf, resp_body_buff, len); metadata_array=cJSON_Parse(resp_body_buff); metadata=cJSON_GetArrayItem(metadata_array, 0); diff --git a/test/swarmkv_cli_test.cpp b/test/swarmkv_cli_test.cpp index f932f56..e3f5f8e 100644 --- a/test/swarmkv_cli_test.cpp +++ b/test/swarmkv_cli_test.cpp @@ -471,34 +471,34 @@ void *swarmkv_simple_node(void *args) TEST_F(SwarmkvCliNodes, DebugAssert) { pthread_t pid=0; - size_t node_number=2; + size_t node_number=3; char result[4096]={0},target[26]={0}; struct cmd_exec_arg* reply_arg=NULL; unsigned int p2p_port_start=9210; const char *cluster_name="swarmkv-assert"; + swarmkv_cli_set_db("swarmkv-assert"); swarmkv_cli_create_cluster(cluster_name, "127.0.0.1:9210"); wait_for_sync(); - for(size_t i=node_number; i<0; i--) + for(size_t i=0; i<node_number; i++) { char *cmd_string=ALLOC(char, 128); - snprintf(cmd_string, 128, "../tools/simple_node -n %s -h 127.0.0.1:%zu -t 1 -k %d", cluster_name, p2p_port_start+i, 100); + snprintf(cmd_string, 128, "../tools/simple_node -n %s -h 127.0.0.1:%zu -a 127.0.0.1:%zu -t 1 -k %d", cluster_name, p2p_port_start+i, p2p_port_start+i, 100); pthread_create(&pid, NULL, swarmkv_simple_node, cmd_string); - sleep(1); } sleep(1); swarmkv_cli_system_cmd(NULL, result, sizeof(result), NULL, "CLUSTER SANITY heal"); swarmkv_cli_set_db("swarmkv-assert"); - for(size_t i=0; i<=node_number; i++) + for(size_t i=0; i<node_number; i++) { - swarmkv_cli_system_cmd(NULL, result, sizeof(result), NULL, "CLUSTER ADDKEYOWNER 127.0.0.1:%zu", p2p_port_start+i); + swarmkv_cli_system_cmd(NULL, result, sizeof(result), NULL, "CLUSTER ADDSLOTOWNER 127.0.0.1:%zu", p2p_port_start+i); } swarmkv_cli_system_cmd(NULL, result, sizeof(result), NULL, "CLUSTER SLOTS"); reply_arg=cmd_exec_arg_new(); - for(size_t i=0; i<=node_number; i++) + for(size_t i=0; i<node_number; i++) { swarmkv_cli_attach("127.0.0.1", p2p_port_start+i); swarmkv_cli_system_cmd(NULL, result, sizeof(result), NULL, "DEBUG ASSERT"); @@ -511,12 +511,12 @@ TEST_F(SwarmkvCliNodes, DebugAssert) if(i==node_number) break; swarmkv_cli_system_cmd(NULL, result, sizeof(result), NULL, "CLUSTER SLOTS"); snprintf(target, sizeof(target), "127.0.0.1:%zu", p2p_port_start+i); - if(!strstr(result, target)) + if(!strstr(result, target) || i==2) { break; } gettimeofday(&end, NULL); - if( end.tv_sec-start.tv_sec > 20) + if( end.tv_sec-start.tv_sec > 120) { break; } |
