diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-11-11 14:24:17 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2020-11-11 14:24:17 +0000 |
commit | 8982a6e10eb47b03039bb3c1e140e8629c0b8634 (patch) | |
tree | 995a7aaa8f9c9708c17a0feb8a18101e1962dcfa /searchcore | |
parent | 1b7e6a0dfb0b8686aeddce7418d28bbdfd4909c1 (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.cpp | 19 |
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); } |