summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGreg Studer <greg@10gen.com>2014-11-18 12:54:36 -0500
committerGreg Studer <greg@10gen.com>2014-11-18 15:30:58 -0500
commit813a2908ed3f35e1e395179983e0f09b0fee8fe5 (patch)
tree8a2954e9c10f9511ee1cd3e9f6756331814257fe /src
parentcf589f12e49136cfaa694a3f0eb61bca6fe987e7 (diff)
downloadmongo-813a2908ed3f35e1e395179983e0f09b0fee8fe5.tar.gz
SERVER-16223 invariant not dassert on metadata reload sanity checks
Diffstat (limited to 'src')
-rw-r--r--src/mongo/s/collection_metadata.cpp35
-rw-r--r--src/mongo/s/metadata_loader.cpp4
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 ) {