diff options
| author | 郑超 <[email protected]> | 2022-10-27 13:30:09 +0000 |
|---|---|---|
| committer | 郑超 <[email protected]> | 2022-10-27 13:30:09 +0000 |
| commit | 933e5ec2a6c618b51bd2f8634b296f1524867faa (patch) | |
| tree | a5f09aba4802efde22dc62720f4257790b1bd0ab /tools | |
| parent | eeed1a5f8bf6e0563c7c8ccfaded45992942b911 (diff) | |
Performance Enhancement
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | tools/swarmkv_cli.c | 6 | ||||
| -rw-r--r-- | tools/swarmkv_simple_node.cpp | 109 |
3 files changed, 115 insertions, 3 deletions
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index d0c3af2..cd6f3b2 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -7,3 +7,6 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../include/ ${CMAKE_CURRENT_SOURCE_DIR}/../deps/uthash/) add_executable(swarmkv-cli swarmkv_cli.c linenoise/linenoise.c) target_link_libraries(swarmkv-cli swarmkv-shared) + +add_executable(simple_node swarmkv_simple_node.cpp) +target_link_libraries(simple_node swarmkv-shared libjemalloc-static dl)
\ No newline at end of file diff --git a/tools/swarmkv_cli.c b/tools/swarmkv_cli.c index eacc824..78de058 100644 --- a/tools/swarmkv_cli.c +++ b/tools/swarmkv_cli.c @@ -446,7 +446,7 @@ struct swarmkv_reply *cluster_addnode_command(struct swarmkv* db, char *argv[], } else { - reply=swarmkv_reply_new_status("slot table updated, %lld slots and %lld keys were migrated to %s %u", + reply=swarmkv_reply_new_status("slot table updated, %I slots and %I keys were migrated to %s %u", actual_rebalanced_slot_num, migrated_keys, node.addr.ip_addr, node.addr.p2p_port); } @@ -1031,9 +1031,9 @@ struct swarmkv_reply *cluster_command(struct swarmkv *db, const char *line) struct swarmkv_reply *reply=cluster_command_argv(db, argc, argv); - if (argv) + if (argv){ sdsfreesplitres(argv, argc); - + } return reply; } diff --git a/tools/swarmkv_simple_node.cpp b/tools/swarmkv_simple_node.cpp new file mode 100644 index 0000000..67173b5 --- /dev/null +++ b/tools/swarmkv_simple_node.cpp @@ -0,0 +1,109 @@ +#include "swarmkv/swarmkv.h" +#include <gtest/gtest.h> +#include <string.h> +#include <pthread.h> +#include <asm/errno.h> +#include <sys/syscall.h> +#include <unistd.h> +#include <uuid/uuid.h> +#include <time.h> + +#define FOREVER for(;;) + +static void help() +{ + fprintf(stderr, "Welcome to Swarmkv Node\n"); + fprintf(stderr, + "swarmkv_simple_node <-n| -h | -p |-t> arg\n" + "Usage:\n" + " -n <Cluster Name>\n" + " -h <Local IP>\n" + " -p <P2P Port> \n" + " -t <Thread Number>\n" + " -k <Key Number\n"); + exit(1); +} + +int main(int argc, char ** argv) +{ + int ret=0; + long long i=0; + char *host; + long long key_number=0; + int worker_thread_number=1; + unsigned int p2p_port; + char cluster_name[256]; + if(argc < 3) { help();} + strncpy(cluster_name, "swarmkv-simple-node", sizeof(cluster_name)); + for (i = 1; i < argc; i++) + { + int lastarg = i==argc-1; + if (!strcmp(argv[i], "-n") && !lastarg) + { + strncpy(cluster_name, argv[++i], sizeof(cluster_name)); + } + else if (!strcmp(argv[i], "-h") && !lastarg) + { + host=argv[++i]; + } + else if (!strcmp(argv[i], "-p") && !lastarg) + { + sscanf(argv[++i], "%u", &p2p_port); + } + else if(!strcmp(argv[i], "-t") && !lastarg) + { + sscanf(argv[++i], "%u", &worker_thread_number); + } + else if(!strcmp(argv[i], "-k") && !lastarg) + { + sscanf(argv[++i], "%lld", &key_number); + } + else + { + help(); + } + } + + char *err=NULL; + + struct swarmkv_options *opts=swarmkv_options_new(); + swarmkv_options_set_p2p_port(opts, p2p_port); + swarmkv_options_set_bind_address(opts, host); + swarmkv_options_set_worker_thread_number(opts, worker_thread_number); + swarmkv_options_set_p2p_timeout_us(opts,500000); + struct swarmkv *db=swarmkv_open(opts, cluster_name, &err); + if(err) + { + printf("swarmkv_open instance failed: %s\n", err); + free(err); + err=NULL; + return -1; + } + struct timeval start, end; + gettimeofday(&start, NULL); + struct swarmkv_reply *reply=NULL; + if(key_number>0) + { + printf("Adding %lld keys:", key_number); + fflush(stdout); + } + for(i=0; i<key_number; i++) + { + reply=swarmkv_command(db, NULL, "SET scalable-key-%d scalable-value-%d", i, i); + swarmkv_reply_free(reply); + if(i%(key_number/10)==0) + { + printf(" > %lld%%", i*100/key_number); + fflush(stdout); + } + } + gettimeofday(&end, NULL); + printf("> 100%%\nUse %lld seconds, %lld cmd/s.\n", (long long) end.tv_sec-start.tv_sec, key_number/(end.tv_sec-start.tv_sec)); + FOREVER + { + sleep(1); + }; + swarmkv_close(db); + return ret; +} + |
