summaryrefslogtreecommitdiff
path: root/src/mongo/db/clientcursor.cpp
diff options
context:
space:
mode:
authorCharlie Swanson <charlie.swanson@mongodb.com>2016-11-15 16:17:19 -0500
committerCharlie Swanson <charlie.swanson@mongodb.com>2017-03-15 11:03:44 -0400
commit584ca76de9ee66b3e11987e640f5317ae40975e4 (patch)
treedb52f1717155c295437f1b4fa41a5db295183669 /src/mongo/db/clientcursor.cpp
parentf05b9437fbdc53deecf55ed3c20e36af3d733953 (diff)
downloadmongo-584ca76de9ee66b3e11987e640f5317ae40975e4.tar.gz
SERVER-22541 Manage aggregation cursors on global cursor manager.
Moves registration of aggregation cursors to the global cursor manager. This simplifies the logic for acquiring locks and resolving view namespaces within the getMore and killCursors commands.
Diffstat (limited to 'src/mongo/db/clientcursor.cpp')
-rw-r--r--src/mongo/db/clientcursor.cpp24
1 files changed, 11 insertions, 13 deletions
diff --git a/src/mongo/db/clientcursor.cpp b/src/mongo/db/clientcursor.cpp
index 708a2bc38f7..70003c2da2b 100644
--- a/src/mongo/db/clientcursor.cpp
+++ b/src/mongo/db/clientcursor.cpp
@@ -77,17 +77,16 @@ long long ClientCursor::totalOpen() {
return cursorStatsOpen.get();
}
-ClientCursor::ClientCursor(const ClientCursorParams& params,
+ClientCursor::ClientCursor(ClientCursorParams&& params,
CursorManager* cursorManager,
CursorId cursorId)
: _cursorid(cursorId),
- _ns(params.ns),
+ _nss(std::move(params.nss)),
_isReadCommitted(params.isReadCommitted),
_cursorManager(cursorManager),
- _query(params.query),
- _queryOptions(params.qopts),
- _isAggCursor(params.isAggCursor) {
- _exec.reset(params.exec);
+ _originatingCommand(params.originatingCommandObj),
+ _queryOptions(params.queryOptions),
+ _exec(std::move(params.exec)) {
init();
}
@@ -95,7 +94,7 @@ ClientCursor::ClientCursor(const Collection* collection,
CursorManager* cursorManager,
CursorId cursorId)
: _cursorid(cursorId),
- _ns(collection->ns().ns()),
+ _nss(collection->ns()),
_cursorManager(cursorManager),
_queryOptions(QueryOption_NoCursorTimeout) {
init();
@@ -106,10 +105,9 @@ void ClientCursor::init() {
cursorStatsOpen.increment();
- if (_queryOptions & QueryOption_NoCursorTimeout) {
+ if (isNoTimeout()) {
// cursors normally timeout after an inactivity period to prevent excess memory use
// setting this prevents timeout of the cursor in question.
- _isNoTimeout = true;
cursorStatsOpenNoTimeout.increment();
}
}
@@ -120,7 +118,7 @@ ClientCursor::~ClientCursor() {
invariant(!_cursorManager);
cursorStatsOpen.decrement();
- if (_isNoTimeout) {
+ if (isNoTimeout()) {
cursorStatsOpenNoTimeout.decrement();
}
}
@@ -138,7 +136,7 @@ void ClientCursor::kill() {
bool ClientCursor::shouldTimeout(int millis) {
_idleAgeMillis += millis;
- if (_isNoTimeout || _isPinned) {
+ if (isNoTimeout() || _isPinned) {
return false;
}
return _idleAgeMillis > cursorTimeoutMillis.load();
@@ -152,7 +150,7 @@ void ClientCursor::updateSlaveLocation(OperationContext* opCtx) {
if (_slaveReadTill.isNull())
return;
- verify(str::startsWith(_ns.c_str(), "local.oplog."));
+ verify(_nss.isOplog());
Client* c = opCtx->getClient();
verify(c);
@@ -221,7 +219,7 @@ void ClientCursorPin::release() {
if (!_cursor->_cursorManager) {
// The ClientCursor was killed while we had it. Therefore, it is our responsibility to
- // kill it.
+ // delete it.
deleteUnderlying();
} else {
// Unpin the cursor under the collection cursor manager lock.