diff options
author | Eliot Horowitz <eliot@10gen.com> | 2015-03-13 08:48:48 -0400 |
---|---|---|
committer | Ramon Fernandez <ramon.fernandez@mongodb.com> | 2015-03-25 18:33:02 -0400 |
commit | d9a3c65f642ce90b1cf6f725786654998676cd20 (patch) | |
tree | 83c7dc44a85150887f983de1f7030037c87153fe | |
parent | 852ce65df2b6e6e9c6890bd8be797a8af41533d1 (diff) | |
download | mongo-d9a3c65f642ce90b1cf6f725786654998676cd20.tar.gz |
SERVER-8188: make cursor timeout configurable on server
(cherry picked from commit 4d7b131c5454bf56fd494b1a3537eeb5e221a027)
-rw-r--r-- | src/mongo/bson/bsonelement.cpp | 7 | ||||
-rw-r--r-- | src/mongo/db/clientcursor.cpp | 5 | ||||
-rw-r--r-- | src/mongo/s/cursors.cpp | 7 |
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() ); |