diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-10-27 16:21:20 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-10-27 16:21:20 +0000 |
commit | 78a39a4ae91b29ebd2f5701a7de7e40b862c2741 (patch) | |
tree | 555a41571079d5fe39876f05347c3ae0208dcc07 /searchcore | |
parent | 2c499957f8108176347f0021283ffea87695baf2 (diff) |
Batch remove ops against summary executor to on operation per delete bucket.
Diffstat (limited to 'searchcore')
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp | 20 | ||||
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h | 7 |
2 files changed, 21 insertions, 6 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp index d24bd9cbdc6..1025ee893e2 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp @@ -354,6 +354,22 @@ StoreOnlyFeedView::removeSummary(SerialNum serialNum, Lid lid, OnWriteDoneType o _summaryAdapter->remove(serialNum, lid); })); } +void +StoreOnlyFeedView::removeSummaries(SerialNum serialNum, const LidVector & lids, OnWriteDoneType onDone) { + std::vector<IPendingLidTracker::Token> trackerTokens; + trackerTokens.reserve(lids.size()); + std::for_each(lids.begin(), lids.end(), [this, &trackerTokens](Lid lid) { + trackerTokens.emplace_back(_pendingLidsForDocStore.produce(lid)); + }); + summaryExecutor().execute( + makeLambdaTask([serialNum, lids = std::move(lids), onDone, trackerTokens = std::move(trackerTokens), this] { + (void) onDone; + (void) trackerTokens; + std::for_each(lids.begin(), lids.end(), [this, serialNum](Lid lid) { + _summaryAdapter->remove(serialNum, lid); + }); + })); +} void StoreOnlyFeedView::heartBeatSummary(SerialNum serialNum) { @@ -646,9 +662,7 @@ StoreOnlyFeedView::removeDocuments(const RemoveDocumentsOperation &op, bool remo removeAttributes(serialNum, lidsToRemove, onWriteDone); } if (useDocumentStore(serialNum + 1)) { - for (const auto &lid : lidsToRemove) { - removeSummary(serialNum, lid, onWriteDone); - } + removeSummaries(serialNum, lidsToRemove, onWriteDone); } return lidsToRemove.size(); } diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h index dc4b26d1ce2..6b4dada1313 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h @@ -156,10 +156,11 @@ private: searchcorespi::index::IThreadService & summaryExecutor() { return _writeService.summary(); } - void putSummary(SerialNum serialNum, Lid lid, FutureStream doc, OnOperationDoneType onDone); + void putSummary(SerialNum serialNum, Lid lid, FutureStream doc, OnOperationDoneType onDone); void putSummaryNoop(FutureStream doc, OnOperationDoneType onDone); - void putSummary(SerialNum serialNum, Lid lid, DocumentSP doc, OnOperationDoneType onDone); - void removeSummary(SerialNum serialNum, Lid lid, OnWriteDoneType onDone); + void putSummary(SerialNum serialNum, Lid lid, DocumentSP doc, OnOperationDoneType onDone); + void removeSummary(SerialNum serialNum, Lid lid, OnWriteDoneType onDone); + void removeSummaries(SerialNum serialNum, const LidVector & lids, OnWriteDoneType onDone); void heartBeatSummary(SerialNum serialNum); bool useDocumentStore(SerialNum replaySerialNum) const { |