summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfengweihao <[email protected]>2023-02-28 14:30:20 +0800
committerfengweihao <[email protected]>2023-02-28 14:30:20 +0800
commitb0f980a3b598009a76d9cd92b44147dc7e13e5de (patch)
treeafd23853d3a1a5c71afda37db424a6ecc075bb83
parenta338d8d40555aaee90b0d6334bfc3c64ffa32d06 (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.h2
-rw-r--r--src/inc_internal/swarmkv_common.h1
-rw-r--r--src/swarmkv.c9
-rw-r--r--src/swarmkv_api.c10
-rw-r--r--src/swarmkv_keyspace.c24
-rw-r--r--test/swarmkv_cli_test.cpp18
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;
}