From 04989695915fd7ee5ef85ae34ede1fd680514f9d Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 10 Mar 2016 09:50:07 -0500 Subject: [PATCH] log: do not repeat errors to stderr If we get an error writing to the log, log it only once to stderr. This avoids generating, say, 72 GB of ENOSPC errors in teuthology.log when /var/log fills up. Fixes: #14616 Signed-off-by: Sage Weil (cherry picked from commit d9ac0474b864afda58a44b9012cca4bbc6aaf509) Conflicts: src/log/Log.cc (drop m_uid and m_gid which are not used in hammer; order of do_stderr, do_syslog, do_fd conditional blocks is reversed in hammer; drop irrelevant speed optimization code from 5bfe05aebfefdff9022f0eb990805758e0edb1dc) --- src/log/Log.cc | 10 ++++++++-- src/log/Log.h | 2 ++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/log/Log.cc b/src/log/Log.cc index a3e54dfa61bf..075f91736079 100644 --- a/src/log/Log.cc +++ b/src/log/Log.cc @@ -41,6 +41,7 @@ Log::Log(SubsystemMap *s) m_flush_mutex_holder(0), m_new(), m_recent(), m_fd(-1), + m_fd_last_error(0), m_syslog_log(-2), m_syslog_crash(-2), m_stderr_log(1), m_stderr_crash(-1), m_stop(false), @@ -236,8 +237,13 @@ void Log::_flush(EntryQueue *t, EntryQueue *requeue, bool crash) r = safe_write(m_fd, s.data(), s.size()); if (r >= 0) r = write(m_fd, "\n", 1); - if (r < 0) - cerr << "problem writing to " << m_log_file << ": " << cpp_strerror(r) << std::endl; + if (r != m_fd_last_error) { + if (r < 0) + cerr << "problem writing to " << m_log_file + << ": " << cpp_strerror(r) + << std::endl; + m_fd_last_error = r; + } } if (do_syslog) { diff --git a/src/log/Log.h b/src/log/Log.h index 04cadd726f68..efa520f89e22 100644 --- a/src/log/Log.h +++ b/src/log/Log.h @@ -35,6 +35,8 @@ class Log : private Thread std::string m_log_file; int m_fd; + int m_fd_last_error; ///< last error we say writing to fd (if any) + int m_syslog_log, m_syslog_crash; int m_stderr_log, m_stderr_crash; -- 2.47.3