diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-10-30 10:52:06 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2023-10-30 10:52:06 +0000 |
commit | d5821ee392c7a71e4db6de446b4d6adf636552e7 (patch) | |
tree | 6a5e9f8d8db00615601eed30f5a1053cbf1c15ec /searchcore/src/tests/proton/documentdb/documentbucketmover/documentbucketmover_test.cpp | |
parent | 0c47a4ae1132a86c5973d8e385c793f4cf4eb7dc (diff) |
Test that documents failing move are detected and causes retry and eventual completition.
Diffstat (limited to 'searchcore/src/tests/proton/documentdb/documentbucketmover/documentbucketmover_test.cpp')
-rw-r--r-- | searchcore/src/tests/proton/documentdb/documentbucketmover/documentbucketmover_test.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/searchcore/src/tests/proton/documentdb/documentbucketmover/documentbucketmover_test.cpp b/searchcore/src/tests/proton/documentdb/documentbucketmover/documentbucketmover_test.cpp index 3f4fd0c1a8f..e9407d5445e 100644 --- a/searchcore/src/tests/proton/documentdb/documentbucketmover/documentbucketmover_test.cpp +++ b/searchcore/src/tests/proton/documentdb/documentbucketmover/documentbucketmover_test.cpp @@ -75,6 +75,9 @@ struct ControllerFixtureBase : public ::testing::Test _bucketHandler.notifyBucketStateChanged(bucket, BucketInfo::ActiveState::NOT_ACTIVE); return *this; } + bool removeFromSubDB(uint32_t subdbId, uint32_t lid) { + return _ready.remove(subdbId, lid) || _notReady.remove(subdbId, lid); + } void failRetrieveForLid(uint32_t lid) { _ready.failRetrieveForLid(lid); _notReady.failRetrieveForLid(lid); @@ -237,6 +240,7 @@ TEST_F(ControllerFixture, require_that_bucket_is_moved_even_with_error) }); sync(); EXPECT_FALSE(_bmj->done()); + EXPECT_TRUE(docsMoved().empty()); fixRetriever(); masterExecute([this]() { EXPECT_TRUE(_bmj->scanAndMove(4, 3)); @@ -250,6 +254,38 @@ TEST_F(ControllerFixture, require_that_bucket_is_moved_even_with_error) EXPECT_EQ(_ready.bucket(2), bucketsModified()[0]); } +TEST_F(ControllerFixture, require_that_bucket_is_moved_even_with_handler_error) +{ + // bucket 2 should be moved + addReady(_ready.bucket(1)); + _bmj->recompute(); + _moveHandler.addLid2Fail(5); + masterExecute([this]() { + EXPECT_FALSE(_bmj->done()); + EXPECT_TRUE(_bmj->scanAndMove(4, 3)); + EXPECT_TRUE(_bmj->done()); + }); + sync(); + EXPECT_FALSE(_bmj->done()); + EXPECT_EQ(1u, _moveHandler._numFailedMoves); + EXPECT_EQ(1u, docsMoved().size()); + assertEqual(_ready.bucket(2), _ready.docs(2)[1], 1, 2, docsMoved()[0]); + const auto & doc = docsMoved()[0]; + EXPECT_TRUE(removeFromSubDB(doc.getPrevSubDbId(), doc.getPrevLid())); // Explicit remove as movehandler only observes move attempt. + _moveHandler.removeLids2Fail(5); + masterExecute([this]() { + EXPECT_TRUE(_bmj->scanAndMove(4, 3)); + EXPECT_TRUE(_bmj->done()); + }); + sync(); + EXPECT_EQ(2u, docsMoved().size()); + // First document is from previous move round. Handler just appends all operations. + assertEqual(_ready.bucket(2), _ready.docs(2)[1], 1, 2, docsMoved()[0]); + assertEqual(_ready.bucket(2), _ready.docs(2)[0], 1, 2, docsMoved()[1]); + EXPECT_EQ(1u, bucketsModified().size()); + EXPECT_EQ(_ready.bucket(2), bucketsModified()[0]); +} + TEST_F(ControllerFixture, require_that_we_move_buckets_in_several_steps) { |