aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-11-11 14:24:17 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-11-11 14:24:17 +0000
commit8982a6e10eb47b03039bb3c1e140e8629c0b8634 (patch)
tree995a7aaa8f9c9708c17a0feb8a18101e1962dcfa /searchcore
parent1b7e6a0dfb0b8686aeddce7418d28bbdfd4909c1 (diff)
Avoid stalling the piepline by just daisy chaining the feedtokens.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp b/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp
index e93388cdea3..25be8e4a929 100644
--- a/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp
@@ -120,6 +120,20 @@ private:
std::unique_ptr<Executor::Task> _task;
};
+/**
+ * Wraps the original feed token so that it will be delivered
+ * when the derived operation is completed.
+ */
+class DaisyChainedFeedToken : public feedtoken::ITransport {
+public:
+ DaisyChainedFeedToken(FeedToken token) : _token(std::move(token)) {}
+ void send(ResultUP, bool ) override {
+ _token.reset();
+ }
+private:
+ FeedToken _token;
+};
+
} // namespace
void
@@ -206,9 +220,8 @@ FeedHandler::createNonExistingDocument(FeedToken token, const UpdateOperation &o
if (token) {
token->setResult(make_unique<UpdateResult>(putOp.getTimestamp()), true);
}
- TransportLatch latch(1);
- _activeFeedView->handlePut(feedtoken::make(latch), putOp);
- latch.await();
+
+ _activeFeedView->handlePut(feedtoken::make(std::make_unique<DaisyChainedFeedToken>(std::move(token))), putOp);
}