diff options
Diffstat (limited to 'searchcore')
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp index 7ca3cef5c15..cdc6df1fdf2 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp @@ -247,6 +247,15 @@ StoreOnlyFeedView::internalPut(FeedToken token, const PutOperation &putOp) if (putOp.getValidDbdId(_params._subDbId)) { if (putOp.changedDbdId() && useDocumentMetaStore(serialNum)) { + /* + * Don't pass replay feed token to GidToLidChangeHandler. + * + * The passed feed token is kept until the ForceCommitDoneTask scheduled by the next + * force commit has completed. If a replay feed token containing an active throttler + * token is passed to GidToLidChangeHandler then + * TransactionLogReplayFeedHandler::make_replay_feed_token() might deadlock, waiting for + * active throttler tokens to be destroyed. + */ FeedToken token_copy = (token && !token->is_replay()) ? token : FeedToken(); _gidToLidChangeHandler.notifyPut(std::move(token_copy), docId.getGlobalId(), putOp.getLid(), serialNum); } |