diff options
author | Gabriel Russell <gabriel.russell@mongodb.com> | 2017-01-25 11:48:32 -0500 |
---|---|---|
committer | Andrew Morrow <acm@mongodb.com> | 2017-04-09 14:56:55 -0400 |
commit | c7d6b5a70cef52b2b3a2a6830130376236cb4b9b (patch) | |
tree | 836bf28ced6f80abf3a02db6891c2f9d159dc09f | |
parent | 9a2d97742f34b54a35360b8f711d0b1e3e547202 (diff) | |
download | mongo-c7d6b5a70cef52b2b3a2a6830130376236cb4b9b.tar.gz |
SERVER-16821 don't rotate logs more often then once per second
(cherry picked from commit 3cef6afea83b252613be458a0e0bf94ecea28f96)
-rw-r--r-- | src/mongo/util/signal_handlers.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/mongo/util/signal_handlers.cpp b/src/mongo/util/signal_handlers.cpp index ce01fede77f..27571b0f775 100644 --- a/src/mongo/util/signal_handlers.cpp +++ b/src/mongo/util/signal_handlers.cpp @@ -33,6 +33,7 @@ #include "mongo/util/signal_handlers.h" #include <signal.h> +#include <time.h> #if !defined(_WIN32) #include <unistd.h> @@ -163,6 +164,9 @@ sigset_t asyncSignals; void signalProcessingThread() { setThreadName("signalProcessingThread"); + time_t signalTimeSeconds = -1; + time_t lastSignalTimeSeconds = -1; + while (true) { int actualSignal = 0; int status = sigwait(&asyncSignals, &actualSignal); @@ -170,6 +174,13 @@ void signalProcessingThread() { switch (actualSignal) { case SIGUSR1: // log rotate signal + signalTimeSeconds = time(0); + if (signalTimeSeconds <= lastSignalTimeSeconds) { + // ignore multiple signals in the same or earlier second. + break; + } + + lastSignalTimeSeconds = signalTimeSeconds; fassert(16782, rotateLogs(serverGlobalParams.logRenameOnRotate)); logProcessDetailsForLogRotate(); break; |