diff options
author | Greg Studer <greg@10gen.com> | 2014-11-18 12:54:36 -0500 |
---|---|---|
committer | Greg Studer <greg@10gen.com> | 2014-11-18 15:30:58 -0500 |
commit | 813a2908ed3f35e1e395179983e0f09b0fee8fe5 (patch) | |
tree | 8a2954e9c10f9511ee1cd3e9f6756331814257fe /src/mongo/s/collection_metadata.cpp | |
parent | cf589f12e49136cfaa694a3f0eb61bca6fe987e7 (diff) | |
download | mongo-813a2908ed3f35e1e395179983e0f09b0fee8fe5.tar.gz |
SERVER-16223 invariant not dassert on metadata reload sanity checks
Diffstat (limited to 'src/mongo/s/collection_metadata.cpp')
-rw-r--r-- | src/mongo/s/collection_metadata.cpp | 35 |
1 files changed, 26 insertions, 9 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; } |