diff options
Diffstat (limited to 'src/mongo/db/s/collection_sharding_runtime.cpp')
-rw-r--r-- | src/mongo/db/s/collection_sharding_runtime.cpp | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/mongo/db/s/collection_sharding_runtime.cpp b/src/mongo/db/s/collection_sharding_runtime.cpp index c5c264af4c7..0e95190e915 100644 --- a/src/mongo/db/s/collection_sharding_runtime.cpp +++ b/src/mongo/db/s/collection_sharding_runtime.cpp @@ -112,11 +112,22 @@ CollectionShardingRuntime* CollectionShardingRuntime::get_UNSAFE(ServiceContext* ScopedCollectionFilter CollectionShardingRuntime::getOwnershipFilter( OperationContext* opCtx, OrphanCleanupPolicy orphanCleanupPolicy) { const auto optReceivedShardVersion = getOperationReceivedVersion(opCtx, _nss); - invariant(!optReceivedShardVersion || !ChunkVersion::isIgnoredVersion(*optReceivedShardVersion), - "getOwnershipFilter called by operation that doesn't have a valid shard version"); + // TODO (SERVER-52764): No operations should be calling getOwnershipFilter without a shard + // version + // + // invariant(optReceivedShardVersion, + // "getOwnershipFilter called by operation that doesn't specify shard version"); + if (!optReceivedShardVersion) + return {kUnshardedCollection}; + + auto metadata = _getMetadataWithVersionCheckAt( + opCtx, repl::ReadConcernArgs::get(opCtx).getArgsAtClusterTime()); + invariant(!ChunkVersion::isIgnoredVersion(*optReceivedShardVersion) || + !metadata->get().allowMigrations() || !metadata->get().isSharded(), + "For sharded collections getOwnershipFilter cannot be relied on without a valid " + "shard version"); - return _getMetadataWithVersionCheckAt(opCtx, - repl::ReadConcernArgs::get(opCtx).getArgsAtClusterTime()); + return {std::move(metadata)}; } ScopedCollectionDescription CollectionShardingRuntime::getCollectionDescription( @@ -335,10 +346,8 @@ CollectionShardingRuntime::_getMetadataWithVersionCheckAt( !criticalSectionSignal); } - if (ChunkVersion::isIgnoredVersion(receivedShardVersion)) - return kUnshardedCollection; - - if (receivedShardVersion.isWriteCompatibleWith(wantedShardVersion)) + if (wantedShardVersion.isWriteCompatibleWith(receivedShardVersion) || + ChunkVersion::isIgnoredVersion(receivedShardVersion)) return optCurrentMetadata; StaleConfigInfo sci( |