summaryrefslogtreecommitdiff
path: root/src/mongo/db
diff options
context:
space:
mode:
authorMartin Neupauer <martin.neupauer@mongodb.com>2018-01-18 12:04:01 -0500
committerMartin Neupauer <martin.neupauer@mongodb.com>2018-01-31 15:05:08 -0500
commit15a7ac9ca54f2d580e2b1d1ab01fe095be1233db (patch)
treec3628b0d5be60aa6bd911c8c351daa9606f6b060 /src/mongo/db
parent3c349c50d8d5a55fa80c1d7ae3ac6a6f6cc82b5e (diff)
downloadmongo-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.cpp11
-rw-r--r--src/mongo/db/operation_context.h23
-rw-r--r--src/mongo/db/pipeline/document_source_lookup_change_post_image.cpp3
-rw-r--r--src/mongo/db/pipeline/expression_context.cpp8
-rw-r--r--src/mongo/db/s/sharding_task_executor.cpp6
-rw-r--r--src/mongo/db/s/sharding_task_executor.h4
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,