summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandolph Tan <randolph@10gen.com>2014-03-10 11:52:00 -0400
committerRandolph Tan <randolph@10gen.com>2014-03-11 15:27:50 -0400
commit1ceeb84bd0b170bb367e8f78be53d2f075007cb5 (patch)
treea6b8d8b236404e32b0873e1910308493732bfa18
parentb9fa2dac50c915eda3d8547e99e52ce3e6764bf6 (diff)
downloadmongo-1ceeb84bd0b170bb367e8f78be53d2f075007cb5.tar.gz
SERVER-12515 Unable to move hashed shard key chunks created by numInitialChunks
Backport fix for commit 3a08be3bf2a1a650c97543a448a8ea0c143a89b6
-rw-r--r--src/mongo/dbtests/d_chunk_manager_tests.cpp14
-rw-r--r--src/mongo/s/d_chunk_manager.cpp2
2 files changed, 15 insertions, 1 deletions
diff --git a/src/mongo/dbtests/d_chunk_manager_tests.cpp b/src/mongo/dbtests/d_chunk_manager_tests.cpp
index e50961d3ee7..be7639f5794 100644
--- a/src/mongo/dbtests/d_chunk_manager_tests.cpp
+++ b/src/mongo/dbtests/d_chunk_manager_tests.cpp
@@ -362,6 +362,20 @@ namespace {
ASSERT( cloned->belongsToMe( split1 ) );
ASSERT( cloned->belongsToMe( split2 ) );
ASSERT( ! cloned->belongsToMe( max ) );
+
+ ASSERT_FALSE( cloned->getNextChunk( BSON( "a" << MinKey << "b" << 0 ), &min, &max ));
+ ASSERT_EQUALS( BSON( "a" << 10 << "b" << 0 ), min );
+ ASSERT_EQUALS( BSON( "a" << 15 << "b" << 0 ), max );
+
+ ASSERT_FALSE( cloned->getNextChunk( BSON( "a" << 10 << "b" << 0 ), &min, &max ));
+ ASSERT_EQUALS( BSON( "a" << 15 << "b" << 0 ), min );
+ ASSERT_EQUALS( BSON( "a" << 18 << "b" << 0 ), max );
+
+ ASSERT_FALSE( cloned->getNextChunk( BSON( "a" << 15 << "b" << 0 ), &min, &max ));
+ ASSERT_EQUALS( BSON( "a" << 18 << "b" << 0 ), min );
+ ASSERT_EQUALS( BSON( "a" << 20 << "b" << 0 ), max );
+
+ ASSERT( cloned->getNextChunk( BSON( "a" << 18 << "b" << 0 ), &min, &max ));
}
};
diff --git a/src/mongo/s/d_chunk_manager.cpp b/src/mongo/s/d_chunk_manager.cpp
index 4eb360702bc..98a6d90d341 100644
--- a/src/mongo/s/d_chunk_manager.cpp
+++ b/src/mongo/s/d_chunk_manager.cpp
@@ -426,7 +426,7 @@ namespace mongo {
BSONObj startKey = min;
for ( vector<BSONObj>::const_iterator it = splitKeys.begin() ; it != splitKeys.end() ; ++it ) {
BSONObj split = *it;
- p->_chunksMap[min] = split.getOwned();
+ p->_chunksMap[startKey] = split.getOwned();
p->_chunksMap.insert( make_pair( split.getOwned() , max.getOwned() ) );
p->_version.incMinor();
startKey = split;