summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/sharding_ddl_coordinator.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/s/sharding_ddl_coordinator.h')
-rw-r--r--src/mongo/db/s/sharding_ddl_coordinator.h77
1 files changed, 41 insertions, 36 deletions
diff --git a/src/mongo/db/s/sharding_ddl_coordinator.h b/src/mongo/db/s/sharding_ddl_coordinator.h
index db0827d1142..267b3161b04 100644
--- a/src/mongo/db/s/sharding_ddl_coordinator.h
+++ b/src/mongo/db/s/sharding_ddl_coordinator.h
@@ -372,6 +372,47 @@ protected:
}
}
+ /**
+ * Advances and persists the `txnNumber` to ensure causality between requests, then returns the
+ * updated operation session information (OSI).
+ */
+ OperationSessionInfo getNewSession(OperationContext* opCtx) {
+ _updateSession(opCtx);
+ return getCurrentSession();
+ }
+
+ virtual boost::optional<Status> getAbortReason() const override {
+ const auto& status = _doc.getAbortReason();
+ invariant(!status || !status->isOK(), "when persisted, status must be an error");
+ return status;
+ }
+
+ /**
+ * Persists the abort reason and throws it as an exception. This causes the coordinator to fail,
+ * and triggers the cleanup future chain since there is a the persisted reason.
+ */
+ void triggerCleanup(OperationContext* opCtx, const Status& status) {
+ LOGV2_INFO(7418502,
+ "Coordinator failed, persisting abort reason",
+ "coordinatorId"_attr = _doc.getId(),
+ "phase"_attr = serializePhase(_doc.getPhase()),
+ "reason"_attr = redact(status));
+
+ auto newDoc = [&] {
+ stdx::lock_guard lk{_docMutex};
+ return _doc;
+ }();
+
+ auto coordinatorMetadata = newDoc.getShardingDDLCoordinatorMetadata();
+ coordinatorMetadata.setAbortReason(status);
+ newDoc.setShardingDDLCoordinatorMetadata(std::move(coordinatorMetadata));
+
+ _updateStateDocument(opCtx, std::move(newDoc));
+
+ uassertStatusOK(status);
+ }
+
+private:
// lazily acquire Logical Session ID and a txn number
void _updateSession(OperationContext* opCtx) {
auto newDoc = [&] {
@@ -408,42 +449,6 @@ protected:
osi.setTxnNumber(optSession->getTxnNumber());
return osi;
}
-
- OperationSessionInfo getNewSession(OperationContext* opCtx) {
- _updateSession(opCtx);
- return getCurrentSession();
- }
-
- virtual boost::optional<Status> getAbortReason() const override {
- const auto& status = _doc.getAbortReason();
- invariant(!status || !status->isOK(), "when persisted, status must be an error");
- return status;
- }
-
- /**
- * Persists the abort reason and throws it as an exception. This causes the coordinator to fail,
- * and triggers the cleanup future chain since there is a the persisted reason.
- */
- void triggerCleanup(OperationContext* opCtx, const Status& status) {
- LOGV2_INFO(7418502,
- "Coordinator failed, persisting abort reason",
- "coordinatorId"_attr = _doc.getId(),
- "phase"_attr = serializePhase(_doc.getPhase()),
- "reason"_attr = redact(status));
-
- auto newDoc = [&] {
- stdx::lock_guard lk{_docMutex};
- return _doc;
- }();
-
- auto coordinatorMetadata = newDoc.getShardingDDLCoordinatorMetadata();
- coordinatorMetadata.setAbortReason(status);
- newDoc.setShardingDDLCoordinatorMetadata(std::move(coordinatorMetadata));
-
- _updateStateDocument(opCtx, std::move(newDoc));
-
- uassertStatusOK(status);
- }
};
#undef MONGO_LOGV2_DEFAULT_COMPONENT