diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-10-29 17:06:07 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-29 17:06:07 +0200 |
commit | 013c93f1e8808403f22b19e0ad97882ba643772f (patch) | |
tree | ddb0928f0c4d95892be6cd68c2862c692cbeabc6 | |
parent | 908c3049cf3fca53ecb9f731fc68a1260c9a2652 (diff) | |
parent | 3683b7eca905b77070392bf8b42991ac4559c7c5 (diff) |
Merge pull request #19794 from vespa-engine/balder/use-vector-of-lids-in-api
Balder/use vector of lids in api
12 files changed, 77 insertions, 78 deletions
diff --git a/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp b/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp index 14a74e3be8e..1b4848f9c8b 100644 --- a/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp +++ b/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp @@ -23,7 +23,6 @@ #include <vespa/searchlib/attribute/attributefactory.h> #include <vespa/document/update/documentupdate.h> #include <vespa/searchlib/index/docbuilder.h> -#include <vespa/vespalib/util/time.h> #include <vespa/log/log.h> LOG_SETUP("feedview_test"); @@ -149,10 +148,12 @@ struct MyIndexWriter : public test::MockIndexWriter (void) doc; _tracer.tracePut(indexAdapterTypeName, serialNum, lid); } - void remove(SerialNum serialNum, const search::DocumentIdT lid) override { - LOG(info, "MyIndexAdapter::remove(): serialNum(%" PRIu64 "), docId(%u)", serialNum, lid); - _removes.push_back(lid); - _tracer.traceRemove(indexAdapterTypeName, serialNum, lid); + void removeDocs(SerialNum serialNum, LidVector lids) override { + for (search::DocumentIdT lid : lids) { + LOG(info, "MyIndexAdapter::remove(): serialNum(%" PRIu64 "), docId(%u)", serialNum, lid); + _removes.push_back(lid); + _tracer.traceRemove(indexAdapterTypeName, serialNum, lid); + } } void commit(SerialNum serialNum, OnWriteDoneType) override { ++_commitCount; 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 c1cdbdf9889..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 @@ -49,22 +49,21 @@ struct MyIndexManager : public test::MockIndexManager return toString(removes[lid]); } // Implements IIndexManager - virtual void putDocument(uint32_t lid, const Document &, - SerialNum serialNum) override { + void putDocument(uint32_t lid, const Document &, SerialNum serialNum) override { puts[lid].push_back(serialNum); } - virtual 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); + } } - virtual void commit(SerialNum serialNum, - OnWriteDoneType) override { + void commit(SerialNum serialNum, OnWriteDoneType) override { commitSerial = serialNum; } - virtual SerialNum getCurrentSerialNum() const override { + SerialNum getCurrentSerialNum() const override { return current; } - virtual SerialNum getFlushedSerialNum() const override { + SerialNum getFlushedSerialNum() const override { return flushed; } void compactLidSpace(uint32_t lidLimit, SerialNum serialNum) override { diff --git a/searchcore/src/vespa/searchcore/proton/index/i_index_writer.h b/searchcore/src/vespa/searchcore/proton/index/i_index_writer.h index b68af5227e9..8a920d3d580 100644 --- a/searchcore/src/vespa/searchcore/proton/index/i_index_writer.h +++ b/searchcore/src/vespa/searchcore/proton/index/i_index_writer.h @@ -17,14 +17,20 @@ public: typedef std::shared_ptr<IIndexWriter> SP; using IIndexManager = searchcorespi::IIndexManager; using OnWriteDoneType = IIndexManager::OnWriteDoneType; + using LidVector = std::vector<search::DocumentIdT>; - virtual ~IIndexWriter() {} + virtual ~IIndexWriter() = default; virtual const std::shared_ptr<IIndexManager> &getIndexManager() const = 0; // feed interface virtual void put(search::SerialNum serialNum, const document::Document &doc, const search::DocumentIdT lid) = 0; - virtual void remove(search::SerialNum serialNum, const search::DocumentIdT lid) = 0; + void remove(search::SerialNum serialNum, search::DocumentIdT lid) { + LidVector lids; + lids.push_back(lid); + removeDocs(serialNum, std::move(lids)); + } + virtual void removeDocs(search::SerialNum serialNum, LidVector lids) = 0; virtual void commit(search::SerialNum serialNum, OnWriteDoneType onWriteDone) = 0; virtual void heartBeat(search::SerialNum serialNum) = 0; virtual void compactLidSpace(search::SerialNum serialNum, const search::DocumentIdT lid) = 0; diff --git a/searchcore/src/vespa/searchcore/proton/index/index_writer.cpp b/searchcore/src/vespa/searchcore/proton/index/index_writer.cpp index 0d2f3914400..f86ada8c45c 100644 --- a/searchcore/src/vespa/searchcore/proton/index/index_writer.cpp +++ b/searchcore/src/vespa/searchcore/proton/index/index_writer.cpp @@ -43,13 +43,15 @@ IndexWriter::put(search::SerialNum serialNum, const document::Document &doc, con } void -IndexWriter::remove(search::SerialNum serialNum, const search::DocumentIdT lid) +IndexWriter::removeDocs(search::SerialNum serialNum, LidVector lids) { if (serialNum <= _mgr->getFlushedSerialNum()) { return; } - VLOG(getDebugLevel(lid, NULL), "Handle remove: serial(%" PRIu64 "), lid(%u)", serialNum, lid); - _mgr->removeDocument(lid, serialNum); + for (search::DocumentIdT lid : lids) { + VLOG(getDebugLevel(lid, NULL), "Handle remove: serial(%" PRIu64 "), num_lids(%lu)", serialNum, lids.size()); + } + _mgr->removeDocuments(std::move(lids), serialNum); } void diff --git a/searchcore/src/vespa/searchcore/proton/index/index_writer.h b/searchcore/src/vespa/searchcore/proton/index/index_writer.h index 48781fe23cf..28357d6fd55 100644 --- a/searchcore/src/vespa/searchcore/proton/index/index_writer.h +++ b/searchcore/src/vespa/searchcore/proton/index/index_writer.h @@ -15,22 +15,14 @@ private: public: IndexWriter(const IIndexManager::SP &mgr); - ~IndexWriter(); - /** - * Implements IIndexWriter. - */ - virtual const IIndexManager::SP & getIndexManager() const override { return _mgr; } - - virtual void put(search::SerialNum serialNum, - const document::Document &doc, - const search::DocumentIdT lid) override; - virtual void remove(search::SerialNum serialNum, - const search::DocumentIdT lid) override; - virtual void commit(search::SerialNum serialNum, - OnWriteDoneType onWriteDone) override; - - virtual void - heartBeat(search::SerialNum serialNum) override; + ~IndexWriter() override; + const IIndexManager::SP & getIndexManager() const override { return _mgr; } + + void put(search::SerialNum serialNum, const document::Document &doc, const search::DocumentIdT lid) override; + void removeDocs(search::SerialNum serialNum, LidVector lids) override; + void commit(search::SerialNum serialNum, OnWriteDoneType onWriteDone) override; + + void heartBeat(search::SerialNum serialNum) override; void compactLidSpace(search::SerialNum serialNum, const search::DocumentIdT lid) override; }; 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/server/searchable_feed_view.cpp b/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp index 5ee3f17e127..6101e8f0918 100644 --- a/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp @@ -153,9 +153,9 @@ SearchableFeedView::performIndexRemove(SerialNum serialNum, const LidVector &lid VLOG(getDebugLevel(lid, nullptr), "database(%s): performIndexRemove: serialNum(%" PRIu64 "), lid(%d)", _params._docTypeName.toString().c_str(), serialNum, lid); - - _indexWriter->remove(serialNum, lid); } + + _indexWriter->removeDocs(serialNum, lidsToRemove); } void 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/searchcore/src/vespa/searchcore/proton/test/mock_index_writer.h b/searchcore/src/vespa/searchcore/proton/test/mock_index_writer.h index 30a2f638fc5..96af605b27c 100644 --- a/searchcore/src/vespa/searchcore/proton/test/mock_index_writer.h +++ b/searchcore/src/vespa/searchcore/proton/test/mock_index_writer.h @@ -3,9 +3,7 @@ #include <vespa/searchcore/proton/index/i_index_writer.h> -namespace proton { - -namespace test { +namespace proton::test { /** * Mock of the IIndexWriter interface used for unit testing. @@ -15,14 +13,12 @@ struct MockIndexWriter : public IIndexWriter IIndexManager::SP _idxMgr; MockIndexWriter() : _idxMgr() {} MockIndexWriter(const IIndexManager::SP &idxMgr) : _idxMgr(idxMgr) {} - virtual const IIndexManager::SP &getIndexManager() const override { return _idxMgr; } - virtual void put(search::SerialNum, const document::Document &, const search::DocumentIdT) override {} - virtual void remove(search::SerialNum, const search::DocumentIdT) override {} - virtual void commit(search::SerialNum, OnWriteDoneType) override {} - virtual void heartBeat(search::SerialNum) override {} + const IIndexManager::SP &getIndexManager() const override { return _idxMgr; } + void put(search::SerialNum, const document::Document &, const search::DocumentIdT) override {} + void removeDocs(search::SerialNum, LidVector) override {} + void commit(search::SerialNum, OnWriteDoneType) override {} + void heartBeat(search::SerialNum) override {} void compactLidSpace(search::SerialNum, const search::DocumentIdT) 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..07676b4b330 100644 --- a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp +++ b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp @@ -1183,14 +1183,16 @@ 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; + for (uint32_t lid : lids) { + _current_index->removeDocument(lid); + _selector->setSource(lid, _current_index_id); + _source_list->setSource(lid); + } + _source_selector_changes += lids.size(); _current_serial_num = serialNum; } 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; |