diff options
| author | Zheng Chao <[email protected]> | 2023-08-28 17:54:00 +0800 |
|---|---|---|
| committer | Zheng Chao <[email protected]> | 2023-08-28 17:54:00 +0800 |
| commit | d2599b6ca99a0f66e557900f05400e906577df2a (patch) | |
| tree | d906375a6953e1f7c2135b5bf623d357ceb29f6c /src | |
| parent | 2768d7affe693557ed75de54777862c4aee7c37c (diff) | |
Bugfix: fair token bucket peturbs after configurations.
Diffstat (limited to 'src')
| -rw-r--r-- | src/swarmkv_api.c | 3 | ||||
| -rw-r--r-- | src/swarmkv_monitor.c | 3 |
2 files changed, 5 insertions, 1 deletions
diff --git a/src/swarmkv_api.c b/src/swarmkv_api.c index 81577b6..5855afb 100644 --- a/src/swarmkv_api.c +++ b/src/swarmkv_api.c @@ -375,8 +375,11 @@ struct swarmkv_reply *swarmkv_command_on_argv(struct swarmkv *db, const char *ta node_init_from_sds(&target_node, target); exec_for_local(db, cmd, &target_node, blocking_query_cb, &ctx); } + long long pending_cmds=0; + pending_cmds=swarmkv_caller_get_pending_commands(db); if(ctx.reply==NULL) { + assert(pending_cmds==1); swarmkv_caller_loop(db, SWARMKV_LOOP_NO_EXIT_ON_EMPTY, NULL); } assert(ctx.reply!=NULL); diff --git a/src/swarmkv_monitor.c b/src/swarmkv_monitor.c index 6b10e7f..95c88d7 100644 --- a/src/swarmkv_monitor.c +++ b/src/swarmkv_monitor.c @@ -371,10 +371,11 @@ enum cmd_exec_result latency_command(struct swarmkv_module *mod_monitor, const s else if(!strcasecmp(cmd->argv[1], "peer")) { struct recorder *merged_table=NULL; + //Dirty code: Reading all worker threads' peer recorder tables is not thread-safe. + //It's OK only if the worker threads are not adding new peers. recorder_table_merge(monitor->peers, monitor->nr_worker_threads, &merged_table); *reply=latency_generic(&merged_table, cmd->argc>2?cmd->argv[2]:NULL); recorder_table_free(&merged_table); - } else if(!strcasecmp(cmd->argv[1], "reset")) { |
