summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEliot Horowitz <eliot@10gen.com>2015-03-13 08:48:48 -0400
committerRamon Fernandez <ramon.fernandez@mongodb.com>2015-03-25 18:33:02 -0400
commitd9a3c65f642ce90b1cf6f725786654998676cd20 (patch)
tree83c7dc44a85150887f983de1f7030037c87153fe
parent852ce65df2b6e6e9c6890bd8be797a8af41533d1 (diff)
downloadmongo-d9a3c65f642ce90b1cf6f725786654998676cd20.tar.gz
SERVER-8188: make cursor timeout configurable on server
(cherry picked from commit 4d7b131c5454bf56fd494b1a3537eeb5e221a027)
-rw-r--r--src/mongo/bson/bsonelement.cpp7
-rw-r--r--src/mongo/db/clientcursor.cpp5
-rw-r--r--src/mongo/s/cursors.cpp7
3 files changed, 17 insertions, 2 deletions
diff --git a/src/mongo/bson/bsonelement.cpp b/src/mongo/bson/bsonelement.cpp
index 0502038e668..ae27fbd2eef 100644
--- a/src/mongo/bson/bsonelement.cpp
+++ b/src/mongo/bson/bsonelement.cpp
@@ -747,6 +747,13 @@ namespace mongo {
return true;
}
+ template<> bool BSONElement::coerce<long long>( long long* out ) const {
+ if ( !isNumber() )
+ return false;
+ *out = numberLong();
+ return true;
+ }
+
template<> bool BSONElement::coerce<double>( double* out ) const {
if ( !isNumber() )
return false;
diff --git a/src/mongo/db/clientcursor.cpp b/src/mongo/db/clientcursor.cpp
index 370bbf40683..41881d96fef 100644
--- a/src/mongo/db/clientcursor.cpp
+++ b/src/mongo/db/clientcursor.cpp
@@ -48,6 +48,7 @@
#include "mongo/db/jsobj.h"
#include "mongo/db/operation_context_impl.h"
#include "mongo/db/repl/replication_coordinator_global.h"
+#include "mongo/db/server_parameters.h"
#include "mongo/util/exit.h"
namespace mongo {
@@ -69,6 +70,8 @@ namespace mongo {
static ServerStatusMetricField<Counter64> dCursorStatusTimedout( "cursor.timedOut",
&cursorStatsTimedOut );
+ MONGO_EXPORT_SERVER_PARAMETER(cursorTimeoutMillis, int, 10 * 60 * 1000 /* 10 minutes */);
+
long long ClientCursor::totalOpen() {
return cursorStatsOpen.get();
}
@@ -171,7 +174,7 @@ namespace mongo {
if (_isNoTimeout || _isPinned) {
return false;
}
- return _idleAgeMillis > 600000;
+ return _idleAgeMillis > cursorTimeoutMillis;
}
void ClientCursor::setIdleTime( int millis ) {
diff --git a/src/mongo/s/cursors.cpp b/src/mongo/s/cursors.cpp
index 4a74d05ac4d..76118df1838 100644
--- a/src/mongo/s/cursors.cpp
+++ b/src/mongo/s/cursors.cpp
@@ -48,6 +48,7 @@
#include "mongo/db/commands.h"
#include "mongo/db/jsobj.h"
#include "mongo/db/max_time.h"
+#include "mongo/db/server_parameters.h"
#include "mongo/util/concurrency/task.h"
#include "mongo/util/log.h"
#include "mongo/util/net/listen.h"
@@ -230,7 +231,11 @@ namespace mongo {
// ---- CursorCache -----
- long long CursorCache::TIMEOUT = 600000;
+ long long CursorCache::TIMEOUT = 10 * 60 * 1000 /* 10 minutes */;
+ ExportedServerParameter<long long> cursorCacheTimeoutConfig(ServerParameterSet::getGlobal(),
+ "cursorTimeoutMillis",
+ &CursorCache::TIMEOUT,
+ true, true);
unsigned getCCRandomSeed() {
scoped_ptr<SecureRandom> sr( SecureRandom::create() );