This is an automated email from the ASF dual-hosted git repository.
bennoe pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git
The following commit(s) were added to refs/heads/master by this push:
new 8cba868 Extended the glog LogSink interface to be able to log
microseconds.
8cba868 is described below
commit 8cba86825449c35733a0b4cf0d14284055c2cc30
Author: Andrei Sekretenko <[email protected]>
AuthorDate: Fri Mar 29 14:23:57 2019 +0100
Extended the glog LogSink interface to be able to log microseconds.
Extended the LogSink interface to be able to log microseconds.
This makes possible to solve a problem with modules implementing custom
LogSink which currently log 000000 instead of microseconds.
This is a backport of this patch: https://github.com/google/glog/pull/441
to glog 0.3.3
Review: https://reviews.apache.org/r/70334/
---
3rdparty/glog-0.3.3.patch | 231 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 231 insertions(+)
diff --git a/3rdparty/glog-0.3.3.patch b/3rdparty/glog-0.3.3.patch
index 8827f34..c33fea2 100644
--- a/3rdparty/glog-0.3.3.patch
+++ b/3rdparty/glog-0.3.3.patch
@@ -1568,3 +1568,234 @@ index b69eefd..18bbccf 100644
"section will not be found (even if present).", name, name_len);
// No point in even trying.
return false;
+diff --git a/src/glog/logging.h.in b/src/glog/logging.h.in
+index cdd47b8..19168b1 100644
+--- a/src/glog/logging.h.in
++++ b/src/glog/logging.h.in
+@@ -1364,6 +1364,16 @@ class GOOGLE_GLOG_DLL_DECL LogSink {
+ // Sink's logging logic (message_len is such as to exclude '\n' at the end).
+ // This method can't use LOG() or CHECK() as logging system mutex(s) are
held
+ // during this call.
++ virtual void send(LogSeverity severity, const char* full_filename,
++ const char* base_filename, int line,
++ const struct ::tm* tm_time,
++ const char* message, size_t message_len, int32 usecs) {
++ send(severity, full_filename, base_filename, line,
++ tm_time, message, message_len);
++ }
++ // This send() signature is obsolete.
++ // New implementations should define this in terms of
++ // the above send() method.
+ virtual void send(LogSeverity severity, const char* full_filename,
+ const char* base_filename, int line,
+ const struct ::tm* tm_time,
+@@ -1388,7 +1398,15 @@ class GOOGLE_GLOG_DLL_DECL LogSink {
+ // Can be useful to implement send().
+ static std::string ToString(LogSeverity severity, const char* file, int
line,
+ const struct ::tm* tm_time,
+- const char* message, size_t message_len);
++ const char* message, size_t message_len,
++ int32 usecs);
++
++ // Obsolete
++ static std::string ToString(LogSeverity severity, const char* file, int
line,
++ const struct ::tm* tm_time,
++ const char* message, size_t message_len) {
++ return ToString(severity, file, line, tm_time, message, message_len, 0);
++ }
+ };
+
+ // Add or remove a LogSink as a consumer of logging data. Thread-safe.
+diff --git a/src/logging.cc b/src/logging.cc
+index ec334a9..9d07d3c 100644
+--- a/src/logging.cc
++++ b/src/logging.cc
+@@ -304,6 +304,7 @@ struct LogMessage::LogMessageData {
+ };
+ time_t timestamp_; // Time of creation of LogMessage
+ struct ::tm tm_time_; // Time of creation of LogMessage
++ int32 usecs_; // Time of creation of LogMessage -
microseconds part
+ size_t num_prefix_chars_; // # of chars of prefix in this message
+ size_t num_chars_to_log_; // # of chars of msg to send to log
+ size_t num_chars_to_syslog_; // # of chars of msg to send to syslog
+@@ -471,7 +472,8 @@ class LogDestination {
+ int line,
+ const struct ::tm* tm_time,
+ const char* message,
+- size_t message_len);
++ size_t message_len,
++ int32 usecs);
+
+ // Wait for all registered sinks via WaitTillSent
+ // including the optional one in "data".
+@@ -738,12 +740,13 @@ inline void LogDestination::LogToSinks(LogSeverity
severity,
+ int line,
+ const struct ::tm* tm_time,
+ const char* message,
+- size_t message_len) {
++ size_t message_len,
++ int32 usecs) {
+ ReaderMutexLock l(&sink_mutex_);
+ if (sinks_) {
+ for (int i = sinks_->size() - 1; i >= 0; i--) {
+ (*sinks_)[i]->send(severity, full_filename, base_filename,
+- line, tm_time, message, message_len);
++ line, tm_time, message, message_len, usecs);
+ }
+ }
+ }
+@@ -1193,8 +1196,8 @@ void LogMessage::Init(const char* file,
+ WallTime now = WallTime_Now();
+ data_->timestamp_ = static_cast<time_t>(now);
+ localtime_r(&data_->timestamp_, &data_->tm_time_);
+- int usecs = static_cast<int>((now - data_->timestamp_) * 1000000);
+- RawLog__SetLastTime(data_->tm_time_, usecs);
++ data_->usecs_ = static_cast<int32>((now - data_->timestamp_) * 1000000);
++ RawLog__SetLastTime(data_->tm_time_, data_->usecs_);
+
+ data_->num_chars_to_log_ = 0;
+ data_->num_chars_to_syslog_ = 0;
+@@ -1214,7 +1217,7 @@ void LogMessage::Init(const char* file,
+ << setw(2) << data_->tm_time_.tm_hour << ':'
+ << setw(2) << data_->tm_time_.tm_min << ':'
+ << setw(2) << data_->tm_time_.tm_sec << "."
+- << setw(6) << usecs
++ << setw(6) << data_->usecs_
+ << ' '
+ << setfill(' ') << setw(5)
+ << static_cast<unsigned int>(GetTID()) << setfill('0')
+@@ -1351,7 +1354,8 @@ void LogMessage::SendToLog()
EXCLUSIVE_LOCKS_REQUIRED(log_mutex) {
+ data_->line_, &data_->tm_time_,
+ data_->message_text_ +
data_->num_prefix_chars_,
+ (data_->num_chars_to_log_ -
+- data_->num_prefix_chars_ - 1));
++ data_->num_prefix_chars_ - 1),
++ data_->usecs_);
+ } else {
+
+ // log this message to all log files of severity <= severity_
+@@ -1368,7 +1372,8 @@ void LogMessage::SendToLog()
EXCLUSIVE_LOCKS_REQUIRED(log_mutex) {
+ data_->line_, &data_->tm_time_,
+ data_->message_text_ +
data_->num_prefix_chars_,
+ (data_->num_chars_to_log_
+- - data_->num_prefix_chars_ - 1));
++ - data_->num_prefix_chars_ - 1),
++ data_->usecs_);
+ // NOTE: -1 removes trailing \n
+ }
+
+@@ -1467,7 +1472,8 @@ void LogMessage::SendToSink()
EXCLUSIVE_LOCKS_REQUIRED(log_mutex) {
+ data_->line_, &data_->tm_time_,
+ data_->message_text_ + data_->num_prefix_chars_,
+ (data_->num_chars_to_log_ -
+- data_->num_prefix_chars_ - 1));
++ data_->num_prefix_chars_ - 1),
++ data_->usecs_);
+ }
+ }
+
+@@ -1595,16 +1601,10 @@ void LogSink::WaitTillSent() {
+
+ string LogSink::ToString(LogSeverity severity, const char* file, int line,
+ const struct ::tm* tm_time,
+- const char* message, size_t message_len) {
++ const char* message, size_t message_len, int32
usecs) {
+ ostringstream stream(string(message, message_len));
+ stream.fill('0');
+
+- // FIXME(jrvb): Updating this to use the correct value for usecs
+- // requires changing the signature for both this method and
+- // LogSink::send(). This change needs to be done in a separate CL
+- // so subclasses of LogSink can be updated at the same time.
+- int usecs = 0;
+-
+ stream << LogSeverityNames[severity][0]
+ << setw(2) << 1+tm_time->tm_mon
+ << setw(2) << tm_time->tm_mday
+diff --git a/src/logging_unittest.cc b/src/logging_unittest.cc
+index d7e95cf..aff8408 100644
+--- a/src/logging_unittest.cc
++++ b/src/logging_unittest.cc
+@@ -479,9 +479,16 @@ class TestLogSinkImpl : public LogSink {
+ virtual void send(LogSeverity severity, const char* /* full_filename */,
+ const char* base_filename, int line,
+ const struct tm* tm_time,
+- const char* message, size_t message_len) {
++ const char* message, size_t message_len, int usecs) {
+ errors.push_back(
+- ToString(severity, base_filename, line, tm_time, message, message_len));
++ ToString(severity, base_filename, line, tm_time, message, message_len,
usecs));
++ }
++ virtual void send(LogSeverity severity, const char* full_filename,
++ const char* base_filename, int line,
++ const struct tm* tm_time,
++ const char* message, size_t message_len) {
++ send(severity, full_filename, base_filename, line,
++ tm_time, message, message_len, 0);
+ }
+ };
+
+@@ -999,15 +1006,23 @@ class TestWaitingLogSink : public LogSink {
+ virtual void send(LogSeverity severity, const char* /* full_filename */,
+ const char* base_filename, int line,
+ const struct tm* tm_time,
+- const char* message, size_t message_len) {
++ const char* message, size_t message_len, int usecs) {
+ // Push it to Writer thread if we are the original logging thread.
+ // Note: Something like ThreadLocalLogSink is a better choice
+ // to do thread-specific LogSink logic for real.
+ if (pthread_equal(tid_, pthread_self())) {
+ writer_.Buffer(ToString(severity, base_filename, line,
+- tm_time, message, message_len));
++ tm_time, message, message_len, usecs));
+ }
+ }
++
++ virtual void send(LogSeverity severity, const char* full_filename,
++ const char* base_filename, int line,
++ const struct tm* tm_time,
++ const char* message, size_t message_len) {
++ send(severity, full_filename, base_filename, line, tm_time, message,
message_len);
++ }
++
+ virtual void WaitTillSent() {
+ // Wait for Writer thread if we are the original logging thread.
+ if (pthread_equal(tid_, pthread_self())) writer_.Wait();
+diff --git a/src/windows/glog/logging.h b/src/windows/glog/logging.h
+index 1d91b12..acdd0c2 100755
+--- a/src/windows/glog/logging.h
++++ b/src/windows/glog/logging.h
+@@ -1368,6 +1368,16 @@ class GOOGLE_GLOG_DLL_DECL LogSink {
+ // Sink's logging logic (message_len is such as to exclude '\n' at the end).
+ // This method can't use LOG() or CHECK() as logging system mutex(s) are
held
+ // during this call.
++ virtual void send(LogSeverity severity, const char* full_filename,
++ const char* base_filename, int line,
++ const struct ::tm* tm_time,
++ const char* message, size_t message_len, int32 usecs) {
++ send(severity, full_filename, base_filename, line,
++ tm_time, message, message_len);
++ }
++ // This send() signature is obsolete.
++ // New implementations should define this in terms of
++ // the above send() method.
+ virtual void send(LogSeverity severity, const char* full_filename,
+ const char* base_filename, int line,
+ const struct ::tm* tm_time,
+@@ -1392,7 +1402,15 @@ class GOOGLE_GLOG_DLL_DECL LogSink {
+ // Can be useful to implement send().
+ static std::string ToString(LogSeverity severity, const char* file, int
line,
+ const struct ::tm* tm_time,
+- const char* message, size_t message_len);
++ const char* message, size_t message_len,
++ int32 usecs);
++
++ // Obsolete
++ static std::string ToString(LogSeverity severity, const char* file, int
line,
++ const struct ::tm* tm_time,
++ const char* message, size_t message_len) {
++ return ToString(severity, file, line, tm_time, message, message_len, 0);
++ }
+ };
+
+ // Add or remove a LogSink as a consumer of logging data. Thread-safe.