This is an automated email from the ASF dual-hosted git repository. wangdan pushed a commit to branch migrate-metrics-dev in repository https://gitbox.apache.org/repos/asf/incubator-pegasus.git
commit 21e85e455a95a2afa24991b33f6dee76eae561b7 Author: Dan Wang <[email protected]> AuthorDate: Tue Jun 13 11:50:10 2023 +0800 fix(new_metrics): profiled tasks are measured by the wrong metrics (#1528) https://github.com/apache/incubator-pegasus/issues/1527 Maintained in an array that includes all of the profilers, each profiler is indexed and accessed by its task code. Therefore, `TASK_CODE_INVALID`, albeit meaningless, should also be pushed into this array; otherwise, all of the profiled tasks would be indexed by the wrong task code, then also measured by the wrong metrics. --- src/runtime/profiler.cpp | 17 +++++++++++++++++ src/runtime/profiler_header.h | 1 + 2 files changed, 18 insertions(+) diff --git a/src/runtime/profiler.cpp b/src/runtime/profiler.cpp index b506d11ea..1a6a2bb7b 100644 --- a/src/runtime/profiler.cpp +++ b/src/runtime/profiler.cpp @@ -398,6 +398,13 @@ task_spec_profiler::task_spec_profiler(int code) return; } + LOG_INFO("register task into profiler: task_code={}, task_name={}, section_name={}, " + "task_type={}", + code, + _task_name, + section_name, + enum_to_string(spec->type)); + if (dsn_config_get_value_bool( section_name.c_str(), "profiler::inqueue", @@ -512,13 +519,23 @@ void profiler::install(service_spec &) task_ext_for_profiler::register_ext(); message_ext_for_profiler::register_ext(); + s_spec_profilers.clear(); + s_spec_profilers.reserve(s_task_code_max + 1); + LOG_INFO("begin to choose the tasks that will be registered into profilers among " + "all of the {} tasks", + s_task_code_max + 1); for (int code = 0; code <= s_task_code_max; ++code) { if (code == TASK_CODE_INVALID) { + // Though the task code `TASK_CODE_INVALID` is meaningless, it should still be pushed + // into the `s_spec_profilers` by default constructor of `task_spec_profiler`, since + // `task_spec_profiler` is indexed by the task code in `s_spec_profilers`. + s_spec_profilers.emplace_back(); continue; } s_spec_profilers.emplace_back(code); } + CHECK_EQ(s_spec_profilers.size(), s_task_code_max + 1); } profiler::profiler(const char *name) : toollet(name) {} diff --git a/src/runtime/profiler_header.h b/src/runtime/profiler_header.h index a32935804..2507503ec 100644 --- a/src/runtime/profiler_header.h +++ b/src/runtime/profiler_header.h @@ -40,6 +40,7 @@ struct task_spec_profiler bool is_profile; std::unique_ptr<std::atomic<int64_t>[]> call_counts; + task_spec_profiler() = default; task_spec_profiler(int code); const metric_entity_ptr &profiler_metric_entity() const; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
