diff options
-rw-r--r-- | src/mongo/s/collection_metadata.cpp | 35 | ||||
-rw-r--r-- | src/mongo/s/metadata_loader.cpp | 4 |
2 files changed, 28 insertions, 11 deletions
diff --git a/src/mongo/s/collection_metadata.cpp b/src/mongo/s/collection_metadata.cpp index 8f1fd4162ca..e4ec828caec 100644 --- a/src/mongo/s/collection_metadata.cpp +++ b/src/mongo/s/collection_metadata.cpp @@ -108,7 +108,7 @@ namespace mongo { newShardVersion > _collVersion ? newShardVersion : this->_collVersion; metadata->fillRanges(); - dassert(metadata->isValid()); + invariant(metadata->isValid()); return metadata.release(); } @@ -162,7 +162,7 @@ namespace mongo { newShardVersion > _collVersion ? newShardVersion : this->_collVersion; metadata->fillRanges(); - dassert(metadata->isValid()); + invariant(metadata->isValid()); return metadata.release(); } @@ -204,7 +204,7 @@ namespace mongo { metadata->_shardVersion = _shardVersion; metadata->_collVersion = _collVersion; - dassert(metadata->isValid()); + invariant(metadata->isValid()); return metadata.release(); } @@ -262,7 +262,7 @@ namespace mongo { metadata->_pendingMap.insert( make_pair( pending.getMin(), pending.getMax() ) ); - dassert(metadata->isValid()); + invariant(metadata->isValid()); return metadata.release(); } @@ -353,7 +353,7 @@ namespace mongo { metadata->_shardVersion > _collVersion ? metadata->_shardVersion : _collVersion; metadata->fillRanges(); - dassert(metadata->isValid()); + invariant(metadata->isValid()); return metadata.release(); } @@ -436,7 +436,7 @@ namespace mongo { metadata->_chunksMap.insert( make_pair( minKey, maxKey ) ); - dassert(metadata->isValid()); + invariant(metadata->isValid()); return metadata.release(); } @@ -669,9 +669,26 @@ namespace mongo { } bool CollectionMetadata::isValid() const { - if ( _shardVersion > _collVersion ) return false; - if ( _collVersion.majorVersion() == 0 ) return false; - if ( _collVersion.epoch() != _shardVersion.epoch() ) return false; + if (_shardVersion > _collVersion) + return false; + if (_collVersion.majorVersion() == 0) + return false; + if (_collVersion.epoch() != _shardVersion.epoch()) + return false; + + if (_shardVersion.majorVersion() > 0) { + // Must be chunks + if (_rangesMap.size() == 0 || _chunksMap.size() == 0) + return false; + } + else { + // No chunks + if (_shardVersion.minorVersion() > 0) + return false; + if (_rangesMap.size() > 0 || _chunksMap.size() > 0) + return false; + } + return true; } diff --git a/src/mongo/s/metadata_loader.cpp b/src/mongo/s/metadata_loader.cpp index 93adeac2e3a..ad4837ecb21 100644 --- a/src/mongo/s/metadata_loader.cpp +++ b/src/mongo/s/metadata_loader.cpp @@ -223,7 +223,7 @@ namespace mongo { if ( oldMetadata->getCollVersion().hasEqualEpoch( epoch ) ) { fullReload = false; - dassert( oldMetadata->isValid() ); + invariant( oldMetadata->isValid() ); versionMap[shard] = oldMetadata->_shardVersion; metadata->_collVersion = oldMetadata->_collVersion; @@ -285,7 +285,7 @@ namespace mongo { metadata->fillRanges(); conn.done(); - dassert( metadata->isValid() ); + invariant( metadata->isValid() ); return Status::OK(); } else if ( diffsApplied == 0 ) { |