aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2021-11-18 11:50:05 +0100
committerTor Egge <Tor.Egge@online.no>2021-11-18 11:50:05 +0100
commit07a28cb38176baab60bc4bc7a96ba1d1927f2670 (patch)
tree3cb1ccfca00436daa3c1b76c87fabf65dabb3699
parent23dd2b6d8f86531ca3f8929559a50890b0afea45 (diff)
Remove dead code for handling lid reuse.
-rw-r--r--searchcore/src/tests/proton/documentmetastore/lidreusedelayer/lidreusedelayer_test.cpp26
-rw-r--r--searchcore/src/vespa/searchcore/proton/documentmetastore/lidreusedelayer.cpp18
-rw-r--r--searchcore/src/vespa/searchcore/proton/documentmetastore/lidreusedelayer.h4
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/CMakeLists.txt1
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp15
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/removedonecontext.h17
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/removedonetask.cpp25
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/removedonetask.h39
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp19
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);