diff options
author | Tor Egge <Tor.Egge@online.no> | 2021-11-18 11:50:05 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2021-11-18 11:50:05 +0100 |
commit | 07a28cb38176baab60bc4bc7a96ba1d1927f2670 (patch) | |
tree | 3cb1ccfca00436daa3c1b76c87fabf65dabb3699 | |
parent | 23dd2b6d8f86531ca3f8929559a50890b0afea45 (diff) |
Remove dead code for handling lid reuse.
9 files changed, 32 insertions, 132 deletions
diff --git a/searchcore/src/tests/proton/documentmetastore/lidreusedelayer/lidreusedelayer_test.cpp b/searchcore/src/tests/proton/documentmetastore/lidreusedelayer/lidreusedelayer_test.cpp index 9162972a4cb..c04f5f7f0b0 100644 --- a/searchcore/src/tests/proton/documentmetastore/lidreusedelayer/lidreusedelayer_test.cpp +++ b/searchcore/src/tests/proton/documentmetastore/lidreusedelayer/lidreusedelayer_test.cpp @@ -169,16 +169,12 @@ public: _writeService.index().execute(makeLambdaTask([this, lids]() { performCycleLids(lids);})); } - bool delayReuse(uint32_t lid) { - bool res = false; - runInMaster([&] () { res = _lidReuseDelayer->delayReuse(lid); } ); - return res; + void delayReuse(uint32_t lid) { + runInMaster([&] () { _lidReuseDelayer->delayReuse(lid); } ); } - bool delayReuse(const std::vector<uint32_t> &lids) { - bool res = false; - runInMaster([&] () { res = _lidReuseDelayer->delayReuse(lids); }); - return res; + void delayReuse(const std::vector<uint32_t> &lids) { + runInMaster([&] () { _lidReuseDelayer->delayReuse(lids); }); } void commit() { @@ -191,8 +187,8 @@ public: TEST_F("require that nothing happens before free list is active", Fixture) { - EXPECT_FALSE(f.delayReuse(4)); - EXPECT_FALSE(f.delayReuse({ 5, 6})); + f.delayReuse(4); + f.delayReuse({ 5, 6}); EXPECT_TRUE(f._store.assertWork(0, 0, 0)); EXPECT_TRUE(assertThreadObserver(2, 0, 0, f._writeService)); } @@ -200,15 +196,15 @@ TEST_F("require that nothing happens before free list is active", Fixture) TEST_F("require that reuse can be batched", Fixture) { f._store._freeListActive = true; - EXPECT_FALSE(f.delayReuse(4)); - EXPECT_FALSE(f.delayReuse({ 5, 6, 7})); + f.delayReuse(4); + f.delayReuse({ 5, 6, 7}); EXPECT_TRUE(f._store.assertWork(0, 0, 0)); EXPECT_TRUE(assertThreadObserver(2, 0, 0, f._writeService)); f.commit(); EXPECT_TRUE(f._store.assertWork(0, 1, 4)); EXPECT_TRUE(assertThreadObserver(4, 1, 0, f._writeService)); - EXPECT_FALSE(f.delayReuse(8)); - EXPECT_FALSE(f.delayReuse({ 9, 10})); + f.delayReuse(8); + f.delayReuse({ 9, 10}); EXPECT_TRUE(f._store.assertWork(0, 1, 4)); EXPECT_TRUE(assertThreadObserver(6, 1, 0, f._writeService)); } @@ -216,7 +212,7 @@ TEST_F("require that reuse can be batched", Fixture) TEST_F("require that single element array is optimized", Fixture) { f._store._freeListActive = true; - EXPECT_FALSE(f.delayReuse({ 4})); + f.delayReuse({ 4}); EXPECT_TRUE(f._store.assertWork(0, 0, 0)); EXPECT_TRUE(assertThreadObserver(1, 0, 0, f._writeService)); f.commit(); diff --git a/searchcore/src/vespa/searchcore/proton/documentmetastore/lidreusedelayer.cpp b/searchcore/src/vespa/searchcore/proton/documentmetastore/lidreusedelayer.cpp index b0027faac1d..c77def95edb 100644 --- a/searchcore/src/vespa/searchcore/proton/documentmetastore/lidreusedelayer.cpp +++ b/searchcore/src/vespa/searchcore/proton/documentmetastore/lidreusedelayer.cpp @@ -19,24 +19,22 @@ LidReuseDelayer::~LidReuseDelayer() { assert(_pendingLids.empty()); } -bool +void LidReuseDelayer::delayReuse(uint32_t lid) { assert(_writeService.master().isCurrentThread()); - if ( ! _documentMetaStore.getFreeListActive()) - return false; - _pendingLids.push_back(lid); - return false; + if (_documentMetaStore.getFreeListActive()) { + _pendingLids.push_back(lid); + } } -bool +void LidReuseDelayer::delayReuse(const std::vector<uint32_t> &lids) { assert(_writeService.master().isCurrentThread()); - if ( ! _documentMetaStore.getFreeListActive() || lids.empty()) - return false; - _pendingLids.insert(_pendingLids.end(), lids.cbegin(), lids.cend()); - return false; + if (_documentMetaStore.getFreeListActive() && !lids.empty()) { + _pendingLids.insert(_pendingLids.end(), lids.cbegin(), lids.cend()); + } } std::vector<uint32_t> diff --git a/searchcore/src/vespa/searchcore/proton/documentmetastore/lidreusedelayer.h b/searchcore/src/vespa/searchcore/proton/documentmetastore/lidreusedelayer.h index 525558e3081..1a5b8d2f1e2 100644 --- a/searchcore/src/vespa/searchcore/proton/documentmetastore/lidreusedelayer.h +++ b/searchcore/src/vespa/searchcore/proton/documentmetastore/lidreusedelayer.h @@ -31,8 +31,8 @@ class LidReuseDelayer public: LidReuseDelayer(searchcorespi::index::IThreadingService &writeService, IStore &documentMetaStore); ~LidReuseDelayer(); - bool delayReuse(uint32_t lid); - bool delayReuse(const std::vector<uint32_t> &lids); + void delayReuse(uint32_t lid); + void delayReuse(const std::vector<uint32_t> &lids); std::vector<uint32_t> getReuseLids(); }; diff --git a/searchcore/src/vespa/searchcore/proton/server/CMakeLists.txt b/searchcore/src/vespa/searchcore/proton/server/CMakeLists.txt index e2673d8aea2..56210fe0c85 100644 --- a/searchcore/src/vespa/searchcore/proton/server/CMakeLists.txt +++ b/searchcore/src/vespa/searchcore/proton/server/CMakeLists.txt @@ -85,7 +85,6 @@ vespa_add_library(searchcore_server STATIC reconfig_params.cpp remove_operations_rate_tracker.cpp removedonecontext.cpp - removedonetask.cpp replaypacketdispatcher.cpp resource_usage_explorer.cpp rpc_hooks.cpp diff --git a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp index 0a04d932d1e..558a57bb8c6 100644 --- a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp @@ -1,30 +1,17 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "removedonecontext.h" -#include "removedonetask.h" -#include <vespa/searchcore/proton/reference/i_gid_to_lid_change_handler.h> -#include <cassert> namespace proton { -RemoveDoneContext::RemoveDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted, - vespalib::Executor &executor, IDocumentMetaStore &documentMetaStore, uint32_t lid) +RemoveDoneContext::RemoveDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted) : OperationDoneContext(std::move(token)), - _executor(executor), - _task(), _uncommitted(std::move(uncommitted)) { - if (lid != 0) { - _task = std::make_unique<RemoveDoneTask>(documentMetaStore, lid); - } } RemoveDoneContext::~RemoveDoneContext() { - if (_task) { - vespalib::Executor::Task::UP res = _executor.execute(std::move(_task)); - assert(!res); - } } } // namespace proton diff --git a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h index 0e27c840be1..28e15389bb2 100644 --- a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h +++ b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h @@ -4,32 +4,23 @@ #include "operationdonecontext.h" #include <vespa/searchcore/proton/common/ipendinglidtracker.h> -#include <vespa/vespalib/util/executor.h> namespace proton { -struct IDocumentMetaStore; - - /** - * Context class for document removes that acks remove and schedules a - * task when instance is destroyed. Typically a shared pointer to an + * Context class for document removes that acks remove + * when instance is destroyed. Typically a shared pointer to an * instance is passed around to multiple worker threads that performs * portions of a larger task before dropping the shared pointer, - * triggering the ack and task scheduling when all worker threads have - * completed. + * triggering the ack when all worker threads have completed. */ class RemoveDoneContext : public OperationDoneContext { - vespalib::Executor &_executor; - std::unique_ptr<vespalib::Executor::Task> _task; IPendingLidTracker::Token _uncommitted; public: - RemoveDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted, vespalib::Executor &executor, - IDocumentMetaStore &documentMetaStore, uint32_t lid); + RemoveDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted); ~RemoveDoneContext() override; }; - } // namespace proton diff --git a/searchcore/src/vespa/searchcore/proton/server/removedonetask.cpp b/searchcore/src/vespa/searchcore/proton/server/removedonetask.cpp deleted file mode 100644 index 21ec4829216..00000000000 --- a/searchcore/src/vespa/searchcore/proton/server/removedonetask.cpp +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -#include "removedonetask.h" -#include <vespa/searchcore/proton/documentmetastore/i_document_meta_store.h> - -namespace proton { - -RemoveDoneTask::RemoveDoneTask(IDocumentMetaStore &documentMetaStore, uint32_t lid) - : vespalib::Executor::Task(), - _documentMetaStore(documentMetaStore), - _lid(lid) -{ -} - -RemoveDoneTask::~RemoveDoneTask() = default; - -void -RemoveDoneTask::run() -{ - if (_lid != 0u) { - _documentMetaStore.removeComplete(_lid); - } -} - -} // namespace proton diff --git a/searchcore/src/vespa/searchcore/proton/server/removedonetask.h b/searchcore/src/vespa/searchcore/proton/server/removedonetask.h deleted file mode 100644 index 64e77617062..00000000000 --- a/searchcore/src/vespa/searchcore/proton/server/removedonetask.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -#pragma once - -#include <vespa/vespalib/util/executor.h> - -namespace proton -{ - -struct IDocumentMetaStore; - -/** - * Class for task to be executed when a document remove completed and - * memory index and attributes have been updated. - * - * The task handles one thing: - * - * 1. Passing on lid that can be reused do document meta store. - * It have to go through a hold cycle in order for searches that - * might have posting lists referencing the lid in context of - * its old identity. - * - */ -class RemoveDoneTask : public vespalib::Executor::Task -{ - IDocumentMetaStore &_documentMetaStore; - // lid to reuse, can be 0 if reuse was handled by lid reuse delayer - uint32_t _lid; - - -public: - RemoveDoneTask(IDocumentMetaStore &documentMetaStore, uint32_t lid); - ~RemoveDoneTask() override; - - void run() override; -}; - - -} // namespace proton diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp index c9a0892d3c3..fc3cad74922 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp @@ -67,10 +67,9 @@ void setPrev(DocumentOperation &op, const documentmetastore::IStore::Result &res } std::shared_ptr<RemoveDoneContext> -createRemoveDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted, vespalib::Executor &executor, - IDocumentMetaStore &documentMetaStore, uint32_t lid) +createRemoveDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted) { - return std::make_shared<RemoveDoneContext>(std::move(token), std::move(uncommitted), executor, documentMetaStore, lid); + return std::make_shared<RemoveDoneContext>(std::move(token), std::move(uncommitted)); } class SummaryPutDoneContext : public OperationDoneContext @@ -576,9 +575,8 @@ StoreOnlyFeedView::internalRemove(FeedToken token, const RemoveOperationWithGid void StoreOnlyFeedView::internalRemove(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted, SerialNum serialNum, Lid lid) { - bool explicitReuseLid = _lidReuseDelayer.delayReuse(lid); - auto onWriteDone = createRemoveDoneContext(std::move(token), std::move(uncommitted), _writeService.master(), _metaStore, - (explicitReuseLid ? lid : 0u)); + _lidReuseDelayer.delayReuse(lid); + auto onWriteDone = createRemoveDoneContext(std::move(token), std::move(uncommitted)); removeSummary(serialNum, lid, onWriteDone); removeAttributes(serialNum, lid, onWriteDone); removeIndexedFields(serialNum, lid, onWriteDone); @@ -627,7 +625,6 @@ StoreOnlyFeedView::removeDocuments(const RemoveDocumentsOperation &op, bool remo } const LidVector &lidsToRemove(ctx->getLidVector()); bool useDMS = useDocumentMetaStore(serialNum); - bool explicitReuseLids = false; if (useDMS) { vespalib::Gate gate; std::vector<document::GlobalId> gidsToRemove = getGidsToRemove(_metaStore, lidsToRemove); @@ -635,15 +632,11 @@ StoreOnlyFeedView::removeDocuments(const RemoveDocumentsOperation &op, bool remo gate.await(); _metaStore.removeBatch(lidsToRemove, ctx->getDocIdLimit()); _metaStore.commit(CommitParam(serialNum)); - explicitReuseLids = _lidReuseDelayer.delayReuse(lidsToRemove); + _lidReuseDelayer.delayReuse(lidsToRemove); } std::shared_ptr<vespalib::IDestructorCallback> onWriteDone; vespalib::Executor::Task::UP removeBatchDoneTask; - if (explicitReuseLids) { - removeBatchDoneTask = makeLambdaTask([this, lidsToRemove]() { _metaStore.removeBatchComplete(lidsToRemove); }); - } else { - removeBatchDoneTask = makeLambdaTask([]() {}); - } + removeBatchDoneTask = makeLambdaTask([]() {}); onWriteDone = std::make_shared<search::ScheduleTaskCallback>(_writeService.master(), std::move(removeBatchDoneTask)); if (remove_index_and_attributes) { removeIndexedFields(serialNum, lidsToRemove, onWriteDone); |