summaryrefslogtreecommitdiffstats
path: root/searchcore/src/tests/proton/common
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-08-27 22:33:53 +0200
committerGitHub <noreply@github.com>2020-08-27 22:33:53 +0200
commit55f332d669ae2c259a337bd8f2f9023ae400e224 (patch)
treedb546c71d2f1822ba1f6b81e90b5a0f4f523becb /searchcore/src/tests/proton/common
parent6b565b21a2808f13bf890ca4113e10b29063f5ba (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.txt7
-rw-r--r--searchcore/src/tests/proton/common/pendinglidtracker_test.cpp105
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(); }