From 673f7324d93137cf781c2a0475017ed5d8121803 Mon Sep 17 00:00:00 2001 From: Tor Egge Date: Thu, 18 Nov 2021 20:01:35 +0100 Subject: Add a vector of gids to remove to ReferenceAttribute::populateTargetLids() signature. These gids represent the target documents removed since the last feed view force commit where the live gid to lid mapping in the document meta store was made available as a frozen tree. --- .../gid_to_lid_change_handler_test.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp') diff --git a/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp b/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp index b64e972c4cf..3474a4297c7 100644 --- a/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp +++ b/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp @@ -38,6 +38,7 @@ class ListenerStats { uint32_t _createdListeners; uint32_t _registeredListeners; uint32_t _destroyedListeners; + std::vector _initial_removes; public: ListenerStats() noexcept @@ -46,7 +47,8 @@ public: _removeChanges(0u), _createdListeners(0u), _registeredListeners(0u), - _destroyedListeners(0u) + _destroyedListeners(0u), + _initial_removes() { } @@ -64,7 +66,7 @@ public: ++_removeChanges; } void markCreatedListener() { lock_guard guard(_lock); ++_createdListeners; } - void markRegisteredListener() { lock_guard guard(_lock); ++_registeredListeners; } + void markRegisteredListener(const std::vector& removes) { lock_guard guard(_lock); ++_registeredListeners; _initial_removes = removes; } void markDestroyedListener() { lock_guard guard(_lock); ++_destroyedListeners; } uint32_t getCreatedListeners() const { return _createdListeners; } @@ -84,6 +86,7 @@ public: EXPECT_EQUAL(expPutChanges, _putChanges); EXPECT_EQUAL(expRemoveChanges, _removeChanges); } + const std::vector& get_initial_removes() const noexcept { return _initial_removes; } }; class MyListener : public IGidToLidChangeListener @@ -105,7 +108,7 @@ public: ~MyListener() override { _stats.markDestroyedListener(); } void notifyPutDone(IDestructorCallbackSP, GlobalId, uint32_t) override { _stats.notifyPutDone(); } void notifyRemove(IDestructorCallbackSP, GlobalId) override { _stats.notifyRemove(); } - void notifyRegistered() override { _stats.markRegisteredListener(); } + void notifyRegistered(const std::vector& removes) override { _stats.markRegisteredListener(removes); } const vespalib::string &getName() const override { return _name; } const vespalib::string &getDocTypeName() const override { return _docTypeName; } }; @@ -233,6 +236,16 @@ TEST_F("Test that we keep old listener when registering duplicate", Fixture) TEST_DO(stats.assertListeners(2, 1, 1)); } +TEST_F("Test that pending removes are passed on to new listener", Fixture) +{ + auto& stats = f.addStats(); + auto listener = std::make_unique(stats, "test1", "testdoc"); + f.notifyRemove(toGid(doc1), 20); + f.addListener(std::move(listener)); + EXPECT_TRUE((std::vector{ toGid(doc1) }) == stats.get_initial_removes()); + f.commit(); +} + class StatsFixture : public Fixture { ListenerStats &_stats; -- cgit v1.2.3