summaryrefslogtreecommitdiff
path: root/src/mongo/s/collection_metadata_test.cpp
diff options
context:
space:
mode:
authorGreg Studer <greg@10gen.com>2013-06-07 16:11:49 -0400
committerGreg Studer <greg@10gen.com>2013-06-17 12:23:32 -0400
commit88b7299f433e6b7bcae6df68a021fee91dc21dd3 (patch)
treecc2e42d864b79fba22c3369bd22f01f745edf0c4 /src/mongo/s/collection_metadata_test.cpp
parent432d1c9546340633dd5f0ef07259708a75f4a87e (diff)
downloadmongo-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.cpp232
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