This is an automated email from the ASF dual-hosted git repository.

laiyingchun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pegasus.git


The following commit(s) were added to refs/heads/master by this push:
     new dbed914  fix: coredump when table name contains '_' and prometheus is 
enabled (#828)
dbed914 is described below

commit dbed9148bcba470238c11f7ae57f4a117b7c4a8b
Author: padmejin <[email protected]>
AuthorDate: Tue Oct 19 12:27:26 2021 +0800

    fix: coredump when table name contains '_' and prometheus is enabled (#828)
---
 src/reporter/pegasus_counter_reporter.cpp | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/src/reporter/pegasus_counter_reporter.cpp 
b/src/reporter/pegasus_counter_reporter.cpp
index f3a8231..507fdd1 100644
--- a/src/reporter/pegasus_counter_reporter.cpp
+++ b/src/reporter/pegasus_counter_reporter.cpp
@@ -234,22 +234,19 @@ void pegasus_counter_reporter::update()
             const dsn::perf_counters::counter_snapshot &cs) {
             std::string metrics_name = cs.name;
 
-            // prometheus metric_name don't support characters like .*()@, it 
only support ":"
-            // and "_"
-            // so change the name to make it all right
-            format_metrics_name(metrics_name);
-
-            // split metric_name like 
"collector_app_pegasus_app_stat_multi_put_qps:1_0_p999" or
-            // "collector_app_pegasus_app_stat_multi_put_qps:1_0"
+            // Splits metric_name like:
+            //   "collector*app.pegasus*[email protected]"
+            //   "collector*app.pegasus*[email protected]"
             // app[0] = "1" which is the app(app name or app id)
             // app[1] = "0" which is the partition_index
             // app[2] = "p999" or "" which represent the percent
             std::string app[3] = {"", "", ""};
             std::list<std::string> lv;
-            ::dsn::utils::split_args(metrics_name.c_str(), lv, ':');
+            ::dsn::utils::split_args(metrics_name.c_str(), lv, '@');
             if (lv.size() > 1) {
                 std::list<std::string> lv1;
-                ::dsn::utils::split_args(lv.back().c_str(), lv1, '_');
+                ::dsn::utils::split_args(lv.back().c_str(), lv1, '.');
+                dcheck_le(lv1.size(), 3);
                 int i = 0;
                 for (auto &v : lv1) {
                     app[i] = v;
@@ -268,6 +265,11 @@ void pegasus_counter_reporter::update()
 
             // create metrics that prometheus support to report data
             metrics_name = lv.front() + app[2];
+
+            // prometheus metric_name doesn't support characters like .*()@, 
it only supports ":"
+            // and "_" so change the name to make it all right.
+            format_metrics_name(metrics_name);
+
             std::map<std::string, prometheus::Family<prometheus::Gauge> 
*>::iterator it =
                 _gauge_family_map.find(metrics_name);
             if (it == _gauge_family_map.end()) {

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to