aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahooinc.com>2022-01-21 17:09:43 +0100
committerGitHub <noreply@github.com>2022-01-21 17:09:43 +0100
commit418c89cd87e29b21bc3e1156203d79dfef1fe424 (patch)
treea217d01a8976cf2cfbb83eea5d9d0f6d38568a38
parent2c3ac8ec9f5ac8285c7e443b9fee1be8cbef2e3e (diff)
parentbac56d3fd2a822a2971ff4fb32c9804392b54fb6 (diff)
Merge pull request #20902 from vespa-engine/toregge/prepare-for-throttling-replayv7.532.27
Prepare for throttling of replay.
-rw-r--r--searchcore/src/vespa/searchcore/proton/common/CMakeLists.txt1
-rw-r--r--searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp6
-rw-r--r--searchcore/src/vespa/searchcore/proton/common/feedtoken.h24
-rw-r--r--searchcore/src/vespa/searchcore/proton/common/replay_feedtoken_state.cpp37
-rw-r--r--searchcore/src/vespa/searchcore/proton/common/replay_feedtoken_state.h26
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/feedstates.cpp21
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/operationdonecontext.cpp13
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/operationdonecontext.h10
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp6
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/putdonecontext.h4
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp4
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/removedonecontext.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp32
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/updatedonecontext.cpp4
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/updatedonecontext.h2
16 files changed, 150 insertions, 44 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/common/CMakeLists.txt b/searchcore/src/vespa/searchcore/proton/common/CMakeLists.txt
index 421e602a9cf..03bad4c7eaf 100644
--- a/searchcore/src/vespa/searchcore/proton/common/CMakeLists.txt
+++ b/searchcore/src/vespa/searchcore/proton/common/CMakeLists.txt
@@ -18,6 +18,7 @@ vespa_add_library(searchcore_pcommon STATIC
ipendinglidtracker.cpp
operation_rate_tracker.cpp
pendinglidtracker.cpp
+ replay_feedtoken_state.cpp
select_utils.cpp
selectcontext.cpp
selectpruner.cpp
diff --git a/searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp b/searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp
index 675dce10be4..c74819577e9 100644
--- a/searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp
+++ b/searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp
@@ -33,6 +33,12 @@ State::setResult(ResultUP result, bool documentWasFound) {
_result = std::move(result);
}
+bool
+State::is_replay() const noexcept
+{
+ return false;
+}
+
void
State::fail()
{
diff --git a/searchcore/src/vespa/searchcore/proton/common/feedtoken.h b/searchcore/src/vespa/searchcore/proton/common/feedtoken.h
index 8ccb4863878..53f551999d2 100644
--- a/searchcore/src/vespa/searchcore/proton/common/feedtoken.h
+++ b/searchcore/src/vespa/searchcore/proton/common/feedtoken.h
@@ -22,19 +22,33 @@ public:
virtual void send(ResultUP result, bool documentWasFound) = 0;
};
+
+/*
+ * Interface class for feed token state.
+ */
+class IState : public vespalib::IDestructorCallback {
+public:
+ virtual bool is_replay() const noexcept = 0;
+ virtual void fail() = 0;
+ virtual void setResult(ResultUP result, bool documentWasFound) = 0;
+ virtual const storage::spi::Result &getResult() = 0;
+};
+
+
/**
* This holds the result of the feed operation until it is either failed or acked.
* Guarantees that the result is propagated back to the invoker via ITransport interface.
*/
-class State : public vespalib::IDestructorCallback {
+class State : public IState {
public:
State(const State &) = delete;
State & operator = (const State &) = delete;
State(ITransport & transport);
~State() override;
- void fail();
- void setResult(ResultUP result, bool documentWasFound);
- const storage::spi::Result &getResult() { return *_result; }
+ bool is_replay() const noexcept override;
+ void fail() override;
+ void setResult(ResultUP result, bool documentWasFound) override;
+ const storage::spi::Result &getResult() override { return *_result; }
protected:
void ack();
private:
@@ -71,7 +85,7 @@ make(std::shared_ptr<ITransport> transport) {
}
-using FeedToken = std::shared_ptr<feedtoken::State>;
+using FeedToken = std::shared_ptr<feedtoken::IState>;
} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/common/replay_feedtoken_state.cpp b/searchcore/src/vespa/searchcore/proton/common/replay_feedtoken_state.cpp
new file mode 100644
index 00000000000..a3a473c9548
--- /dev/null
+++ b/searchcore/src/vespa/searchcore/proton/common/replay_feedtoken_state.cpp
@@ -0,0 +1,37 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "replay_feedtoken_state.h"
+
+namespace proton::feedtoken {
+
+ReplayState::ReplayState(vespalib::SharedOperationThrottler::Token throttler_token)
+ : IState(),
+ _throttler_token(std::move(throttler_token))
+{
+}
+
+ReplayState::~ReplayState() = default;
+
+bool
+ReplayState::is_replay() const noexcept
+{
+ return true;
+}
+
+void
+ReplayState::fail()
+{
+}
+
+void
+ReplayState::setResult(ResultUP, bool)
+{
+}
+
+const storage::spi::Result&
+ReplayState::getResult()
+{
+ abort();
+}
+
+}
diff --git a/searchcore/src/vespa/searchcore/proton/common/replay_feedtoken_state.h b/searchcore/src/vespa/searchcore/proton/common/replay_feedtoken_state.h
new file mode 100644
index 00000000000..512f12a50af
--- /dev/null
+++ b/searchcore/src/vespa/searchcore/proton/common/replay_feedtoken_state.h
@@ -0,0 +1,26 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include "feedtoken.h"
+#include <vespa/vespalib/util/shared_operation_throttler.h>
+
+namespace proton::feedtoken {
+
+/*
+ * Feed token state used during replay. It contains a throttler token
+ * which allows the related shared operation throttler to track the completion
+ * of the feed operation.
+ */
+class ReplayState : public IState {
+ vespalib::SharedOperationThrottler::Token _throttler_token;
+public:
+ ~ReplayState() override;
+ ReplayState(vespalib::SharedOperationThrottler::Token throttler_token);
+ bool is_replay() const noexcept override;
+ void fail() override;
+ void setResult(ResultUP result, bool documentWasFound) override;
+ const storage::spi::Result &getResult() override;
+};
+
+}
diff --git a/searchcore/src/vespa/searchcore/proton/server/feedstates.cpp b/searchcore/src/vespa/searchcore/proton/server/feedstates.cpp
index d2626a0d9f4..1c8e17fc474 100644
--- a/searchcore/src/vespa/searchcore/proton/server/feedstates.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/feedstates.cpp
@@ -8,8 +8,10 @@
#include <vespa/searchcore/proton/bucketdb/ibucketdbhandler.h>
#include <vespa/searchcore/proton/feedoperation/operations.h>
#include <vespa/searchcore/proton/common/eventlogger.h>
+#include <vespa/searchcore/proton/common/replay_feedtoken_state.h>
#include <vespa/vespalib/util/idestructorcallback.h>
#include <vespa/vespalib/util/lambdatask.h>
+#include <vespa/vespalib/util/shared_operation_throttler.h>
#include <cassert>
#include <vespa/log/log.h>
@@ -69,14 +71,19 @@ public:
~TransactionLogReplayPacketHandler() override = default;
+ FeedToken make_replay_feed_token() {
+ vespalib::SharedOperationThrottler::Token throttler_token;
+ return std::make_shared<feedtoken::ReplayState>(std::move(throttler_token));
+ }
+
void replay(const PutOperation &op) override {
- _feed_view_ptr->handlePut(FeedToken(), op);
+ _feed_view_ptr->handlePut(make_replay_feed_token(), op);
}
void replay(const RemoveOperation &op) override {
- _feed_view_ptr->handleRemove(FeedToken(), op);
+ _feed_view_ptr->handleRemove(make_replay_feed_token(), op);
}
void replay(const UpdateOperation &op) override {
- _feed_view_ptr->handleUpdate(FeedToken(), op);
+ _feed_view_ptr->handleUpdate(make_replay_feed_token(), op);
}
void replay(const NoopOperation &) override {} // ignored
void replay(const NewConfigOperation &op) override {
@@ -84,7 +91,7 @@ public:
}
void replay(const DeleteBucketOperation &op) override {
- _feed_view_ptr->handleDeleteBucket(op, IDestructorCallback::SP());
+ _feed_view_ptr->handleDeleteBucket(op, make_replay_feed_token());
}
void replay(const SplitBucketOperation &op) override {
_bucketDBHandler.handleSplit(op.getSerialNum(), op.getSource(),
@@ -95,15 +102,15 @@ public:
op.getSource2(), op.getTarget());
}
void replay(const PruneRemovedDocumentsOperation &op) override {
- _feed_view_ptr->handlePruneRemovedDocuments(op, IDestructorCallback::SP());
+ _feed_view_ptr->handlePruneRemovedDocuments(op, make_replay_feed_token());
}
void replay(const MoveOperation &op) override {
- _feed_view_ptr->handleMove(op, IDestructorCallback::SP());
+ _feed_view_ptr->handleMove(op, make_replay_feed_token());
}
void replay(const CreateBucketOperation &) override {
}
void replay(const CompactLidSpaceOperation &op) override {
- _feed_view_ptr->handleCompactLidSpace(op, IDestructorCallback::SP());
+ _feed_view_ptr->handleCompactLidSpace(op, make_replay_feed_token());
}
NewConfigOperation::IStreamHandler &getNewConfigStreamHandler() override {
return _config_store;
diff --git a/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.cpp b/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.cpp
index 53b12972c44..9b1c6de15df 100644
--- a/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.cpp
@@ -1,14 +1,23 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "operationdonecontext.h"
+#include <vespa/searchcore/proton/common/feedtoken.h>
namespace proton {
-OperationDoneContext::OperationDoneContext(IDestructorCallback::SP token)
- : _token(std::move(token))
+OperationDoneContext::OperationDoneContext(std::shared_ptr<feedtoken::IState> token, std::shared_ptr<vespalib::IDestructorCallback> done_callback)
+ : _token(std::move(token)),
+ _done_callback(std::move(done_callback))
{
}
OperationDoneContext::~OperationDoneContext() = default;
+bool
+OperationDoneContext::is_replay() const
+{
+ return (!_token || _token->is_replay());
+}
+
+
} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.h b/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.h
index 113aae8c9bf..baf0e98d5a4 100644
--- a/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.h
+++ b/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.h
@@ -4,6 +4,8 @@
#include <vespa/vespalib/util/idestructorcallback.h>
+namespace proton::feedtoken { class IState; }
+
namespace proton {
/**
@@ -16,13 +18,13 @@ namespace proton {
class OperationDoneContext : public vespalib::IDestructorCallback
{
public:
- using IDestructorCallback = vespalib::IDestructorCallback;
- OperationDoneContext(IDestructorCallback::SP token);
+ OperationDoneContext(std::shared_ptr<feedtoken::IState> token, std::shared_ptr<IDestructorCallback> done_callback);
~OperationDoneContext() override;
- bool hasToken() const { return static_cast<bool>(_token); }
+ bool is_replay() const;
private:
- IDestructorCallback::SP _token;
+ std::shared_ptr<feedtoken::IState> _token;
+ std::shared_ptr<vespalib::IDestructorCallback> _done_callback;
};
} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp b/searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp
index 7801f21c906..695f39c0097 100644
--- a/searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp
@@ -9,9 +9,11 @@ using document::Document;
namespace proton {
-PutDoneContext::PutDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted,
+PutDoneContext::PutDoneContext(std::shared_ptr<feedtoken::IState> token,
+ std::shared_ptr<vespalib::IDestructorCallback> done_callback,
+ IPendingLidTracker::Token uncommitted,
std::shared_ptr<const Document> doc, uint32_t lid)
- : OperationDoneContext(std::move(token)),
+ : OperationDoneContext(std::move(token), std::move(done_callback)),
_uncommitted(std::move(uncommitted)),
_lid(lid),
_docIdLimit(nullptr),
diff --git a/searchcore/src/vespa/searchcore/proton/server/putdonecontext.h b/searchcore/src/vespa/searchcore/proton/server/putdonecontext.h
index 00e8ac46c93..e0f55816314 100644
--- a/searchcore/src/vespa/searchcore/proton/server/putdonecontext.h
+++ b/searchcore/src/vespa/searchcore/proton/server/putdonecontext.h
@@ -28,7 +28,9 @@ class PutDoneContext : public OperationDoneContext
std::shared_ptr<const document::Document> _doc;
public:
- PutDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted,
+ PutDoneContext(std::shared_ptr<feedtoken::IState> token,
+ std::shared_ptr<vespalib::IDestructorCallback> done_callback,
+ IPendingLidTracker::Token uncommitted,
std::shared_ptr<const document::Document> doc, uint32_t lid);
~PutDoneContext() override;
diff --git a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp
index 558a57bb8c6..0c93992d427 100644
--- a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp
@@ -4,8 +4,8 @@
namespace proton {
-RemoveDoneContext::RemoveDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted)
- : OperationDoneContext(std::move(token)),
+RemoveDoneContext::RemoveDoneContext(std::shared_ptr<feedtoken::IState> token, std::shared_ptr<IDestructorCallback> done_callback, IPendingLidTracker::Token uncommitted)
+ : OperationDoneContext(std::move(token), std::move(done_callback)),
_uncommitted(std::move(uncommitted))
{
}
diff --git a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h
index 28e15389bb2..62db0f20b84 100644
--- a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h
+++ b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h
@@ -19,7 +19,7 @@ class RemoveDoneContext : public OperationDoneContext
IPendingLidTracker::Token _uncommitted;
public:
- RemoveDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted);
+ RemoveDoneContext(std::shared_ptr<feedtoken::IState>, std::shared_ptr<vespalib::IDestructorCallback> done_callback, IPendingLidTracker::Token uncommitted);
~RemoveDoneContext() override;
};
diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp
index 97bd940b403..3f1d290acf3 100644
--- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp
@@ -43,10 +43,10 @@ namespace proton {
namespace {
std::shared_ptr<PutDoneContext>
-createPutDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted,
+createPutDoneContext(FeedToken token, std::shared_ptr<IDestructorCallback> done_callback, IPendingLidTracker::Token uncommitted,
std::shared_ptr<const Document> doc, uint32_t lid)
{
- return std::make_shared<PutDoneContext>(std::move(token), std::move(uncommitted), std::move(doc), lid);
+ return std::make_shared<PutDoneContext>(std::move(token), std::move(done_callback), std::move(uncommitted), std::move(doc), lid);
}
std::shared_ptr<UpdateDoneContext>
@@ -66,9 +66,9 @@ void setPrev(DocumentOperation &op, const documentmetastore::IStore::Result &res
}
std::shared_ptr<RemoveDoneContext>
-createRemoveDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted)
+createRemoveDoneContext(FeedToken token, std::shared_ptr<IDestructorCallback> done_callback, IPendingLidTracker::Token uncommitted)
{
- return std::make_shared<RemoveDoneContext>(std::move(token), std::move(uncommitted));
+ return std::make_shared<RemoveDoneContext>(std::move(token), std::move(done_callback), std::move(uncommitted));
}
class SummaryPutDoneContext : public OperationDoneContext
@@ -80,7 +80,7 @@ public:
};
SummaryPutDoneContext::SummaryPutDoneContext(FeedToken token, IPendingLidTracker::Token uncommitted)
- : OperationDoneContext(std::move(token)),
+ : OperationDoneContext(std::move(token), {}),
_uncommitted(std::move(uncommitted))
{}
@@ -249,7 +249,7 @@ StoreOnlyFeedView::internalPut(FeedToken token, const PutOperation &putOp)
if (putOp.changedDbdId() && useDocumentMetaStore(serialNum)) {
_gidToLidChangeHandler.notifyPut(token, docId.getGlobalId(), putOp.getLid(), serialNum);
}
- auto onWriteDone = createPutDoneContext(std::move(token), get_pending_lid_token(putOp), doc, putOp.getLid());
+ auto onWriteDone = createPutDoneContext(std::move(token), {}, get_pending_lid_token(putOp), doc, putOp.getLid());
putSummary(serialNum, putOp.getLid(), doc, onWriteDone);
putAttributes(serialNum, putOp.getLid(), *doc, onWriteDone);
putIndexedFields(serialNum, putOp.getLid(), doc, onWriteDone);
@@ -257,7 +257,7 @@ StoreOnlyFeedView::internalPut(FeedToken token, const PutOperation &putOp)
if (docAlreadyExists && putOp.changedDbdId()) {
//TODO, better to have an else than an assert ?
assert(!putOp.getValidDbdId(_params._subDbId));
- internalRemove(std::move(token), _pendingLidsForCommit->produce(putOp.getPrevLid()), serialNum, putOp.getPrevLid());
+ internalRemove(std::move(token), {}, _pendingLidsForCommit->produce(putOp.getPrevLid()), serialNum, putOp.getPrevLid());
}
}
@@ -458,13 +458,13 @@ StoreOnlyFeedView::makeUpdatedDocument(bool useDocStore, Lid lid, const Document
Document::UP prevDoc = _summaryAdapter->get(lid, *_repo);
Document::UP newDoc;
vespalib::nbostream newStream(12345);
- assert(!onWriteDone->hasToken() || useDocStore);
+ assert(onWriteDone->is_replay() || useDocStore);
if (useDocStore) {
assert(prevDoc);
}
if (!prevDoc) {
// Replaying, document removed later before summary was flushed.
- assert(!onWriteDone->hasToken());
+ assert(onWriteDone->is_replay());
// If we've passed serial number for flushed index then we could
// also check that this operation is marked for ignore by index
// proxy.
@@ -478,7 +478,7 @@ StoreOnlyFeedView::makeUpdatedDocument(bool useDocStore, Lid lid, const Document
} else {
// Replaying, document removed and lid reused before summary
// was flushed.
- assert(!onWriteDone->hasToken() && !useDocStore);
+ assert(onWriteDone->is_replay() && !useDocStore);
}
}
promisedDoc.set_value(std::move(newDoc));
@@ -552,7 +552,7 @@ StoreOnlyFeedView::internalRemove(FeedToken token, const RemoveOperationWithDocI
if (rmOp.changedDbdId()) {
//TODO Prefer else over assert ?
assert(!rmOp.getValidDbdId(_params._subDbId));
- internalRemove(std::move(token), _pendingLidsForCommit->produce(rmOp.getPrevLid()), serialNum, rmOp.getPrevLid());
+ internalRemove(std::move(token), {}, _pendingLidsForCommit->produce(rmOp.getPrevLid()), serialNum, rmOp.getPrevLid());
}
}
}
@@ -569,16 +569,16 @@ StoreOnlyFeedView::internalRemove(FeedToken token, const RemoveOperationWithGid
if (rmOp.getValidPrevDbdId(_params._subDbId)) {
if (rmOp.changedDbdId()) {
assert(!rmOp.getValidDbdId(_params._subDbId));
- internalRemove(std::move(token), _pendingLidsForCommit->produce(rmOp.getPrevLid()), serialNum, rmOp.getPrevLid());
+ internalRemove(std::move(token), {}, _pendingLidsForCommit->produce(rmOp.getPrevLid()), serialNum, rmOp.getPrevLid());
}
}
}
void
-StoreOnlyFeedView::internalRemove(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted, SerialNum serialNum, Lid lid)
+StoreOnlyFeedView::internalRemove(FeedToken token, std::shared_ptr<IDestructorCallback> done_callback, IPendingLidTracker::Token uncommitted, SerialNum serialNum, Lid lid)
{
_lidReuseDelayer.delayReuse(lid);
- auto onWriteDone = createRemoveDoneContext(std::move(token), std::move(uncommitted));
+ auto onWriteDone = createRemoveDoneContext(std::move(token), std::move(done_callback), std::move(uncommitted));
removeSummary(serialNum, lid, onWriteDone);
removeAttributes(serialNum, lid, onWriteDone);
removeIndexedFields(serialNum, lid, onWriteDone);
@@ -706,13 +706,13 @@ StoreOnlyFeedView::handleMove(const MoveOperation &moveOp, DoneCallback doneCtx)
if (moveOp.changedDbdId() && useDocumentMetaStore(serialNum)) {
_gidToLidChangeHandler.notifyPut(FeedToken(), docId.getGlobalId(), moveOp.getLid(), serialNum);
}
- auto onWriteDone = createPutDoneContext(doneCtx, _pendingLidsForCommit->produce(moveOp.getLid()), doc, moveOp.getLid());
+ auto onWriteDone = createPutDoneContext({}, doneCtx, _pendingLidsForCommit->produce(moveOp.getLid()), doc, moveOp.getLid());
putSummary(serialNum, moveOp.getLid(), doc, onWriteDone);
putAttributes(serialNum, moveOp.getLid(), *doc, onWriteDone);
putIndexedFields(serialNum, moveOp.getLid(), doc, onWriteDone);
}
if (docAlreadyExists && moveOp.changedDbdId()) {
- internalRemove(doneCtx, _pendingLidsForCommit->produce(moveOp.getPrevLid()), serialNum, moveOp.getPrevLid());
+ internalRemove({}, doneCtx, _pendingLidsForCommit->produce(moveOp.getPrevLid()), serialNum, moveOp.getPrevLid());
}
}
diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h
index c25accaf4a4..bd8509fa796 100644
--- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h
+++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h
@@ -180,7 +180,7 @@ private:
// returns the number of documents removed.
size_t removeDocuments(const RemoveDocumentsOperation &op, bool remove_index_and_attribute_fields, DoneCallback onDone);
- void internalRemove(IDestructorCallbackSP token, IPendingLidTracker::Token uncommitted, SerialNum serialNum, Lid lid);
+ void internalRemove(FeedToken token, std::shared_ptr<vespalib::IDestructorCallback> done_callback,IPendingLidTracker::Token uncommitted, SerialNum serialNum, Lid lid);
IPendingLidTracker::Token get_pending_lid_token(const DocumentOperation &op);
diff --git a/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.cpp b/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.cpp
index 5842965a18a..16099700980 100644
--- a/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.cpp
@@ -7,8 +7,8 @@ using document::Document;
namespace proton {
-UpdateDoneContext::UpdateDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted, const document::DocumentUpdate::SP &upd)
- : OperationDoneContext(std::move(token)),
+UpdateDoneContext::UpdateDoneContext(std::shared_ptr<feedtoken::IState> token, IPendingLidTracker::Token uncommitted, const document::DocumentUpdate::SP &upd)
+ : OperationDoneContext(std::move(token), {}),
_uncommitted(std::move(uncommitted)),
_upd(upd),
_doc()
diff --git a/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.h b/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.h
index 62448102f30..7dd6c4a61f2 100644
--- a/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.h
+++ b/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.h
@@ -24,7 +24,7 @@ class UpdateDoneContext : public OperationDoneContext
document::DocumentUpdate::SP _upd;
std::shared_future<std::unique_ptr<const document::Document>> _doc;
public:
- UpdateDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted, const document::DocumentUpdate::SP &upd);
+ UpdateDoneContext(std::shared_ptr<feedtoken::IState> token, IPendingLidTracker::Token uncommitted, const document::DocumentUpdate::SP &upd);
~UpdateDoneContext() override;
const document::DocumentUpdate &getUpdate() { return *_upd; }