summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Russell <gabriel.russell@mongodb.com>2017-01-25 11:48:32 -0500
committerAndrew Morrow <acm@mongodb.com>2017-04-09 14:56:55 -0400
commitc7d6b5a70cef52b2b3a2a6830130376236cb4b9b (patch)
tree836bf28ced6f80abf3a02db6891c2f9d159dc09f
parent9a2d97742f34b54a35360b8f711d0b1e3e547202 (diff)
downloadmongo-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.cpp11
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;