diff options
7 files changed, 39 insertions, 34 deletions
diff --git a/searchcore/src/tests/proton/index/index_writer/index_writer_test.cpp b/searchcore/src/tests/proton/index/index_writer/index_writer_test.cpp index 358e8c03cd0..ac17c17892c 100644 --- a/searchcore/src/tests/proton/index/index_writer/index_writer_test.cpp +++ b/searchcore/src/tests/proton/index/index_writer/index_writer_test.cpp @@ -52,8 +52,10 @@ struct MyIndexManager : public test::MockIndexManager void putDocument(uint32_t lid, const Document &, SerialNum serialNum) override { puts[lid].push_back(serialNum); } - void removeDocument(uint32_t lid, SerialNum serialNum) override { - removes[lid].push_back(serialNum); + void removeDocuments(LidVector lids, SerialNum serialNum) override { + for (uint32_t lid : lids) { + removes[lid].push_back(serialNum); + } } void commit(SerialNum serialNum, OnWriteDoneType) override { commitSerial = serialNum; diff --git a/searchcore/src/vespa/searchcore/proton/index/index_writer.cpp b/searchcore/src/vespa/searchcore/proton/index/index_writer.cpp index 1f5412805ab..f86ada8c45c 100644 --- a/searchcore/src/vespa/searchcore/proton/index/index_writer.cpp +++ b/searchcore/src/vespa/searchcore/proton/index/index_writer.cpp @@ -50,8 +50,8 @@ IndexWriter::removeDocs(search::SerialNum serialNum, LidVector lids) } for (search::DocumentIdT lid : lids) { VLOG(getDebugLevel(lid, NULL), "Handle remove: serial(%" PRIu64 "), num_lids(%lu)", serialNum, lids.size()); - _mgr->removeDocument(lid, serialNum); } + _mgr->removeDocuments(std::move(lids), serialNum); } void diff --git a/searchcore/src/vespa/searchcore/proton/index/indexmanager.h b/searchcore/src/vespa/searchcore/proton/index/indexmanager.h index af36e960202..8212978527a 100644 --- a/searchcore/src/vespa/searchcore/proton/index/indexmanager.h +++ b/searchcore/src/vespa/searchcore/proton/index/indexmanager.h @@ -90,8 +90,8 @@ public: _maintainer.putDocument(lid, doc, serialNum); } - void removeDocument(uint32_t lid, SerialNum serialNum) override { - _maintainer.removeDocument(lid, serialNum); + void removeDocuments(LidVector lids, SerialNum serialNum) override { + _maintainer.removeDocuments(std::move(lids), serialNum); } void commit(SerialNum serialNum, OnWriteDoneType onWriteDone) override { diff --git a/searchcore/src/vespa/searchcore/proton/test/mock_index_manager.h b/searchcore/src/vespa/searchcore/proton/test/mock_index_manager.h index 9dc1fbdd9f6..7c4de5be2db 100644 --- a/searchcore/src/vespa/searchcore/proton/test/mock_index_manager.h +++ b/searchcore/src/vespa/searchcore/proton/test/mock_index_manager.h @@ -3,35 +3,31 @@ #include <vespa/searchcorespi/index/iindexmanager.h> -namespace proton { - -namespace test { +namespace proton::test { /** * Mock of the IIndexManager interface used for unit testing. */ struct MockIndexManager : public searchcorespi::IIndexManager { - virtual void putDocument(uint32_t, const Document &, SerialNum) override {} - virtual void removeDocument(uint32_t, SerialNum) override {} - virtual void commit(SerialNum, OnWriteDoneType) override {} - virtual SerialNum getCurrentSerialNum() const override { return 0; } - virtual SerialNum getFlushedSerialNum() const override { return 0; } - virtual searchcorespi::IndexSearchable::SP getSearchable() const override { + void putDocument(uint32_t, const Document &, SerialNum) override {} + void removeDocuments(LidVector, SerialNum) override {} + void commit(SerialNum, OnWriteDoneType) override {} + SerialNum getCurrentSerialNum() const override { return 0; } + SerialNum getFlushedSerialNum() const override { return 0; } + searchcorespi::IndexSearchable::SP getSearchable() const override { return searchcorespi::IndexSearchable::SP(); } - virtual search::SearchableStats getSearchableStats() const override { + search::SearchableStats getSearchableStats() const override { return search::SearchableStats(); } - virtual searchcorespi::IFlushTarget::List getFlushTargets() override { + searchcorespi::IFlushTarget::List getFlushTargets() override { return searchcorespi::IFlushTarget::List(); } - virtual void setSchema(const Schema &, SerialNum) override {} - virtual void heartBeat(SerialNum) override {} + void setSchema(const Schema &, SerialNum) override {} + void heartBeat(SerialNum) override {} void compactLidSpace(uint32_t, SerialNum) override {} - virtual void setMaxFlushed(uint32_t) override { } + void setMaxFlushed(uint32_t) override { } }; -} // namespace test - -} // namespace proton +} diff --git a/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.h b/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.h index afc7a327723..02adcbc11ce 100644 --- a/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.h +++ b/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.h @@ -30,10 +30,10 @@ namespace searchcorespi { */ class IIndexManager { protected: - typedef document::Document Document; - typedef search::SerialNum SerialNum; - typedef search::index::Schema Schema; - + using Document = document::Document; + using SerialNum = search::SerialNum; + using Schema = search::index::Schema; + using LidVector = std::vector<uint32_t>; public: using OnWriteDoneType = const std::shared_ptr<vespalib::IDestructorCallback> &; @@ -107,7 +107,12 @@ public: * @param serialNum The unique monotoninc increasing serial number * for this operation. **/ - virtual void removeDocument(uint32_t lid, SerialNum serialNum) = 0; + void removeDocument(uint32_t lid, SerialNum serialNum) { + LidVector lids; + lids.push_back(lid); + removeDocuments(std::move(lids), serialNum); + } + virtual void removeDocuments(LidVector lids, SerialNum serialNum) = 0; /** * Commits the document puts and removes since the last commit, diff --git a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp index d58d0ab4ad6..57dca9d9be9 100644 --- a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp +++ b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp @@ -1183,15 +1183,17 @@ IndexMaintainer::putDocument(uint32_t lid, const Document &doc, SerialNum serial } void -IndexMaintainer::removeDocument(uint32_t lid, SerialNum serialNum) +IndexMaintainer::removeDocuments(LidVector lids, SerialNum serialNum) { assert(_ctx.getThreadingService().index().isCurrentThread()); LockGuard lock(_index_update_lock); - _current_index->removeDocument(lid); - _selector->setSource(lid, _current_index_id); - _source_list->setSource(lid); - ++_source_selector_changes; - _current_serial_num = serialNum; + for (uint32_t lid : lids) { + _current_index->removeDocument(lid); + _selector->setSource(lid, _current_index_id); + _source_list->setSource(lid); + ++_source_selector_changes; + _current_serial_num = serialNum; + } } void diff --git a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.h b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.h index be9d14ee1ad..816ec76cd1f 100644 --- a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.h +++ b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.h @@ -325,7 +325,7 @@ public: // Implements IIndexManager void putDocument(uint32_t lid, const Document &doc, SerialNum serialNum) override; - void removeDocument(uint32_t lid, SerialNum serialNum) override; + void removeDocuments(LidVector lids, SerialNum serialNum) override; void commit(SerialNum serialNum, OnWriteDoneType onWriteDone) override; void heartBeat(search::SerialNum serialNum) override; void compactLidSpace(uint32_t lidLimit, SerialNum serialNum) override; |