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

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


The following commit(s) were added to refs/heads/master by this push:
     new 69a63f6  Revert "[trace] Introduce trace util to BE" (#3614)
69a63f6 is described below

commit 69a63f6f53b38c6f4492b0a291e5aaf60edf1f02
Author: Mingyu Chen <[email protected]>
AuthorDate: Mon May 18 13:16:39 2020 +0800

    Revert "[trace] Introduce trace util to BE" (#3614)
    
    This revert is used to correct the mess of the commit
    timeline caused by the wrong merge method.
---
 be/src/common/logconfig.cpp   |  20 ---
 be/src/util/CMakeLists.txt    |   2 -
 be/src/util/logging.h         |   4 -
 be/src/util/trace.cpp         | 266 --------------------------------------
 be/src/util/trace.h           | 291 ------------------------------------------
 be/src/util/trace_metrics.cpp |  74 -----------
 be/src/util/trace_metrics.h   |  89 -------------
 be/test/util/CMakeLists.txt   |   1 -
 be/test/util/trace_test.cpp   | 146 ---------------------
 9 files changed, 893 deletions(-)

diff --git a/be/src/common/logconfig.cpp b/be/src/common/logconfig.cpp
index 72d3b7b..bb5a183 100644
--- a/be/src/common/logconfig.cpp
+++ b/be/src/common/logconfig.cpp
@@ -15,19 +15,14 @@
 // specific language governing permissions and limitations
 // under the License.
 
-#include "util/logging.h"
-
 #include <iostream>
 #include <cerrno>
 #include <cstring>
 #include <cstdlib>
 #include <mutex>
-
 #include <glog/logging.h>
 #include <glog/vlog_is_on.h>
-
 #include "common/config.h"
-#include "gutil/stringprintf.h"
 
 namespace doris {
 
@@ -153,19 +148,4 @@ void shutdown_logging() {
     google::ShutdownGoogleLogging();
 }
 
-std::string FormatTimestampForLog(MicrosecondsInt64 micros_since_epoch) {
-    time_t secs_since_epoch = micros_since_epoch / 1000000;
-    int usecs = micros_since_epoch % 1000000;
-    struct tm tm_time;
-    localtime_r(&secs_since_epoch, &tm_time);
-
-    return StringPrintf("%02d%02d %02d:%02d:%02d.%06d",
-                        1 + tm_time.tm_mon,
-                        tm_time.tm_mday,
-                        tm_time.tm_hour,
-                        tm_time.tm_min,
-                        tm_time.tm_sec,
-                        usecs);
-}
-
 } // namespace doris
diff --git a/be/src/util/CMakeLists.txt b/be/src/util/CMakeLists.txt
index f3e952f..ce380d4 100644
--- a/be/src/util/CMakeLists.txt
+++ b/be/src/util/CMakeLists.txt
@@ -93,8 +93,6 @@ set(UTIL_FILES
   condition_variable.cpp
   thread.cpp
   threadpool.cpp
-  trace.cpp
-  trace_metrics.cpp
 )
 
 if (WITH_MYSQL)
diff --git a/be/src/util/logging.h b/be/src/util/logging.h
index ab9e006..4a97736 100644
--- a/be/src/util/logging.h
+++ b/be/src/util/logging.h
@@ -20,7 +20,6 @@
 
 #include <string>
 #include "common/logging.h"
-#include "gutil/walltime.h"
 
 namespace doris {
 
@@ -32,9 +31,6 @@ bool init_glog(const char* basename, bool 
install_signal_handler = false);
 // flushed. May only be called once.
 void shutdown_logging();
 
-// Format a timestamp in the same format as used by GLog.
-std::string FormatTimestampForLog(MicrosecondsInt64 micros_since_epoch);
-
 }
 
 #endif // DORIS_BE_SRC_COMMON_UTIL_LOGGING_H
diff --git a/be/src/util/trace.cpp b/be/src/util/trace.cpp
deleted file mode 100644
index f104f90..0000000
--- a/be/src/util/trace.cpp
+++ /dev/null
@@ -1,266 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-#include "util/trace.h"
-
-#include <cstdint>
-#include <cstring>
-#include <iomanip>
-#include <iostream>
-#include <map>
-#include <mutex>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include <glog/logging.h>
-#include <rapidjson/rapidjson.h>
-
-#include "gutil/strings/substitute.h"
-#include "gutil/walltime.h"
-#include "util/logging.h"
-//#include "util/memory/arena.h"
-
-using std::pair;
-using std::string;
-using std::vector;
-using strings::internal::SubstituteArg;
-
-namespace doris {
-
-__thread Trace* Trace::threadlocal_trace_;
-
-Trace::Trace()
-    : // arena_(new ThreadSafeArena(1024)),
-      entries_head_(nullptr),
-      entries_tail_(nullptr) {
-  // We expect small allocations from our Arena so no need to have
-  // a large arena component. Small allocations are more likely to
-  // come out of thread cache and be fast.
-  // arena_->SetMaxBufferSize(4096);
-}
-
-// Struct which precedes each entry in the trace.
-struct TraceEntry {
-  MicrosecondsInt64 timestamp_micros;
-
-  // The source file and line number which generated the trace message.
-  const char* file_path;
-  int line_number;
-
-  uint32_t message_len;
-  TraceEntry* next;
-
-  // The actual trace message follows the entry header.
-  char* message() {
-    return reinterpret_cast<char*>(this) + sizeof(*this);
-  }
-};
-
-Trace::~Trace() {
-  while (entries_head_ != nullptr) {
-    TraceEntry* tmp = entries_head_;
-    entries_head_ = entries_head_->next;
-    free(tmp);
-  }
-}
-
-// Get the part of filepath after the last path separator.
-// (Doesn't modify filepath, contrary to basename() in libgen.h.)
-// Borrowed from glog.
-static const char* const_basename(const char* filepath) {
-  const char* base = strrchr(filepath, '/');
-#ifdef OS_WINDOWS  // Look for either path separator in Windows
-  if (!base)
-    base = strrchr(filepath, '\\');
-#endif
-  return base ? (base+1) : filepath;
-}
-
-
-void Trace::SubstituteAndTrace(const char* file_path,
-                               int line_number,
-                               StringPiece format,
-                               const SubstituteArg& arg0, const SubstituteArg& 
arg1,
-                               const SubstituteArg& arg2, const SubstituteArg& 
arg3,
-                               const SubstituteArg& arg4, const SubstituteArg& 
arg5,
-                               const SubstituteArg& arg6, const SubstituteArg& 
arg7,
-                               const SubstituteArg& arg8, const SubstituteArg& 
arg9) {
-  const SubstituteArg* const args_array[] = {
-    &arg0, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, 
nullptr
-  };
-
-  int msg_len = strings::internal::SubstitutedSize(format, args_array);
-  TraceEntry* entry = NewEntry(msg_len, file_path, line_number);
-  SubstituteToBuffer(format, args_array, entry->message());
-  AddEntry(entry);
-}
-
-TraceEntry* Trace::NewEntry(int msg_len, const char* file_path, int 
line_number) {
-  int size = sizeof(TraceEntry) + msg_len;
-  //uint8_t* dst = reinterpret_cast<uint8_t*>(arena_->AllocateBytes(size));
-  uint8_t* dst = reinterpret_cast<uint8_t*>(malloc(size));
-  TraceEntry* entry = reinterpret_cast<TraceEntry*>(dst);
-  entry->timestamp_micros = GetCurrentTimeMicros();
-  entry->message_len = msg_len;
-  entry->file_path = file_path;
-  entry->line_number = line_number;
-  return entry;
-}
-
-void Trace::AddEntry(TraceEntry* entry) {
-  std::lock_guard<SpinLock> l(lock_);
-  entry->next = nullptr;
-
-  if (entries_tail_ != nullptr) {
-    entries_tail_->next = entry;
-  } else {
-    DCHECK(entries_head_ == nullptr);
-    entries_head_ = entry;
-  }
-  entries_tail_ = entry;
-}
-
-void Trace::Dump(std::ostream* out, int flags) const {
-  // Gather a copy of the list of entries under the lock. This is fast
-  // enough that we aren't worried about stalling concurrent tracers
-  // (whereas doing the logging itself while holding the lock might be
-  // too slow, if the output stream is a file, for example).
-  vector<TraceEntry*> entries;
-  vector<pair<StringPiece, scoped_refptr<Trace>>> child_traces;
-  {
-    std::lock_guard<SpinLock> l(lock_);
-    for (TraceEntry* cur = entries_head_;
-         cur != nullptr;
-         cur = cur->next) {
-      entries.push_back(cur);
-    }
-
-    child_traces = child_traces_;
-  }
-
-  // Save original flags.
-  std::ios::fmtflags save_flags(out->flags());
-
-  int64_t prev_usecs = 0;
-  for (TraceEntry* e : entries) {
-    // Log format borrowed from glog/logging.cc
-    int64_t usecs_since_prev = 0;
-    if (prev_usecs != 0) {
-      usecs_since_prev = e->timestamp_micros - prev_usecs;
-    }
-    prev_usecs = e->timestamp_micros;
-
-    using std::setw;
-    *out << FormatTimestampForLog(e->timestamp_micros);
-    *out << ' ';
-    if (flags & INCLUDE_TIME_DELTAS) {
-      out->fill(' ');
-      *out << "(+" << setw(6) << usecs_since_prev << "us) ";
-    }
-    *out << const_basename(e->file_path) << ':' << e->line_number
-         << "] ";
-    out->write(reinterpret_cast<char*>(e) + sizeof(TraceEntry),
-               e->message_len);
-    *out << std::endl;
-  }
-
-  for (const auto& entry : child_traces) {
-    const auto& t = entry.second;
-    *out << "Related trace '" << entry.first << "':" << std::endl;
-    *out << t->DumpToString(flags & (~INCLUDE_METRICS));
-  }
-
-  if (flags & INCLUDE_METRICS) {
-    *out << "Metrics: " << MetricsAsJSON();
-  }
-
-  // Restore stream flags.
-  out->flags(save_flags);
-}
-
-string Trace::DumpToString(int flags) const {
-  std::ostringstream s;
-  Dump(&s, flags);
-  return s.str();
-}
-
-string Trace::MetricsAsJSON() const {
-  // TODO(yingchun): simplily implement here, we could import JsonWriter in 
the future.
-  rapidjson::StringBuffer buf;
-  rapidjson::Writer<rapidjson::StringBuffer> jw(buf);
-  MetricsToJSON(&jw);
-  return buf.GetString();
-}
-
-void Trace::MetricsToJSON(rapidjson::Writer<rapidjson::StringBuffer>* jw) 
const {
-  // Convert into a map with 'std::string' keys instead of 'const char*'
-  // keys, so that the results are in a consistent (sorted) order.
-  std::map<string, int64_t> counters;
-  for (const auto& entry : metrics_.Get()) {
-    counters[entry.first] = entry.second;
-  }
-
-  jw->StartObject();
-  for (const auto& e : counters) {
-    jw->String(e.first.c_str());
-    jw->Int64(e.second);
-  }
-  vector<pair<StringPiece, scoped_refptr<Trace>>> child_traces;
-  {
-    std::lock_guard<SpinLock> l(lock_);
-    child_traces = child_traces_;
-  }
-
-  if (!child_traces.empty()) {
-    jw->String("child_traces");
-    jw->StartArray();
-
-    for (const auto& e : child_traces) {
-      jw->StartArray();
-      jw->String(e.first.data(), e.first.size());
-      e.second->MetricsToJSON(jw);
-      jw->EndArray();
-    }
-    jw->EndArray();
-  }
-  jw->EndObject();
-}
-
-void Trace::DumpCurrentTrace() {
-  Trace* t = CurrentTrace();
-  if (t == nullptr) {
-    LOG(INFO) << "No trace is currently active.";
-    return;
-  }
-  t->Dump(&std::cerr, true);
-}
-
-void Trace::AddChildTrace(StringPiece label, Trace* child_trace) {
-  //CHECK(arena_->RelocateStringPiece(label, &label));
-
-  std::lock_guard<SpinLock> l(lock_);
-  scoped_refptr<Trace> ptr(child_trace);
-  child_traces_.emplace_back(label, ptr);
-}
-
-std::vector<std::pair<StringPiece, scoped_refptr<Trace>>> Trace::ChildTraces() 
const {
-  std::lock_guard<SpinLock> l(lock_);
-  return child_traces_;
-}
-
-} // namespace doris
diff --git a/be/src/util/trace.h b/be/src/util/trace.h
deleted file mode 100644
index 397dbb5..0000000
--- a/be/src/util/trace.h
+++ /dev/null
@@ -1,291 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-#pragma once
-
-#include <iosfwd>
-#include <memory>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include <rapidjson/writer.h>
-
-#include "gutil/macros.h"
-#include "gutil/strings/stringpiece.h"
-#include "gutil/strings/substitute.h"
-#include "gutil/ref_counted.h"
-#include "gutil/threading/thread_collision_warner.h"
-#include "gutil/walltime.h"
-#include "util/spinlock.h"
-#include "util/trace_metrics.h"
-
-namespace doris {
-class Trace;
-}
-
-// Adopt a Trace on the current thread for the duration of the current
-// scope. The old current Trace is restored when the scope is exited.
-//
-// 't' should be a Trace* pointer.
-#define ADOPT_TRACE(t) doris::ScopedAdoptTrace _adopt_trace(t);
-
-// Issue a trace message, if tracing is enabled in the current thread.
-// See Trace::SubstituteAndTrace for arguments.
-// Example:
-//  TRACE("Acquired timestamp $0", timestamp);
-#define TRACE(format, substitutions...) \
-  do { \
-    doris::Trace* _trace = doris::Trace::CurrentTrace(); \
-    if (_trace) { \
-      _trace->SubstituteAndTrace(__FILE__, __LINE__, (format),  \
-        ##substitutions); \
-    } \
-  } while (0)
-
-// Like the above, but takes the trace pointer as an explicit argument.
-#define TRACE_TO(trace, format, substitutions...) \
-  (trace)->SubstituteAndTrace(__FILE__, __LINE__, (format), ##substitutions)
-
-// Increment a counter associated with the current trace.
-//
-// Each trace contains a map of counters which can be used to keep
-// request-specific statistics. It is significantly faster to increment
-// a trace counter compared to logging a message. Additionally, having
-// slightly more structured information makes it easier to aggregate
-// and show information back to operators.
-//
-// NOTE: the 'counter_name' MUST be a string which stays alive forever.
-// Typically, this is a compile-time constant. If something other than
-// a constant is required, use TraceMetric::InternName() in order to
-// create a string which will last for the process lifetime. Of course,
-// these strings will never be cleaned up, so it's important to use this
-// judiciously.
-//
-// If no trace is active, this does nothing and does not evaluate its
-// parameters.
-#define TRACE_COUNTER_INCREMENT(counter_name, val) \
-  do { \
-    doris::Trace* _trace = doris::Trace::CurrentTrace(); \
-    if (_trace) { \
-      _trace->metrics()->Increment(counter_name, val); \
-    } \
-  } while (0)
-
-// Increment a counter for the amount of wall time spent in the current
-// scope. For example:
-//
-//  void DoFoo() {
-//    TRACE_COUNTER_SCOPE_LATENCY_US("foo_us");
-//    ... do expensive Foo thing
-//  }
-//
-//  will result in a trace metric indicating the number of microseconds spent
-//  in invocations of DoFoo().
-#define TRACE_COUNTER_SCOPE_LATENCY_US(counter_name) \
-  ::doris::ScopedTraceLatencyCounter _scoped_latency(counter_name)
-
-// Construct a constant C string counter name which acts as a sort of
-// coarse-grained histogram for trace metrics.
-#define BUCKETED_COUNTER_NAME(prefix, duration_us)      \
-  [=]() {                                               \
-    if (duration_us >= 100 * 1000) {                    \
-      return prefix "_gt_100_ms";                       \
-    } else if (duration_us >= 10 * 1000) {              \
-      return prefix "_10-100_ms";                       \
-    } else if (duration_us >= 1000) {                   \
-      return prefix "_1-10_ms";                         \
-    } else {                                            \
-      return prefix "_lt_1ms";                          \
-    }                                                   \
-  }()
-
-namespace doris {
-
-struct TraceEntry;
-
-// A trace for a request or other process. This supports collecting trace 
entries
-// from a number of threads, and later dumping the results to a stream.
-//
-// Callers should generally not add trace messages directly using the public
-// methods of this class. Rather, the TRACE(...) macros defined above should
-// be used such that file/line numbers are automatically included, etc.
-//
-// This class is thread-safe.
-class Trace : public RefCountedThreadSafe<Trace> {
- public:
-  Trace();
-
-  // Logs a message into the trace buffer.
-  //
-  // See strings::Substitute for details.
-  //
-  // N.B.: the file path passed here is not copied, so should be a static
-  // constant (eg __FILE__).
-  void SubstituteAndTrace(const char* filepath, int line_number,
-                          StringPiece format,
-                          const strings::internal::SubstituteArg& arg0 =
-                            strings::internal::SubstituteArg::NoArg,
-                          const strings::internal::SubstituteArg& arg1 =
-                            strings::internal::SubstituteArg::NoArg,
-                          const strings::internal::SubstituteArg& arg2 =
-                            strings::internal::SubstituteArg::NoArg,
-                          const strings::internal::SubstituteArg& arg3 =
-                            strings::internal::SubstituteArg::NoArg,
-                          const strings::internal::SubstituteArg& arg4 =
-                            strings::internal::SubstituteArg::NoArg,
-                          const strings::internal::SubstituteArg& arg5 =
-                            strings::internal::SubstituteArg::NoArg,
-                          const strings::internal::SubstituteArg& arg6 =
-                            strings::internal::SubstituteArg::NoArg,
-                          const strings::internal::SubstituteArg& arg7 =
-                            strings::internal::SubstituteArg::NoArg,
-                          const strings::internal::SubstituteArg& arg8 =
-                            strings::internal::SubstituteArg::NoArg,
-                          const strings::internal::SubstituteArg& arg9 =
-                            strings::internal::SubstituteArg::NoArg);
-
-  // Dump the trace buffer to the given output stream.
-  //
-  enum {
-    NO_FLAGS = 0,
-
-    // If set, calculate and print the difference between successive trace 
messages.
-    INCLUDE_TIME_DELTAS = 1 << 0,
-    // If set, include a 'Metrics' line showing any attached trace metrics.
-    INCLUDE_METRICS =     1 << 1,
-
-    INCLUDE_ALL = INCLUDE_TIME_DELTAS | INCLUDE_METRICS
-  };
-  void Dump(std::ostream* out, int flags) const;
-
-  // Dump the trace buffer as a string.
-  std::string DumpToString(int flags = INCLUDE_ALL) const;
-
-  std::string MetricsAsJSON() const;
-
-  // Attaches the given trace which will get appended at the end when Dumping.
-  //
-  // The 'label' does not necessarily have to be unique, and is used to 
identify
-  // the child trace when dumped. The contents of the StringPiece are copied
-  // into this trace's arena.
-  void AddChildTrace(StringPiece label, Trace* child_trace);
-
-  // Return a copy of the current set of related "child" traces.
-  std::vector<std::pair<StringPiece, scoped_refptr<Trace>>> ChildTraces() 
const;
-
-  // Return the current trace attached to this thread, if there is one.
-  static Trace* CurrentTrace() {
-    return threadlocal_trace_;
-  }
-
-  // Simple function to dump the current trace to stderr, if one is
-  // available. This is meant for usage when debugging in gdb via
-  // 'call doris::Trace::DumpCurrentTrace();'.
-  static void DumpCurrentTrace();
-
-  TraceMetrics* metrics() {
-    return &metrics_;
-  }
-  const TraceMetrics& metrics() const {
-    return metrics_;
-  }
-
- private:
-  friend class ScopedAdoptTrace;
-  friend class RefCountedThreadSafe<Trace>;
-  ~Trace();
-
-  // The current trace for this thread. Threads should only set this using
-  // using ScopedAdoptTrace, which handles reference counting the underlying
-  // object.
-  static __thread Trace* threadlocal_trace_;
-
-  // Allocate a new entry from the arena, with enough space to hold a
-  // message of length 'len'.
-  TraceEntry* NewEntry(int len, const char* file_path, int line_number);
-
-  // Add the entry to the linked list of entries.
-  void AddEntry(TraceEntry* entry);
-
-  void MetricsToJSON(rapidjson::Writer<rapidjson::StringBuffer>* jw) const;
-
-  // TODO(yingchun): now we didn't import Arena, instead, we use manual 
malloc() and free().
-  // std::unique_ptr<ThreadSafeArena> arena_;
-
-  // Lock protecting the entries linked list.
-  mutable SpinLock lock_;
-  // The head of the linked list of entries (allocated inside arena_)
-  TraceEntry* entries_head_;
-  // The tail of the linked list of entries (allocated inside arena_)
-  TraceEntry* entries_tail_;
-
-  std::vector<std::pair<StringPiece, scoped_refptr<Trace>>> child_traces_;
-
-  TraceMetrics metrics_;
-
-  DISALLOW_COPY_AND_ASSIGN(Trace);
-};
-
-// Adopt a Trace object into the current thread for the duration
-// of this object.
-// This should only be used on the stack (and thus created and destroyed
-// on the same thread)
-class ScopedAdoptTrace {
- public:
-  explicit ScopedAdoptTrace(Trace* t) :
-    old_trace_(Trace::threadlocal_trace_) {
-    Trace::threadlocal_trace_ = t;
-    if (t) {
-      t->AddRef();
-    }
-    DFAKE_SCOPED_LOCK_THREAD_LOCKED(ctor_dtor_);
-  }
-
-  ~ScopedAdoptTrace() {
-    if (Trace::threadlocal_trace_) {
-      Trace::threadlocal_trace_->Release();
-    }
-    Trace::threadlocal_trace_ = old_trace_;
-    DFAKE_SCOPED_LOCK_THREAD_LOCKED(ctor_dtor_);
-  }
-
- private:
-  DFAKE_MUTEX(ctor_dtor_);
-  Trace* old_trace_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedAdoptTrace);
-};
-
-// Implementation for TRACE_COUNTER_SCOPE_LATENCY_US(...) macro above.
-class ScopedTraceLatencyCounter {
- public:
-  explicit ScopedTraceLatencyCounter(const char* counter)
-      : counter_(counter),
-        start_time_(GetCurrentTimeMicros()) {
-  }
-
-  ~ScopedTraceLatencyCounter() {
-    TRACE_COUNTER_INCREMENT(counter_, GetCurrentTimeMicros() - start_time_);
-  }
-
- private:
-  const char* const counter_;
-  MicrosecondsInt64 start_time_;
-  DISALLOW_COPY_AND_ASSIGN(ScopedTraceLatencyCounter);
-};
-
-} // namespace doris
diff --git a/be/src/util/trace_metrics.cpp b/be/src/util/trace_metrics.cpp
deleted file mode 100644
index 07be09f..0000000
--- a/be/src/util/trace_metrics.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-#include "util/trace_metrics.h"
-
-#include <algorithm>
-#include <cctype>
-#include <cstring>
-#include <map>
-#include <mutex>
-#include <ostream>
-#include <string>
-#include <utility>
-
-#include <glog/logging.h>
-#include <glog/stl_logging.h>
-
-#include "util/debug/leakcheck_disabler.h"
-
-using std::string;
-
-namespace doris {
-
-// Make glog's STL-compatible operators visible inside this namespace.
-using ::operator<<;
-
-namespace {
-
-static SpinLock g_intern_map_lock;
-typedef std::map<string, const char*> InternMap;
-static InternMap* g_intern_map;
-
-} // anonymous namespace
-
-const char* TraceMetrics::InternName(const string& name) {
-  DCHECK(std::all_of(name.begin(), name.end(), [] (char c) { return 
isprint(c); } ))
-      << "not printable: " << name;
-
-  debug::ScopedLeakCheckDisabler no_leakcheck;
-  std::lock_guard<SpinLock> l(g_intern_map_lock);
-  if (g_intern_map == nullptr) {
-    g_intern_map = new InternMap();
-  }
-
-  InternMap::iterator it = g_intern_map->find(name);
-  if (it != g_intern_map->end()) {
-    return it->second;
-  }
-
-  const char* dup = strdup(name.c_str());
-  (*g_intern_map)[name] = dup;
-
-  // We don't expect this map to grow large.
-  DCHECK_LT(g_intern_map->size(), 100) <<
-      "Too many interned strings: " << *g_intern_map;
-
-  return dup;
-}
-
-} // namespace doris
diff --git a/be/src/util/trace_metrics.h b/be/src/util/trace_metrics.h
deleted file mode 100644
index 7c3f440..0000000
--- a/be/src/util/trace_metrics.h
+++ /dev/null
@@ -1,89 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-#pragma once
-
-#include <cstdint>
-#include <map>
-#include <mutex>
-#include <string>
-
-#include "gutil/macros.h"
-#include "gutil/map-util.h"
-#include "util/spinlock.h"
-
-namespace doris {
-
-// A simple map of constant string names to integer counters.
-//
-// Typically, the TRACE_COUNTER_INCREMENT(...) macro defined in
-// trace.h is used to increment a counter within this map.
-//
-// This currently is just a thin wrapper around a spinlocked map,
-// but if it becomes noticeable in the CPU profile, various optimizations
-// are plausible.
-class TraceMetrics {
- public:
-  TraceMetrics() {}
-  ~TraceMetrics() {}
-
-  // Internalize the given string by duplicating it into a process-wide
-  // pool. If this string has already been interned, returns a pointer
-  // to a previous instance. Otherwise, copies it into the pool.
-  //
-  // The resulting strings are purposefully leaked, so this should only
-  // be used in cases where the number of unique strings that will be
-  // passed is relatively low (i.e. not user-specified).
-  //
-  // Because 'name' is exposed back to operators, it must be a printable
-  // ASCII string.
-  static const char* InternName(const std::string& name);
-
-  // Increment the given counter.
-  void Increment(const char* name, int64_t amount);
-
-  // Return a copy of the current counter map.
-  std::map<const char*, int64_t> Get() const;
-
-  // Return metric's current value.
-  //
-  // NOTE: the 'name' MUST be the same const char* which is used for
-  // insertion. This is because we do pointer-wise comparison internally.
-  int64_t GetMetric(const char* name) const;
-
- private:
-  mutable SpinLock lock_;
-  std::map<const char*, int64_t> counters_;
-
-  DISALLOW_COPY_AND_ASSIGN(TraceMetrics);
-};
-
-inline void TraceMetrics::Increment(const char* name, int64_t amount) {
-  std::lock_guard<SpinLock> l(lock_);
-  counters_[name] += amount;
-}
-
-inline std::map<const char*, int64_t> TraceMetrics::Get() const {
-  std::unique_lock<SpinLock> l(lock_);
-  return counters_;
-}
-
-inline int64_t TraceMetrics::GetMetric(const char* name) const {
-  std::lock_guard<SpinLock> l(lock_);
-  return FindWithDefault(counters_, name, 0);
-}
-
-} // namespace doris
diff --git a/be/test/util/CMakeLists.txt b/be/test/util/CMakeLists.txt
index 882921e..fd9d9db 100644
--- a/be/test/util/CMakeLists.txt
+++ b/be/test/util/CMakeLists.txt
@@ -63,4 +63,3 @@ ADD_BE_TEST(monotime_test)
 ADD_BE_TEST(scoped_cleanup_test)
 ADD_BE_TEST(thread_test)
 ADD_BE_TEST(threadpool_test)
-ADD_BE_TEST(trace_test)
diff --git a/be/test/util/trace_test.cpp b/be/test/util/trace_test.cpp
deleted file mode 100644
index 0d5a954..0000000
--- a/be/test/util/trace_test.cpp
+++ /dev/null
@@ -1,146 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-#include "util/trace.h"
-
-#include <cctype>
-#include <cstdint>
-#include <cstring>
-#include <functional>
-#include <map>
-#include <ostream>
-#include <string>
-#include <thread>
-#include <vector>
-
-#include <glog/logging.h>
-#include <gtest/gtest.h>
-#include <rapidjson/document.h>
-#include <rapidjson/rapidjson.h>
-
-#include "gutil/macros.h"
-#include "gutil/port.h"
-#include "gutil/ref_counted.h"
-#include "gutil/walltime.h"
-#include "util/countdown_latch.h"
-#include "util/monotime.h"
-#include "util/scoped_cleanup.h"
-#include "util/stopwatch.hpp"
-#include "util/thread.h"
-#include "util/trace_metrics.h"
-
-using rapidjson::Document;
-using rapidjson::Value;
-using std::string;
-using std::thread;
-using std::vector;
-
-namespace doris {
-
-class TraceTest : public ::testing::Test {
-};
-
-// Replace all digits in 's' with the character 'X'.
-static string XOutDigits(const string& s) {
-  string ret;
-  ret.reserve(s.size());
-  for (char c : s) {
-    if (isdigit(c)) {
-      ret.push_back('X');
-    } else {
-      ret.push_back(c);
-    }
-  }
-  return ret;
-}
-
-TEST_F(TraceTest, TestBasic) {
-  scoped_refptr<Trace> t(new Trace);
-  TRACE_TO(t, "hello $0, $1", "world", 12345);
-  TRACE_TO(t, "goodbye $0, $1", "cruel world", 54321);
-
-  string result = XOutDigits(t->DumpToString(Trace::NO_FLAGS));
-  ASSERT_EQ("XXXX XX:XX:XX.XXXXXX trace_test.cpp:XX] hello world, XXXXX\n"
-            "XXXX XX:XX:XX.XXXXXX trace_test.cpp:XX] goodbye cruel world, 
XXXXX\n",
-            result);
-}
-
-TEST_F(TraceTest, TestAttach) {
-  scoped_refptr<Trace> traceA(new Trace);
-  scoped_refptr<Trace> traceB(new Trace);
-  {
-    ADOPT_TRACE(traceA.get());
-    EXPECT_EQ(traceA.get(), Trace::CurrentTrace());
-    {
-      ADOPT_TRACE(traceB.get());
-      EXPECT_EQ(traceB.get(), Trace::CurrentTrace());
-      TRACE("hello from traceB");
-    }
-    EXPECT_EQ(traceA.get(), Trace::CurrentTrace());
-    TRACE("hello from traceA");
-  }
-  EXPECT_TRUE(Trace::CurrentTrace() == nullptr);
-  TRACE("this goes nowhere");
-
-  EXPECT_EQ("XXXX XX:XX:XX.XXXXXX trace_test.cpp:XX] hello from traceA\n",
-            XOutDigits(traceA->DumpToString(Trace::NO_FLAGS)));
-  EXPECT_EQ("XXXX XX:XX:XX.XXXXXX trace_test.cpp:XX] hello from traceB\n",
-            XOutDigits(traceB->DumpToString(Trace::NO_FLAGS)));
-}
-
-TEST_F(TraceTest, TestChildTrace) {
-  scoped_refptr<Trace> traceA(new Trace);
-  scoped_refptr<Trace> traceB(new Trace);
-  ADOPT_TRACE(traceA.get());
-  traceA->AddChildTrace("child", traceB.get());
-  TRACE("hello from traceA");
-  {
-    ADOPT_TRACE(traceB.get());
-    TRACE("hello from traceB");
-  }
-  EXPECT_EQ("XXXX XX:XX:XX.XXXXXX trace_test.cpp:XXX] hello from traceA\n"
-            "Related trace 'child':\n"
-            "XXXX XX:XX:XX.XXXXXX trace_test.cpp:XXX] hello from traceB\n",
-            XOutDigits(traceA->DumpToString(Trace::NO_FLAGS)));
-}
-
-TEST_F(TraceTest, TestTraceMetrics) {
-  scoped_refptr<Trace> trace(new Trace);
-  trace->metrics()->Increment("foo", 10);
-  trace->metrics()->Increment("bar", 10);
-  for (int i = 0; i < 1000; i++) {
-    trace->metrics()->Increment("baz", i);
-  }
-  EXPECT_EQ("{\"bar\":10,\"baz\":499500,\"foo\":10}",
-            trace->MetricsAsJSON());
-
-  {
-    ADOPT_TRACE(trace.get());
-    TRACE_COUNTER_SCOPE_LATENCY_US("test_scope_us");
-    SleepFor(MonoDelta::FromMilliseconds(100));
-  }
-  auto m = trace->metrics()->Get();
-  EXPECT_GE(m["test_scope_us"], 80 * 1000);
-}
-
-} // namespace doris
-
-int main(int argc, char** argv) {
-    ::testing::InitGoogleTest(&argc, argv);
-    return RUN_ALL_TESTS();
-}
-


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

Reply via email to