diff options
author | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2016-09-16 18:08:29 -0400 |
---|---|---|
committer | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2016-11-02 16:46:47 -0400 |
commit | f0ada5e29eb5218c257897bfd1a8fb1e36e06733 (patch) | |
tree | af7cb64596f73165d813e7eb68a030e6028c769d /src/mongo/db/s/collection_metadata_test.cpp | |
parent | fd16deb6dd3d08756f15c181facc707cb53f4e15 (diff) | |
download | mongo-f0ada5e29eb5218c257897bfd1a8fb1e36e06733.tar.gz |
SERVER-25665 Make splitChunk and moveChunk commands use 'chunkVersion'
This change makes the collection metadata on the shard also include the
chunk version and makes the splitChunk and moveChunk commands use it when
checking for consistency.
Diffstat (limited to 'src/mongo/db/s/collection_metadata_test.cpp')
-rw-r--r-- | src/mongo/db/s/collection_metadata_test.cpp | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/src/mongo/db/s/collection_metadata_test.cpp b/src/mongo/db/s/collection_metadata_test.cpp index cbb456c0c9e..e3c0cc318e8 100644 --- a/src/mongo/db/s/collection_metadata_test.cpp +++ b/src/mongo/db/s/collection_metadata_test.cpp @@ -285,16 +285,12 @@ protected: setRemote(HostAndPort("FakeRemoteClient:34567")); configTargeter()->setFindHostReturnValue(configHost); - OID epoch = OID::gen(); - - ChunkVersion chunkVersion = ChunkVersion(1, 0, epoch); - CollectionType collType; collType.setNs(NamespaceString{"test.foo"}); collType.setKeyPattern(BSON("a" << 1)); collType.setUnique(false); collType.setUpdatedAt(Date_t::fromMillisSinceEpoch(1)); - collType.setEpoch(epoch); + collType.setEpoch(chunkVersion.epoch()); BSONObj fooSingle = BSON( ChunkType::name("test.foo-a_10") @@ -302,7 +298,7 @@ protected: << ChunkType::min(BSON("a" << 10)) << ChunkType::max(BSON("a" << 20)) << ChunkType::DEPRECATED_lastmod(Date_t::fromMillisSinceEpoch(chunkVersion.toLong())) - << ChunkType::DEPRECATED_epoch(epoch) + << ChunkType::DEPRECATED_epoch(chunkVersion.epoch()) << ChunkType::shard("shard0000")); std::vector<BSONObj> chunksToSend{fooSingle}; @@ -326,6 +322,8 @@ protected: return _metadata; } + const ChunkVersion chunkVersion{ChunkVersion(1, 0, OID::gen())}; + private: CollectionMetadata _metadata; const HostAndPort configHost{HostAndPort(CONFIG_HOST_PORT)}; @@ -355,6 +353,7 @@ TEST_F(SingleChunkFixture, getNextFromEmpty) { ASSERT(getCollMetadata().getNextChunk(getCollMetadata().getMinKey(), &nextChunk)); ASSERT_EQUALS(0, nextChunk.getMin().woCompare(BSON("a" << 10))); ASSERT_EQUALS(0, nextChunk.getMax().woCompare(BSON("a" << 20))); + ASSERT_EQUALS(chunkVersion, nextChunk.getVersion()); } TEST_F(SingleChunkFixture, GetLastChunkIsFalse) { @@ -447,6 +446,8 @@ protected: return _metadata; } + const ChunkVersion chunkVersion{ChunkVersion(1, 0, OID::gen())}; + private: CollectionMetadata _metadata; const HostAndPort configHost{HostAndPort(CONFIG_HOST_PORT)}; @@ -473,16 +474,14 @@ protected: setRemote(HostAndPort("FakeRemoteClient:34567")); configTargeter()->setFindHostReturnValue(configHost); - OID epoch = OID::gen(); - - ChunkVersion chunkVersion = ChunkVersion(1, 0, epoch); + ChunkVersion chunkVersion = ChunkVersion(1, 0, OID::gen()); CollectionType collType; collType.setNs(NamespaceString{"test.foo"}); collType.setKeyPattern(BSON("a" << 1)); collType.setUnique(false); collType.setUpdatedAt(Date_t::fromMillisSinceEpoch(1)); - collType.setEpoch(epoch); + collType.setEpoch(chunkVersion.epoch()); std::vector<BSONObj> chunksToSend; chunksToSend.push_back(BSON( @@ -491,15 +490,18 @@ protected: << ChunkType::min(BSON("a" << 10 << "b" << 0)) << ChunkType::max(BSON("a" << 20 << "b" << 0)) << ChunkType::DEPRECATED_lastmod(Date_t::fromMillisSinceEpoch(chunkVersion.toLong())) - << ChunkType::DEPRECATED_epoch(epoch) + << ChunkType::DEPRECATED_epoch(chunkVersion.epoch()) << ChunkType::shard("shard0000"))); + + chunkVersion.incMinor(); + chunksToSend.push_back(BSON( ChunkType::name("test.foo-a_10") << ChunkType::ns("test.foo") << ChunkType::min(BSON("a" << 30 << "b" << 0)) << ChunkType::max(BSON("a" << 40 << "b" << 0)) << ChunkType::DEPRECATED_lastmod(Date_t::fromMillisSinceEpoch(chunkVersion.toLong())) - << ChunkType::DEPRECATED_epoch(epoch) + << ChunkType::DEPRECATED_epoch(chunkVersion.epoch()) << ChunkType::shard("shard0000"))); auto future = launchAsync([this] { @@ -650,6 +652,21 @@ private: const HostAndPort configHost{HostAndPort(CONFIG_HOST_PORT)}; }; +TEST_F(ThreeChunkWithRangeGapFixture, ChunkVersionsMatch) { + const OID epoch = getCollMetadata().getCollVersion().epoch(); + + ChunkType chunk; + + ASSERT(getCollMetadata().getNextChunk(BSON("a" << MINKEY), &chunk)); + ASSERT_EQ(ChunkVersion(1, 1, epoch), chunk.getVersion()); + + ASSERT(getCollMetadata().getNextChunk(BSON("a" << 30), &chunk)); + ASSERT_EQ(ChunkVersion(1, 2, epoch), chunk.getVersion()); + + ASSERT(getCollMetadata().getNextChunk(BSON("a" << 10), &chunk)); + ASSERT_EQ(ChunkVersion(1, 3, epoch), chunk.getVersion()); +} + TEST_F(ThreeChunkWithRangeGapFixture, ShardOwnsDoc) { ASSERT(getCollMetadata().keyBelongsToMe(BSON("a" << 5))); ASSERT(getCollMetadata().keyBelongsToMe(BSON("a" << 10))); |