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
The following commit(s) were added to refs/heads/migrate-metrics-dev by this
push:
new ec7952d2d fix(new_metrics): profiled tasks are measured by the wrong
metrics (#1528)
ec7952d2d is described below
commit ec7952d2de857a3ef9d4f000f8dde715053c9943
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]