summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-03-10 21:51:25 +0100
committerGitHub <noreply@github.com>2022-03-10 21:51:25 +0100
commita491754a16280e39778345e12b062dd2466d4323 (patch)
tree4a3f232c16addca33294b0a1a8f155d734a6754b
parent2263b7665b47555014e2dda46b94d8f065cf4504 (diff)
parent1ad627235e1a3119e5fd53f92355f31cc98014b8 (diff)
Merge pull request #21641 from vespa-engine/toregge/reset-onwritedone-befor-setting-values-on-promises
Reset onWriteDone before calling set_value() on promises.
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp5
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h2
2 files changed, 4 insertions, 3 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp
index 170b6f99930..f34885974b8 100644
--- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp
@@ -455,7 +455,7 @@ StoreOnlyFeedView::internalUpdate(FeedToken token, const UpdateOperation &updOp)
promisedDoc = std::move(promisedDoc),
promisedStream = std::move(promisedStream), this]() mutable
{
- makeUpdatedDocument(useDocStore, lid, *upd, onWriteDone,
+ makeUpdatedDocument(useDocStore, lid, *upd, std::move(onWriteDone),
std::move(promisedDoc), std::move(promisedStream));
});
_writeService.shared().execute(CpuUsage::wrap(std::move(task), CpuUsage::Category::WRITE));
@@ -465,7 +465,7 @@ StoreOnlyFeedView::internalUpdate(FeedToken token, const UpdateOperation &updOp)
void
StoreOnlyFeedView::makeUpdatedDocument(bool useDocStore, Lid lid, const DocumentUpdate & update,
- OnOperationDoneType onWriteDone, PromisedDoc promisedDoc,
+ std::decay_t<OnOperationDoneType> onWriteDone, PromisedDoc promisedDoc,
PromisedStream promisedStream)
{
Document::UP prevDoc = _summaryAdapter->get(lid, *_repo);
@@ -494,6 +494,7 @@ StoreOnlyFeedView::makeUpdatedDocument(bool useDocStore, Lid lid, const Document
assert(onWriteDone->is_replay() && !useDocStore);
}
}
+ onWriteDone.reset();
promisedDoc.set_value(std::move(newDoc));
promisedStream.set_value(std::move(newStream));
}
diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h
index bd8509fa796..e36946c214d 100644
--- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h
+++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h
@@ -184,7 +184,7 @@ private:
IPendingLidTracker::Token get_pending_lid_token(const DocumentOperation &op);
- void makeUpdatedDocument(bool useDocStore, Lid lid, const DocumentUpdate & update, OnOperationDoneType onWriteDone,
+ void makeUpdatedDocument(bool useDocStore, Lid lid, const DocumentUpdate & update, std::decay_t<OnOperationDoneType> onWriteDone,
PromisedDoc promisedDoc, PromisedStream promisedStream);
protected: