aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-10-27 16:21:20 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-10-27 16:21:20 +0000
commit78a39a4ae91b29ebd2f5701a7de7e40b862c2741 (patch)
tree555a41571079d5fe39876f05347c3ae0208dcc07 /searchcore
parent2c499957f8108176347f0021283ffea87695baf2 (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.cpp20
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h7
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 {