diff options
author | Martin Neupauer <martin.neupauer@mongodb.com> | 2018-01-18 12:04:01 -0500 |
---|---|---|
committer | Martin Neupauer <martin.neupauer@mongodb.com> | 2018-01-31 15:05:08 -0500 |
commit | 15a7ac9ca54f2d580e2b1d1ab01fe095be1233db (patch) | |
tree | c3628b0d5be60aa6bd911c8c351daa9606f6b060 /src/mongo/db | |
parent | 3c349c50d8d5a55fa80c1d7ae3ac6a6f6cc82b5e (diff) | |
download | mongo-15a7ac9ca54f2d580e2b1d1ab01fe095be1233db.tar.gz |
SERVER-31484 separate the operation deadline from awaitData deadline in sharded queries.
The deadline has been been already separated for non-sharded queries.
Diffstat (limited to 'src/mongo/db')
-rw-r--r-- | src/mongo/db/operation_context.cpp | 11 | ||||
-rw-r--r-- | src/mongo/db/operation_context.h | 23 | ||||
-rw-r--r-- | src/mongo/db/pipeline/document_source_lookup_change_post_image.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/pipeline/expression_context.cpp | 8 | ||||
-rw-r--r-- | src/mongo/db/s/sharding_task_executor.cpp | 6 | ||||
-rw-r--r-- | src/mongo/db/s/sharding_task_executor.h | 4 |
6 files changed, 8 insertions, 47 deletions
diff --git a/src/mongo/db/operation_context.cpp b/src/mongo/db/operation_context.cpp index 75046690728..a647d0fcbd0 100644 --- a/src/mongo/db/operation_context.cpp +++ b/src/mongo/db/operation_context.cpp @@ -101,17 +101,6 @@ Microseconds OperationContext::computeMaxTimeFromDeadline(Date_t when) { return maxTime; } -OperationContext::DeadlineStash::DeadlineStash(OperationContext* opCtx) - : _opCtx(opCtx), _originalDeadline(_opCtx->getDeadline()) { - _opCtx->_deadline = Date_t::max(); - _opCtx->_maxTime = _opCtx->computeMaxTimeFromDeadline(Date_t::max()); -} - -OperationContext::DeadlineStash::~DeadlineStash() { - _opCtx->_deadline = _originalDeadline; - _opCtx->_maxTime = _opCtx->computeMaxTimeFromDeadline(_originalDeadline); -} - void OperationContext::setDeadlineByDate(Date_t when) { setDeadlineAndMaxTime(when, computeMaxTimeFromDeadline(when)); } diff --git a/src/mongo/db/operation_context.h b/src/mongo/db/operation_context.h index 915b8060981..e0228810713 100644 --- a/src/mongo/db/operation_context.h +++ b/src/mongo/db/operation_context.h @@ -84,28 +84,6 @@ public: kFailedUnitOfWork // in a unit of work that has failed and must be aborted }; - /** - * An RAII type that will temporarily suspend any deadline on this operation. Resets the - * deadline to the previous value upon destruction. - */ - class DeadlineStash { - public: - /** - * Clears any deadline set on this operation. - */ - DeadlineStash(OperationContext* opCtx); - - /** - * Resets the deadline on '_opCtx' to the original deadline present at the time this - * DeadlineStash was constructed. - */ - ~DeadlineStash(); - - private: - OperationContext* _opCtx; - Date_t _originalDeadline; - }; - OperationContext(Client* client, unsigned int opId); virtual ~OperationContext() = default; @@ -464,7 +442,6 @@ private: _writesAreReplicated = writesAreReplicated; } - friend class DeadlineStash; friend class WriteUnitOfWork; friend class repl::UnreplicatedWritesBlock; Client* const _client; diff --git a/src/mongo/db/pipeline/document_source_lookup_change_post_image.cpp b/src/mongo/db/pipeline/document_source_lookup_change_post_image.cpp index 89af387cf42..b0141c7988f 100644 --- a/src/mongo/db/pipeline/document_source_lookup_change_post_image.cpp +++ b/src/mongo/db/pipeline/document_source_lookup_change_post_image.cpp @@ -68,9 +68,6 @@ DocumentSource::GetNextResult DocumentSourceLookupChangePostImage::getNext() { return input; } - // Temporarily remove any deadline from this operation to avoid timeout during lookup. - OperationContext::DeadlineStash deadlineStash(pExpCtx->opCtx); - MutableDocument output(input.releaseDocument()); output[kFullDocumentFieldName] = lookupPostImage(output.peek()); return output.freeze(); diff --git a/src/mongo/db/pipeline/expression_context.cpp b/src/mongo/db/pipeline/expression_context.cpp index 361542fd2db..d7098cfee77 100644 --- a/src/mongo/db/pipeline/expression_context.cpp +++ b/src/mongo/db/pipeline/expression_context.cpp @@ -84,13 +84,7 @@ void ExpressionContext::checkForInterrupt() { if (--_interruptCounter == 0) { invariant(opCtx); _interruptCounter = kInterruptCheckPeriod; - auto interruptStatus = opCtx->checkForInterruptNoAssert(); - if (interruptStatus == ErrorCodes::ExceededTimeLimit && isTailableAwaitData()) { - // Don't respect deadline expiration during the pipeline when the cursor is - // tailable and awaitdata. - return; - } - uassertStatusOK(interruptStatus); + opCtx->checkForInterrupt(); } } diff --git a/src/mongo/db/s/sharding_task_executor.cpp b/src/mongo/db/s/sharding_task_executor.cpp index c671edc56e8..5ba9ac969d1 100644 --- a/src/mongo/db/s/sharding_task_executor.cpp +++ b/src/mongo/db/s/sharding_task_executor.cpp @@ -93,8 +93,10 @@ void ShardingTaskExecutor::waitForEvent(const EventHandle& event) { _executor->waitForEvent(event); } -Status ShardingTaskExecutor::waitForEvent(OperationContext* opCtx, const EventHandle& event) { - return _executor->waitForEvent(opCtx, event); +StatusWith<stdx::cv_status> ShardingTaskExecutor::waitForEvent(OperationContext* opCtx, + const EventHandle& event, + Date_t deadline) { + return _executor->waitForEvent(opCtx, event, deadline); } StatusWith<TaskExecutor::CallbackHandle> ShardingTaskExecutor::scheduleWork( diff --git a/src/mongo/db/s/sharding_task_executor.h b/src/mongo/db/s/sharding_task_executor.h index 37ac1b73213..4c2571c684a 100644 --- a/src/mongo/db/s/sharding_task_executor.h +++ b/src/mongo/db/s/sharding_task_executor.h @@ -62,7 +62,9 @@ public: void signalEvent(const EventHandle& event) override; StatusWith<CallbackHandle> onEvent(const EventHandle& event, const CallbackFn& work) override; void waitForEvent(const EventHandle& event) override; - Status waitForEvent(OperationContext* opCtx, const EventHandle& event) override; + StatusWith<stdx::cv_status> waitForEvent(OperationContext* opCtx, + const EventHandle& event, + Date_t deadline) override; StatusWith<CallbackHandle> scheduleWork(const CallbackFn& work) override; StatusWith<CallbackHandle> scheduleWorkAt(Date_t when, const CallbackFn& work) override; StatusWith<CallbackHandle> scheduleRemoteCommand(const RemoteCommandRequest& request, |