diff options
author | Greg Studer <greg@10gen.com> | 2013-06-07 16:11:49 -0400 |
---|---|---|
committer | Greg Studer <greg@10gen.com> | 2013-06-17 12:23:32 -0400 |
commit | 88b7299f433e6b7bcae6df68a021fee91dc21dd3 (patch) | |
tree | cc2e42d864b79fba22c3369bd22f01f745edf0c4 /src/mongo/s/collection_metadata_test.cpp | |
parent | 432d1c9546340633dd5f0ef07259708a75f4a87e (diff) | |
download | mongo-88b7299f433e6b7bcae6df68a021fee91dc21dd3.tar.gz |
SERVER-8598 preserve semantics of exception-on-conn-failure in trySetVersion
Diffstat (limited to 'src/mongo/s/collection_metadata_test.cpp')
-rw-r--r-- | src/mongo/s/collection_metadata_test.cpp | 232 |
1 files changed, 124 insertions, 108 deletions
diff --git a/src/mongo/s/collection_metadata_test.cpp b/src/mongo/s/collection_metadata_test.cpp index 46f32d9dc6b..839feb0843b 100644 --- a/src/mongo/s/collection_metadata_test.cpp +++ b/src/mongo/s/collection_metadata_test.cpp @@ -47,6 +47,7 @@ namespace { using mongo::ChunkVersion; using mongo::MockConnRegistry; using mongo::MockRemoteDBServer; + using mongo::Status; using std::string; using std::vector; @@ -68,35 +69,39 @@ namespace { ConnectionString configLoc( CONFIG_HOST_PORT ); MetadataLoader loader( configLoc ); - _metadata.reset( loader.makeCollectionMetadata( "test.foo", "shard0000", NULL, NULL ) ); - ASSERT( _metadata.get() != NULL ); + + Status status = loader.makeCollectionMetadata( "test.foo", + "shard0000", + NULL, + &_metadata ); + ASSERT( status.isOK() ); } void tearDown() { MockConnRegistry::get()->clear(); } - CollectionMetadata* getCollMetadata() const { - return _metadata.get(); + const CollectionMetadata& getCollMetadata() const { + return _metadata; } private: scoped_ptr<MockRemoteDBServer> _dummyConfig; - scoped_ptr<CollectionMetadata> _metadata; + CollectionMetadata _metadata; }; TEST_F(NoChunkFixture, BasicBelongsToMe) { - ASSERT_FALSE( getCollMetadata()->keyBelongsToMe(BSON("a" << MINKEY)) ); - ASSERT_FALSE( getCollMetadata()->keyBelongsToMe(BSON("a" << 10)) ); + ASSERT_FALSE( getCollMetadata().keyBelongsToMe(BSON("a" << MINKEY)) ); + ASSERT_FALSE( getCollMetadata().keyBelongsToMe(BSON("a" << 10)) ); } TEST_F(NoChunkFixture, CompoudKeyBelongsToMe) { - ASSERT_FALSE( getCollMetadata()->keyBelongsToMe(BSON("a" << 1 << "b" << 2)) ); + ASSERT_FALSE( getCollMetadata().keyBelongsToMe(BSON("a" << 1 << "b" << 2)) ); } TEST_F(NoChunkFixture, getNextFromEmpty) { ChunkType nextChunk; - ASSERT( getCollMetadata()->getNextChunk( BSONObj(), &nextChunk ) ); + ASSERT( getCollMetadata().getNextChunk( BSONObj(), &nextChunk ) ); } TEST_F(NoChunkFixture, FirstChunkClonePlus) { @@ -106,9 +111,9 @@ namespace { string errMsg; const ChunkVersion version( 99, 0, OID() ); - scoped_ptr<CollectionMetadata> cloned( getCollMetadata()->clonePlus( chunk, - version, - &errMsg ) ); + scoped_ptr<CollectionMetadata> cloned( getCollMetadata().clonePlus( chunk, + version, + &errMsg ) ); ASSERT( errMsg.empty() ); ASSERT_EQUALS( 1u, cloned->getNumChunks() ); @@ -123,11 +128,11 @@ namespace { chunk.setMax( BSON("a" << 20) ); string errMsg; - scoped_ptr<CollectionMetadata> cloned( getCollMetadata()->clonePlus( chunk, - ChunkVersion( 0, - 0, - OID() ), - &errMsg ) ); + scoped_ptr<CollectionMetadata> cloned( getCollMetadata().clonePlus( chunk, + ChunkVersion( 0, + 0, + OID() ), + &errMsg ) ); ASSERT( cloned == NULL ); ASSERT_FALSE( errMsg.empty() ); @@ -165,52 +170,56 @@ namespace { ConnectionString configLoc( CONFIG_HOST_PORT ); MetadataLoader loader( configLoc ); - _metadata.reset( loader.makeCollectionMetadata( "test.foo", "shard0000", NULL, NULL ) ); - ASSERT( _metadata.get() != NULL ); + + Status status = loader.makeCollectionMetadata( "test.foo", + "shard0000", + NULL, + &_metadata ); + ASSERT( status.isOK() ); } void tearDown() { MockConnRegistry::get()->clear(); } - CollectionMetadata* getCollMetadata() const { - return _metadata.get(); + const CollectionMetadata& getCollMetadata() const { + return _metadata; } private: scoped_ptr<MockRemoteDBServer> _dummyConfig; - scoped_ptr<CollectionMetadata> _metadata; + CollectionMetadata _metadata; }; TEST_F(SingleChunkFixture, BasicBelongsToMe) { - ASSERT( getCollMetadata()->keyBelongsToMe(BSON("a" << 10)) ); - ASSERT( getCollMetadata()->keyBelongsToMe(BSON("a" << 15)) ); - ASSERT( getCollMetadata()->keyBelongsToMe(BSON("a" << 19)) ); + ASSERT( getCollMetadata().keyBelongsToMe(BSON("a" << 10)) ); + ASSERT( getCollMetadata().keyBelongsToMe(BSON("a" << 15)) ); + ASSERT( getCollMetadata().keyBelongsToMe(BSON("a" << 19)) ); } TEST_F(SingleChunkFixture, DoesntBelongsToMe) { - ASSERT_FALSE( getCollMetadata()->keyBelongsToMe(BSON("a" << 0)) ); - ASSERT_FALSE( getCollMetadata()->keyBelongsToMe(BSON("a" << 9)) ); - ASSERT_FALSE( getCollMetadata()->keyBelongsToMe(BSON("a" << 20)) ); - ASSERT_FALSE( getCollMetadata()->keyBelongsToMe(BSON("a" << 1234)) ); - ASSERT_FALSE( getCollMetadata()->keyBelongsToMe(BSON("a" << MINKEY)) ); - ASSERT_FALSE( getCollMetadata()->keyBelongsToMe(BSON("a" << MAXKEY)) ); + ASSERT_FALSE( getCollMetadata().keyBelongsToMe(BSON("a" << 0)) ); + ASSERT_FALSE( getCollMetadata().keyBelongsToMe(BSON("a" << 9)) ); + ASSERT_FALSE( getCollMetadata().keyBelongsToMe(BSON("a" << 20)) ); + ASSERT_FALSE( getCollMetadata().keyBelongsToMe(BSON("a" << 1234)) ); + ASSERT_FALSE( getCollMetadata().keyBelongsToMe(BSON("a" << MINKEY)) ); + ASSERT_FALSE( getCollMetadata().keyBelongsToMe(BSON("a" << MAXKEY)) ); } TEST_F(SingleChunkFixture, CompoudKeyBelongsToMe) { - ASSERT( getCollMetadata()->keyBelongsToMe(BSON("a" << 15 << "a" << 14)) ); + ASSERT( getCollMetadata().keyBelongsToMe(BSON("a" << 15 << "a" << 14)) ); } TEST_F(SingleChunkFixture, getNextFromEmpty) { ChunkType nextChunk; - ASSERT( getCollMetadata()->getNextChunk( BSONObj(), &nextChunk ) ); + ASSERT( getCollMetadata().getNextChunk( BSONObj(), &nextChunk ) ); ASSERT_EQUALS( 0, nextChunk.getMin().woCompare(BSON("a" << 10)) ); ASSERT_EQUALS( 0, nextChunk.getMax().woCompare(BSON("a" << 20)) ); } TEST_F(SingleChunkFixture, GetNextFromLast) { ChunkType nextChunk; - ASSERT( getCollMetadata()->getNextChunk( BSONObj(), &nextChunk ) ); + ASSERT( getCollMetadata().getNextChunk( BSONObj(), &nextChunk ) ); } TEST_F(SingleChunkFixture, LastChunkCloneMinus) { @@ -220,15 +229,15 @@ namespace { string errMsg; const ChunkVersion zeroVersion( 0, 0, OID() ); - scoped_ptr<CollectionMetadata> cloned( getCollMetadata()->cloneMinus( chunk, - zeroVersion, - &errMsg ) ); + scoped_ptr<CollectionMetadata> cloned( getCollMetadata().cloneMinus( chunk, + zeroVersion, + &errMsg ) ); ASSERT( errMsg.empty() ); ASSERT_EQUALS( 0u, cloned->getNumChunks() ); ASSERT_EQUALS( cloned->getShardVersion().toLong(), zeroVersion.toLong() ); ASSERT_EQUALS( cloned->getCollVersion().toLong(), - getCollMetadata()->getCollVersion().toLong() ); + getCollMetadata().getCollVersion().toLong() ); ASSERT_FALSE( cloned->keyBelongsToMe(BSON("a" << 15)) ); } @@ -239,9 +248,9 @@ namespace { string errMsg; ChunkVersion version( 99, 0, OID() ); - scoped_ptr<CollectionMetadata> cloned( getCollMetadata()->cloneMinus( chunk, - version, - &errMsg ) ); + scoped_ptr<CollectionMetadata> cloned( getCollMetadata().cloneMinus( chunk, + version, + &errMsg ) ); ASSERT( cloned == NULL ); ASSERT_FALSE( errMsg.empty() ); @@ -279,31 +288,35 @@ namespace { ConnectionString configLoc( CONFIG_HOST_PORT ); MetadataLoader loader( configLoc ); - _metadata.reset( loader.makeCollectionMetadata( "test.foo", "shard0000", NULL, NULL ) ); - ASSERT( _metadata.get() != NULL ); + + Status status = loader.makeCollectionMetadata( "test.foo", + "shard0000", + NULL, + &_metadata ); + ASSERT( status.isOK() ); } void tearDown() { MockConnRegistry::get()->clear(); } - CollectionMetadata* getCollMetadata() const { - return _metadata.get(); + const CollectionMetadata& getCollMetadata() const { + return _metadata; } private: scoped_ptr<MockRemoteDBServer> _dummyConfig; - scoped_ptr<CollectionMetadata> _metadata; + CollectionMetadata _metadata; }; // Note: no tests for single key belongsToMe because they are not allowed // if shard key is compound. TEST_F(SingleChunkMinMaxCompoundKeyFixture, CompoudKeyBelongsToMe) { - ASSERT( getCollMetadata()->keyBelongsToMe(BSON("a" << MINKEY << "b" << MINKEY)) ); - ASSERT_FALSE( getCollMetadata()->keyBelongsToMe(BSON("a" << MAXKEY << "b" << MAXKEY)) ); - ASSERT( getCollMetadata()->keyBelongsToMe(BSON("a" << MINKEY << "b" << 10)) ); - ASSERT( getCollMetadata()->keyBelongsToMe(BSON("a" << 10 << "b" << 20)) ); + ASSERT( getCollMetadata().keyBelongsToMe(BSON("a" << MINKEY << "b" << MINKEY)) ); + ASSERT_FALSE( getCollMetadata().keyBelongsToMe(BSON("a" << MAXKEY << "b" << MAXKEY)) ); + ASSERT( getCollMetadata().keyBelongsToMe(BSON("a" << MINKEY << "b" << 10)) ); + ASSERT( getCollMetadata().keyBelongsToMe(BSON("a" << 10 << "b" << 20)) ); } /** @@ -345,21 +358,25 @@ namespace { ConnectionString configLoc( CONFIG_HOST_PORT ); MetadataLoader loader( configLoc ); - _metadata.reset( loader.makeCollectionMetadata( "test.foo", "shard0000", NULL, NULL ) ); - ASSERT( _metadata.get() != NULL ); + + Status status = loader.makeCollectionMetadata( "test.foo", + "shard0000", + NULL, + &_metadata ); + ASSERT( status.isOK() ); } void tearDown() { MockConnRegistry::get()->clear(); } - CollectionMetadata* getCollMetadata() const { - return _metadata.get(); + const CollectionMetadata& getCollMetadata() const { + return _metadata; } private: scoped_ptr<MockRemoteDBServer> _dummyConfig; - scoped_ptr<CollectionMetadata> _metadata; + CollectionMetadata _metadata; }; TEST_F(TwoChunksWithGapCompoundKeyFixture, ClonePlusBasic) { @@ -369,12 +386,12 @@ namespace { string errMsg; ChunkVersion version( 1, 0, OID() ); - scoped_ptr<CollectionMetadata> cloned( getCollMetadata()->clonePlus( chunk, + scoped_ptr<CollectionMetadata> cloned( getCollMetadata().clonePlus( chunk, version, &errMsg ) ); ASSERT( errMsg.empty() ); - ASSERT_EQUALS( 2u, getCollMetadata()->getNumChunks() ); + ASSERT_EQUALS( 2u, getCollMetadata().getNumChunks() ); ASSERT_EQUALS( 3u, cloned->getNumChunks() ); // TODO: test maxShardVersion, maxCollVersion @@ -393,14 +410,14 @@ namespace { chunk.setMax( BSON("a" << 25 << "b" << 0) ); string errMsg; - scoped_ptr<CollectionMetadata> cloned( getCollMetadata()->clonePlus( chunk, - ChunkVersion( 1, - 0, - OID() ), - &errMsg ) ); + scoped_ptr<CollectionMetadata> cloned( getCollMetadata().clonePlus( chunk, + ChunkVersion( 1, + 0, + OID() ), + &errMsg ) ); ASSERT( cloned == NULL ); ASSERT_FALSE( errMsg.empty() ); - ASSERT_EQUALS( 2u, getCollMetadata()->getNumChunks() ); + ASSERT_EQUALS( 2u, getCollMetadata().getNumChunks() ); } TEST_F(TwoChunksWithGapCompoundKeyFixture, CloneMinusBasic) { @@ -410,12 +427,12 @@ namespace { string errMsg; ChunkVersion version( 2, 0, OID() ); - scoped_ptr<CollectionMetadata> cloned( getCollMetadata()->cloneMinus( chunk, - version, - &errMsg ) ); + scoped_ptr<CollectionMetadata> cloned( getCollMetadata().cloneMinus( chunk, + version, + &errMsg ) ); ASSERT( errMsg.empty() ); - ASSERT_EQUALS( 2u, getCollMetadata()->getNumChunks() ); + ASSERT_EQUALS( 2u, getCollMetadata().getNumChunks() ); ASSERT_EQUALS( 1u, cloned->getNumChunks() ); // TODO: test maxShardVersion, maxCollVersion @@ -433,14 +450,14 @@ namespace { chunk.setMax( BSON("a" << 28 << "b" << 0) ); string errMsg; - scoped_ptr<CollectionMetadata> cloned( getCollMetadata()->cloneMinus( chunk, - ChunkVersion( 1, - 0, - OID() ), - &errMsg ) ); + scoped_ptr<CollectionMetadata> cloned( getCollMetadata().cloneMinus( chunk, + ChunkVersion( 1, + 0, + OID() ), + &errMsg ) ); ASSERT( cloned == NULL ); ASSERT_FALSE( errMsg.empty() ); - ASSERT_EQUALS( 2u, getCollMetadata()->getNumChunks() ); + ASSERT_EQUALS( 2u, getCollMetadata().getNumChunks() ); } TEST_F(TwoChunksWithGapCompoundKeyFixture, CloneSplitBasic) { @@ -459,16 +476,16 @@ namespace { ChunkVersion version( 1, 99, OID() ); // first chunk 1|99 , second 1|100 string errMsg; - scoped_ptr<CollectionMetadata> cloned( getCollMetadata()->cloneSplit( chunk, - splitKeys, - version, - &errMsg ) ); + scoped_ptr<CollectionMetadata> cloned( getCollMetadata().cloneSplit( chunk, + splitKeys, + version, + &errMsg ) ); version.incMinor(); /* second chunk 1|100, first split point */ version.incMinor(); /* third chunk 1|101, second split point */ ASSERT_EQUALS( cloned->getShardVersion().toLong(), version.toLong() /* 1|101 */); ASSERT_EQUALS( cloned->getCollVersion().toLong(), version.toLong() ); - ASSERT_EQUALS( getCollMetadata()->getNumChunks(), 2u ); + ASSERT_EQUALS( getCollMetadata().getNumChunks(), 2u ); ASSERT_EQUALS( cloned->getNumChunks(), 4u ); ASSERT( cloned->keyBelongsToMe( min ) ); ASSERT( cloned->keyBelongsToMe( split1 ) ); @@ -485,16 +502,16 @@ namespace { splitKeys.push_back( BSON("a" << 5 << "b" << 0) ); string errMsg; - scoped_ptr<CollectionMetadata> cloned( getCollMetadata()->cloneSplit( chunk, - splitKeys, - ChunkVersion( 1, - 0, - OID() ), - &errMsg ) ); + scoped_ptr<CollectionMetadata> cloned( getCollMetadata().cloneSplit( chunk, + splitKeys, + ChunkVersion( 1, + 0, + OID() ), + &errMsg ) ); ASSERT( cloned == NULL ); ASSERT_FALSE( errMsg.empty() ); - ASSERT_EQUALS( 2u, getCollMetadata()->getNumChunks() ); + ASSERT_EQUALS( 2u, getCollMetadata().getNumChunks() ); } TEST_F(TwoChunksWithGapCompoundKeyFixture, CloneSplitBadChunkRange) { @@ -509,16 +526,16 @@ namespace { splitKeys.push_back( BSON("a" << 15 << "b" << 0) ); string errMsg; - scoped_ptr<CollectionMetadata> cloned( getCollMetadata()->cloneSplit( chunk, - splitKeys, - ChunkVersion( 1, - 0, - OID() ), - &errMsg ) ); + scoped_ptr<CollectionMetadata> cloned( getCollMetadata().cloneSplit( chunk, + splitKeys, + ChunkVersion( 1, + 0, + OID() ), + &errMsg ) ); ASSERT( cloned == NULL ); ASSERT_FALSE( errMsg.empty() ); - ASSERT_EQUALS( 2u, getCollMetadata()->getNumChunks() ); + ASSERT_EQUALS( 2u, getCollMetadata().getNumChunks() ); } /** @@ -577,55 +594,54 @@ namespace { ConnectionString configLoc( CONFIG_HOST_PORT ); MetadataLoader loader( configLoc ); - string errmsg; - _metadata.reset( loader.makeCollectionMetadata( "test.foo", + Status status = loader.makeCollectionMetadata( "test.foo", "shard0000", NULL, - &errmsg ) ); - ASSERT( _metadata.get() != NULL ); + &_metadata ); + ASSERT( status.isOK() ); } void tearDown() { MockConnRegistry::get()->clear(); } - CollectionMetadata* getCollMetadata() const { - return _metadata.get(); + const CollectionMetadata& getCollMetadata() const { + return _metadata; } private: scoped_ptr<MockRemoteDBServer> _dummyConfig; - scoped_ptr<CollectionMetadata> _metadata; + CollectionMetadata _metadata; }; TEST_F(ThreeChunkWithRangeGapFixture, ShardOwnsDoc) { - ASSERT( getCollMetadata()->keyBelongsToMe(BSON("a" << 5)) ); - ASSERT( getCollMetadata()->keyBelongsToMe(BSON("a" << 10)) ); - ASSERT( getCollMetadata()->keyBelongsToMe(BSON("a" << 30)) ); - ASSERT( getCollMetadata()->keyBelongsToMe(BSON("a" << 40)) ); + ASSERT( getCollMetadata().keyBelongsToMe(BSON("a" << 5)) ); + ASSERT( getCollMetadata().keyBelongsToMe(BSON("a" << 10)) ); + ASSERT( getCollMetadata().keyBelongsToMe(BSON("a" << 30)) ); + ASSERT( getCollMetadata().keyBelongsToMe(BSON("a" << 40)) ); } TEST_F(ThreeChunkWithRangeGapFixture, ShardDoesntOwnDoc) { - ASSERT_FALSE( getCollMetadata()->keyBelongsToMe(BSON("a" << 25)) ); - ASSERT_FALSE( getCollMetadata()->keyBelongsToMe(BSON("a" << MAXKEY)) ); + ASSERT_FALSE( getCollMetadata().keyBelongsToMe(BSON("a" << 25)) ); + ASSERT_FALSE( getCollMetadata().keyBelongsToMe(BSON("a" << MAXKEY)) ); } TEST_F(ThreeChunkWithRangeGapFixture, GetNextFromEmpty) { ChunkType nextChunk; - ASSERT_FALSE( getCollMetadata()->getNextChunk( BSONObj(), &nextChunk ) ); + ASSERT_FALSE( getCollMetadata().getNextChunk( BSONObj(), &nextChunk ) ); ASSERT_EQUALS( 0, nextChunk.getMin().woCompare(BSON("a" << MINKEY)) ); ASSERT_EQUALS( 0, nextChunk.getMax().woCompare(BSON("a" << 10)) ); } TEST_F(ThreeChunkWithRangeGapFixture, GetNextFromMiddle) { ChunkType nextChunk; - ASSERT_FALSE( getCollMetadata()->getNextChunk(BSON("a" << 10), &nextChunk) ); + ASSERT_FALSE( getCollMetadata().getNextChunk(BSON("a" << 10), &nextChunk) ); ASSERT_EQUALS( 0, nextChunk.getMin().woCompare(BSON("a" << 30)) ); ASSERT_EQUALS( 0, nextChunk.getMax().woCompare(BSON("a" << MAXKEY)) ); } TEST_F(ThreeChunkWithRangeGapFixture, GetNextFromLast) { ChunkType nextChunk; - ASSERT( getCollMetadata()->getNextChunk(BSON("a" << 30), &nextChunk) ); + ASSERT( getCollMetadata().getNextChunk(BSON("a" << 30), &nextChunk) ); } } // unnamed namespace |