diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-08-27 22:33:53 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-27 22:33:53 +0200 |
commit | 55f332d669ae2c259a337bd8f2f9023ae400e224 (patch) | |
tree | db546c71d2f1822ba1f6b81e90b5a0f4f523becb /searchcore/src/tests/proton/common | |
parent | 6b565b21a2808f13bf890ca4113e10b29063f5ba (diff) |
Revert "Revert "Only wait for th elids that you are interested in.""
Diffstat (limited to 'searchcore/src/tests/proton/common')
-rw-r--r-- | searchcore/src/tests/proton/common/CMakeLists.txt | 7 | ||||
-rw-r--r-- | searchcore/src/tests/proton/common/pendinglidtracker_test.cpp | 105 |
2 files changed, 112 insertions, 0 deletions
diff --git a/searchcore/src/tests/proton/common/CMakeLists.txt b/searchcore/src/tests/proton/common/CMakeLists.txt index da0bc9b5b10..30ec8c035ad 100644 --- a/searchcore/src/tests/proton/common/CMakeLists.txt +++ b/searchcore/src/tests/proton/common/CMakeLists.txt @@ -15,3 +15,10 @@ vespa_add_executable(searchcore_cachedselect_test_app TEST searchlib_test ) vespa_add_test(NAME searchcore_cachedselect_test_app COMMAND searchcore_cachedselect_test_app) +vespa_add_executable(pendinglidtracker_test_app TEST + SOURCES + pendinglidtracker_test.cpp + DEPENDS + searchcore_pcommon +) +vespa_add_test(NAME pendinglidtracker_test_app COMMAND pendinglidtracker_test_app) diff --git a/searchcore/src/tests/proton/common/pendinglidtracker_test.cpp b/searchcore/src/tests/proton/common/pendinglidtracker_test.cpp new file mode 100644 index 00000000000..575033ad19a --- /dev/null +++ b/searchcore/src/tests/proton/common/pendinglidtracker_test.cpp @@ -0,0 +1,105 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include <vespa/vespalib/testkit/testapp.h> +#include <vespa/searchcore/proton/common/pendinglidtracker.h> + +#include <vespa/log/log.h> +LOG_SETUP("pendinglidtracker_test"); + +using namespace proton; + +constexpr uint32_t LID_1 = 1u; +const std::vector<uint32_t> LIDV_2_1_3({2u, LID_1, 3u}); +const std::vector<uint32_t> LIDV_2_3({2u, 3u}); + +std::ostream & +operator << (std::ostream & os, ILidCommitState::State state) { + switch (state) { + case ILidCommitState::State::NEED_COMMIT: + os << "NEED_COMMIT"; + break; + case ILidCommitState::State::WAITING: + os << "WAITING"; + break; + case ILidCommitState::State::COMPLETED: + os << "COMPLETED"; + break; + } + return os; +} + +void +verifyPhase1ProduceAndNeedCommit(PendingLidTrackerBase & tracker, ILidCommitState::State expected) { + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState()); + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LID_1)); + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_1_3)); + + auto token = tracker.produce(LID_1); + EXPECT_EQUAL(expected, tracker.getState()); + EXPECT_EQUAL(expected, tracker.getState(LID_1)); + EXPECT_EQUAL(expected, tracker.getState(LIDV_2_1_3)); + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_3)); + { + auto token2 = tracker.produce(LID_1); + EXPECT_EQUAL(expected, tracker.getState()); + EXPECT_EQUAL(expected, tracker.getState(LID_1)); + EXPECT_EQUAL(expected, tracker.getState(LIDV_2_1_3)); + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_3)); + } + EXPECT_EQUAL(expected, tracker.getState()); + EXPECT_EQUAL(expected, tracker.getState(LID_1)); + EXPECT_EQUAL(expected, tracker.getState(LIDV_2_1_3)); + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_3)); +} + +TEST("test pendinglidtracker for needcommit") { + PendingLidTracker tracker; + verifyPhase1ProduceAndNeedCommit(tracker, ILidCommitState::State::WAITING); + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState()); + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LID_1)); + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_1_3)); + { + ILidCommitState::State incomplete = ILidCommitState::State::WAITING; + auto token = tracker.produce(LID_1); + EXPECT_EQUAL(incomplete, tracker.getState()); + EXPECT_EQUAL(incomplete, tracker.getState(LID_1)); + EXPECT_EQUAL(incomplete, tracker.getState(LIDV_2_1_3)); + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_3)); + { + auto snapshot = tracker.produceSnapshot(); + EXPECT_EQUAL(incomplete, tracker.getState()); + EXPECT_EQUAL(incomplete, tracker.getState(LID_1)); + EXPECT_EQUAL(incomplete, tracker.getState(LIDV_2_1_3)); + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_3)); + } + EXPECT_EQUAL(incomplete, tracker.getState()); + EXPECT_EQUAL(incomplete, tracker.getState(LID_1)); + EXPECT_EQUAL(incomplete, tracker.getState(LIDV_2_1_3)); + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_3)); + } + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState()); + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LID_1)); + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_1_3)); +} + +TEST("test two phase pendinglidtracker for needcommit") { + TwoPhasePendingLidTracker tracker; + ILidCommitState::State incomplete = ILidCommitState::State::NEED_COMMIT; + verifyPhase1ProduceAndNeedCommit(tracker, incomplete); + EXPECT_EQUAL(incomplete, tracker.getState()); + EXPECT_EQUAL(incomplete, tracker.getState(LID_1)); + EXPECT_EQUAL(incomplete, tracker.getState(LIDV_2_1_3)); + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_3)); + { + ILidCommitState::State waiting = ILidCommitState::State::WAITING; + auto snapshot = tracker.produceSnapshot(); + EXPECT_EQUAL(waiting, tracker.getState()); + EXPECT_EQUAL(waiting, tracker.getState(LID_1)); + EXPECT_EQUAL(waiting, tracker.getState(LIDV_2_1_3)); + } + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState()); + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LID_1)); + EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_1_3)); +} + +TEST_MAIN() { TEST_RUN_ALL(); } |