summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-10-29 17:06:07 +0200
committerGitHub <noreply@github.com>2021-10-29 17:06:07 +0200
commit013c93f1e8808403f22b19e0ad97882ba643772f (patch)
treeddb0928f0c4d95892be6cd68c2862c692cbeabc6
parent908c3049cf3fca53ecb9f731fc68a1260c9a2652 (diff)
parent3683b7eca905b77070392bf8b42991ac4559c7c5 (diff)
Merge pull request #19794 from vespa-engine/balder/use-vector-of-lids-in-api
Balder/use vector of lids in api
-rw-r--r--searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp11
-rw-r--r--searchcore/src/tests/proton/index/index_writer/index_writer_test.cpp17
-rw-r--r--searchcore/src/vespa/searchcore/proton/index/i_index_writer.h10
-rw-r--r--searchcore/src/vespa/searchcore/proton/index/index_writer.cpp8
-rw-r--r--searchcore/src/vespa/searchcore/proton/index/index_writer.h24
-rw-r--r--searchcore/src/vespa/searchcore/proton/index/indexmanager.h4
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp4
-rw-r--r--searchcore/src/vespa/searchcore/proton/test/mock_index_manager.h30
-rw-r--r--searchcore/src/vespa/searchcore/proton/test/mock_index_writer.h18
-rw-r--r--searchcorespi/src/vespa/searchcorespi/index/iindexmanager.h15
-rw-r--r--searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp12
-rw-r--r--searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.h2
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;