void OpObserverShardingImpl::shardObserveDeleteOp(OperationContext* opCtx, const NamespaceString nss, const BSONObj& documentKey, const repl::OpTime& opTime, const repl::OpTime& preImageOpTime, const bool inMultiDocumentTransaction) { auto& isMigrating = getIsMigrating(opCtx); auto* const css = CollectionShardingRuntime::get(opCtx, nss); css->checkShardVersionOrThrow(opCtx); auto msm = MigrationSourceManager::get(css); if (msm && isMigrating) { msm->getCloner()->onDeleteOp(opCtx, documentKey, opTime, preImageOpTime); } if (inMultiDocumentTransaction && repl::ReadConcernArgs::get(opCtx).getArgsAtClusterTime()) { assertIntersectingChunkHasNotMoved(opCtx, css, documentKey); } }
void OpObserverShardingImpl::shardObserveDeleteOp(OperationContext* opCtx, const NamespaceString nss, const BSONObj& documentKey, const repl::OpTime& opTime, const repl::OpTime& preImageOpTime, const bool inMultiDocumentTransaction) { auto* const csr = CollectionShardingRuntime::get(opCtx, nss); csr->checkShardVersionOrThrow(opCtx); if (inMultiDocumentTransaction) { assertIntersectingChunkHasNotMoved(opCtx, csr, documentKey); return; } auto csrLock = CollectionShardingRuntime::CSRLock::lock(opCtx, csr); auto msm = MigrationSourceManager::get(csr, csrLock); if (msm && getIsMigrating(opCtx)) { msm->getCloner()->onDeleteOp(opCtx, documentKey, opTime, preImageOpTime); } }
void OpObserverShardingImpl::shardObserveAboutToDelete(OperationContext* opCtx, NamespaceString const& nss, BSONObj const& docToDelete) { getIsMigrating(opCtx) = isMigrating(opCtx, nss, docToDelete); }