summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-09-30 20:48:00 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-10-23 08:19:44 +0000
commitcf456171ddd84368d1e5af85cf1f8c378b1d99d6 (patch)
tree39daa9dbb1a0bba6108ebd908c39e6871379d4af
parent24fe152948851e1f11c63e86b96a78db91343a61 (diff)
Drop immediate commit, as it is gone.
-rw-r--r--searchcore/src/tests/proton/attribute/attribute_populator/attribute_populator_test.cpp4
-rw-r--r--searchcore/src/tests/proton/attribute/attribute_test.cpp62
-rw-r--r--searchcore/src/tests/proton/docsummary/docsummary.cpp3
-rw-r--r--searchcore/src/tests/proton/documentdb/document_subdbs/document_subdbs_test.cpp19
-rw-r--r--searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp83
-rw-r--r--searchcore/src/tests/proton/documentdb/storeonlyfeedview/storeonlyfeedview_test.cpp16
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attribute_populator.cpp8
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp105
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.h21
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/filter_attribute_manager.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/i_attribute_writer.h16
-rw-r--r--searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoreattribute.cpp3
-rw-r--r--searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoreattribute.h10
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp27
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.h16
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp51
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.h35
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp52
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h31
-rw-r--r--storage/src/vespa/storage/bucketdb/btree_lockable_map.h2
20 files changed, 215 insertions, 351 deletions
diff --git a/searchcore/src/tests/proton/attribute/attribute_populator/attribute_populator_test.cpp b/searchcore/src/tests/proton/attribute/attribute_populator/attribute_populator_test.cpp
index 683a6cd1197..2a5444c2525 100644
--- a/searchcore/src/tests/proton/attribute/attribute_populator/attribute_populator_test.cpp
+++ b/searchcore/src/tests/proton/attribute/attribute_populator/attribute_populator_test.cpp
@@ -97,12 +97,12 @@ TEST_F("require that reprocess with document populates attribute", Fixture)
f._pop->handleExisting(5, f._ctx.create(0, 33));
EXPECT_EQUAL(6u, attr->get()->getNumDocs());
EXPECT_EQUAL(33, attr->get()->getInt(5));
- EXPECT_EQUAL(1u, attr->get()->getStatus().getLastSyncToken());
+ EXPECT_EQUAL(0u, attr->get()->getStatus().getLastSyncToken());
f._pop->handleExisting(6, f._ctx.create(1, 44));
EXPECT_EQUAL(7u, attr->get()->getNumDocs());
EXPECT_EQUAL(44, attr->get()->getInt(6));
- EXPECT_EQUAL(2u, attr->get()->getStatus().getLastSyncToken());
+ EXPECT_EQUAL(0u, attr->get()->getStatus().getLastSyncToken());
f._pop->done();
EXPECT_EQUAL(CREATE_SERIAL_NUM, attr->get()->getStatus().getLastSyncToken());
}
diff --git a/searchcore/src/tests/proton/attribute/attribute_test.cpp b/searchcore/src/tests/proton/attribute/attribute_test.cpp
index b30420ead24..c98127f4daf 100644
--- a/searchcore/src/tests/proton/attribute/attribute_test.cpp
+++ b/searchcore/src/tests/proton/attribute/attribute_test.cpp
@@ -169,29 +169,34 @@ public:
_mgr->addAttribute(attr->getName(), std::move(attr));
allocAttributeWriter();
}
- void put(SerialNum serialNum, const Document &doc, DocumentIdT lid,
- bool immediateCommit = true) {
- _aw->put(serialNum, doc, lid, immediateCommit, emptyCallback);
+ void put(SerialNum serialNum, const Document &doc, DocumentIdT lid) {
+ _aw->put(serialNum, doc, lid, emptyCallback);
+ commit(serialNum);
}
void update(SerialNum serialNum, const DocumentUpdate &upd,
- DocumentIdT lid, bool immediateCommit, IFieldUpdateCallback & onUpdate) {
- _aw->update(serialNum, upd, lid, immediateCommit, emptyCallback, onUpdate);
+ DocumentIdT lid, IFieldUpdateCallback & onUpdate) {
+ _aw->update(serialNum, upd, lid, emptyCallback, onUpdate);
+ commit(serialNum);
}
- void update(SerialNum serialNum, const Document &doc,
- DocumentIdT lid, bool immediateCommit) {
- _aw->update(serialNum, doc, lid, immediateCommit, emptyCallback);
+ void update(SerialNum serialNum, const Document &doc, DocumentIdT lid) {
+ _aw->update(serialNum, doc, lid, emptyCallback);
+ commit(serialNum);
}
- void remove(SerialNum serialNum, DocumentIdT lid, bool immediateCommit = true) {
- _aw->remove(serialNum, lid, immediateCommit, emptyCallback);
+ void remove(SerialNum serialNum, DocumentIdT lid) {
+ _aw->remove(serialNum, lid, emptyCallback);
+ commit(serialNum);
}
- void remove(const LidVector &lidVector, SerialNum serialNum, bool immediateCommit = true) {
- _aw->remove(lidVector, serialNum, immediateCommit, emptyCallback);
+ void remove(const LidVector &lidVector, SerialNum serialNum) {
+ _aw->remove(lidVector, serialNum, emptyCallback);
+ commit(serialNum);
}
void commit(SerialNum serialNum) {
_aw->forceCommit(serialNum, emptyCallback);
}
void assertExecuteHistory(std::vector<uint32_t> expExecuteHistory) {
- EXPECT_EQ(expExecuteHistory, _attributeFieldWriter->getExecuteHistory());
+ auto includeCommit = expExecuteHistory;
+ includeCommit.insert(includeCommit.end(), expExecuteHistory.begin(), expExecuteHistory.end());
+ EXPECT_EQ(includeCommit, _attributeFieldWriter->getExecuteHistory());
}
SerialNum test_force_commit(AttributeVector &attr, SerialNum serialNum) {
commit(serialNum);
@@ -400,29 +405,29 @@ TEST_F(AttributeWriterTest, visibility_delay_is_honoured)
EXPECT_EQ(2u, a1->getNumDocs());
EXPECT_EQ(3u, a1->getStatus().getLastSyncToken());
AttributeWriter awDelayed(_mgr);
- awDelayed.put(4, *doc, 2, false, emptyCallback);
+ awDelayed.put(4, *doc, 2, emptyCallback);
EXPECT_EQ(3u, a1->getNumDocs());
EXPECT_EQ(3u, a1->getStatus().getLastSyncToken());
- awDelayed.put(5, *doc, 4, false, emptyCallback);
+ awDelayed.put(5, *doc, 4, emptyCallback);
EXPECT_EQ(5u, a1->getNumDocs());
EXPECT_EQ(3u, a1->getStatus().getLastSyncToken());
awDelayed.forceCommit(6, emptyCallback);
EXPECT_EQ(6u, a1->getStatus().getLastSyncToken());
AttributeWriter awDelayedShort(_mgr);
- awDelayedShort.put(7, *doc, 2, false, emptyCallback);
+ awDelayedShort.put(7, *doc, 2, emptyCallback);
EXPECT_EQ(6u, a1->getStatus().getLastSyncToken());
- awDelayedShort.put(8, *doc, 2, false, emptyCallback);
+ awDelayedShort.put(8, *doc, 2, emptyCallback);
awDelayedShort.forceCommit(8, emptyCallback);
EXPECT_EQ(8u, a1->getStatus().getLastSyncToken());
verifyAttributeContent(*a1, 2, "10");
awDelayed.put(9, *idb.startDocument("id:ns:searchdocument::1").startAttributeField("a1").addStr("11").endField().endDocument(),
- 2, false, emptyCallback);
+ 2, emptyCallback);
awDelayed.put(10, *idb.startDocument("id:ns:searchdocument::1").startAttributeField("a1").addStr("20").endField().endDocument(),
- 2, false, emptyCallback);
+ 2, emptyCallback);
awDelayed.put(11, *idb.startDocument("id:ns:searchdocument::1").startAttributeField("a1").addStr("30").endField().endDocument(),
- 2, false, emptyCallback);
+ 2, emptyCallback);
EXPECT_EQ(8u, a1->getStatus().getLastSyncToken());
verifyAttributeContent(*a1, 2, "10");
awDelayed.forceCommit(12, emptyCallback);
@@ -472,8 +477,7 @@ TEST_F(AttributeWriterTest, handles_update)
.addUpdate(ArithmeticValueUpdate(ArithmeticValueUpdate::Add, 10)));
DummyFieldUpdateCallback onUpdate;
- bool immediateCommit = true;
- update(2, upd, 1, immediateCommit, onUpdate);
+ update(2, upd, 1, onUpdate);
attribute::IntegerContent ibuf;
ibuf.fill(*a1, 1);
@@ -483,9 +487,9 @@ TEST_F(AttributeWriterTest, handles_update)
EXPECT_EQ(1u, ibuf.size());
EXPECT_EQ(30u, ibuf[0]);
- update(2, upd, 1, immediateCommit, onUpdate); // same sync token as previous
+ update(2, upd, 1, onUpdate); // same sync token as previous
try {
- update(1, upd, 1, immediateCommit, onUpdate); // lower sync token than previous
+ update(1, upd, 1, onUpdate); // lower sync token than previous
EXPECT_TRUE(true); // update is ignored
} catch (vespalib::IllegalStateException & e) {
LOG(info, "Got expected exception: '%s'", e.getMessage().c_str());
@@ -517,9 +521,8 @@ TEST_F(AttributeWriterTest, handles_predicate_update)
PredicateIndex &index = static_cast<PredicateAttribute &>(*a1).getIndex();
EXPECT_EQ(1u, index.getZeroConstraintDocs().size());
EXPECT_FALSE(index.getIntervalIndex().lookup(PredicateHash::hash64("foo=bar")).valid());
- bool immediateCommit = true;
DummyFieldUpdateCallback onUpdate;
- update(2, upd, 1, immediateCommit, onUpdate);
+ update(2, upd, 1, onUpdate);
EXPECT_EQ(0u, index.getZeroConstraintDocs().size());
EXPECT_TRUE(index.getIntervalIndex().lookup(PredicateHash::hash64("foo=bar")).valid());
}
@@ -712,9 +715,8 @@ TEST_F(AttributeWriterTest, handles_tensor_assign_update)
new_value = EngineOrFactory::get().copy(*new_tensor);
upd.addUpdate(FieldUpdate(upd.getType().getField("a1"))
.addUpdate(AssignValueUpdate(new_value)));
- bool immediateCommit = true;
DummyFieldUpdateCallback onUpdate;
- update(2, upd, 1, immediateCommit, onUpdate);
+ update(2, upd, 1, onUpdate);
EXPECT_EQ(2u, a1->getNumDocs());
EXPECT_TRUE(tensorAttribute != nullptr);
tensor2 = tensorAttribute->getTensor(1);
@@ -1078,7 +1080,7 @@ TEST_F(StructArrayWriterTest, update_with_doc_argument_updates_struct_field_attr
put(10, *doc, 1);
checkAttrs(1, 10, {11, 12});
doc = makeDoc(20, {21});
- update(11, *doc, 1, true);
+ update(11, *doc, 1);
checkAttrs(1, 10, {21});
}
@@ -1135,7 +1137,7 @@ TEST_F(StructMapWriterTest, update_with_doc_argument_updates_struct_field_attrib
put(10, *doc, 1);
checkAttrs(1, 10, {{1, 11}, {2, 12}});
doc = makeDoc(20, {{42, 21}});
- update(11, *doc, 1, true);
+ update(11, *doc, 1);
checkAttrs(1, 10, {{42, 21}});
}
diff --git a/searchcore/src/tests/proton/docsummary/docsummary.cpp b/searchcore/src/tests/proton/docsummary/docsummary.cpp
index 266a817d380..05abf7fe514 100644
--- a/searchcore/src/tests/proton/docsummary/docsummary.cpp
+++ b/searchcore/src/tests/proton/docsummary/docsummary.cpp
@@ -246,7 +246,8 @@ public:
Timestamp(0u), docSize, lid, 0u));
LOG_ASSERT(putRes.ok());
uint64_t serialNum = _ddb->getFeedHandler().incSerialNum();
- _aw->put(serialNum, doc, lid, true, std::shared_ptr<IDestructorCallback>());
+ _aw->put(serialNum, doc, lid, std::shared_ptr<IDestructorCallback>());
+ _aw->forceCommit(serialNum, std::shared_ptr<IDestructorCallback>());
_ddb->getReadySubDB()->getAttributeManager()->getAttributeFieldWriter().sync();
_sa->put(serialNum, lid, doc);
const GlobalId &gid = docId.getGlobalId();
diff --git a/searchcore/src/tests/proton/documentdb/document_subdbs/document_subdbs_test.cpp b/searchcore/src/tests/proton/documentdb/document_subdbs/document_subdbs_test.cpp
index 43f16e87986..754cf4ea15d 100644
--- a/searchcore/src/tests/proton/documentdb/document_subdbs/document_subdbs_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/document_subdbs/document_subdbs_test.cpp
@@ -769,18 +769,27 @@ struct DocumentHandler
}
void putDoc(PutOperation &op) {
IFeedView::SP feedView = _f._subDb.getFeedView();
- _f.runInMaster([&]() { feedView->preparePut(op);
- feedView->handlePut(FeedToken(), op); } );
+ _f.runInMaster([&]() {
+ feedView->preparePut(op);
+ feedView->handlePut(FeedToken(), op);
+ feedView->forceCommit(op.getSerialNum());
+ } );
}
void moveDoc(MoveOperation &op) {
IFeedView::SP feedView = _f._subDb.getFeedView();
- _f.runInMaster([&]() { feedView->handleMove(op, IDestructorCallback::SP()); } );
+ _f.runInMaster([&]() {
+ feedView->handleMove(op, IDestructorCallback::SP());
+ feedView->forceCommit(op.getSerialNum());
+ } );
}
void removeDoc(RemoveOperation &op)
{
IFeedView::SP feedView = _f._subDb.getFeedView();
- _f.runInMaster([&]() { feedView->prepareRemove(op);
- feedView->handleRemove(FeedToken(), op); } );
+ _f.runInMaster([&]() {
+ feedView->prepareRemove(op);
+ feedView->handleRemove(FeedToken(), op);
+ feedView->forceCommit(op.getSerialNum());
+ } );
}
void putDocs() {
PutOperation putOp = createPut(std::move(createDoc(1, 22, 33)), Timestamp(10), 10);
diff --git a/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp b/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp
index 1269804c98a..9bb8865707d 100644
--- a/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp
@@ -92,20 +92,17 @@ struct MyTracer
_os << ")";
}
- void tracePut(const vespalib::string &adapterType,
- SerialNum serialNum, uint32_t lid, bool immediateCommit) {
+ void tracePut(const vespalib::string &adapterType, SerialNum serialNum, uint32_t lid) {
Guard guard(_mutex);
addComma();
_os << "put(adapter=" << adapterType <<
- ",serialNum=" << serialNum << ",lid=" << lid << ",commit=" << immediateCommit << ")";
+ ",serialNum=" << serialNum << ",lid=" << lid << ")";
}
- void traceRemove(const vespalib::string &adapterType,
- SerialNum serialNum, uint32_t lid, bool immediateCommit) {
+ void traceRemove(const vespalib::string &adapterType, SerialNum serialNum, uint32_t lid) {
Guard guard(_mutex);
addComma();
- _os << "remove(adapter=" << adapterType <<
- ",serialNum=" << serialNum << ",lid=" << lid << ",commit=" << immediateCommit << ")";
+ _os << "remove(adapter=" << adapterType << ",serialNum=" << serialNum << ",lid=" << lid << ")";
}
void traceCommit(const vespalib::string &adapterType, SerialNum serialNum) {
@@ -151,12 +148,12 @@ struct MyIndexWriter : public test::MockIndexWriter
{}
void put(SerialNum serialNum, const document::Document &doc, const DocumentIdT lid) override {
(void) doc;
- _tracer.tracePut(indexAdapterTypeName, serialNum, lid, false);
+ _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, false);
+ _tracer.traceRemove(indexAdapterTypeName, serialNum, lid);
}
void commit(SerialNum serialNum, OnWriteDoneType) override {
++_commitCount;
@@ -335,35 +332,26 @@ struct MyAttributeWriter : public IAttributeWriter
AttrMap::const_iterator itr = _attrMap.find(attrName);
return ((itr == _attrMap.end()) ? nullptr : itr->second.get());
}
- void put(SerialNum serialNum, const document::Document &doc, DocumentIdT lid,
- bool immediateCommit, OnWriteDoneType) override {
+ void put(SerialNum serialNum, const document::Document &doc, DocumentIdT lid, OnWriteDoneType) override {
_putSerial = serialNum;
_putDocId = doc.getId();
_putLid = lid;
- _tracer.tracePut(attributeAdapterTypeName, serialNum, lid, immediateCommit);
- if (immediateCommit) {
- ++_commitCount;
- }
+ _tracer.tracePut(attributeAdapterTypeName, serialNum, lid);
}
- void remove(SerialNum serialNum, DocumentIdT lid,
- bool immediateCommit, OnWriteDoneType) override {
+ void remove(SerialNum serialNum, DocumentIdT lid, OnWriteDoneType) override {
_removeSerial = serialNum;
_removeLid = lid;
- _tracer.traceRemove(attributeAdapterTypeName, serialNum, lid, immediateCommit);
- if (immediateCommit) {
- ++_commitCount;
- }
+ _tracer.traceRemove(attributeAdapterTypeName, serialNum, lid);
}
- void remove(const LidVector & lidsToRemove, SerialNum serialNum,
- bool immediateCommit, OnWriteDoneType) override {
+ void remove(const LidVector & lidsToRemove, SerialNum serialNum, OnWriteDoneType) override {
for (uint32_t lid : lidsToRemove) {
LOG(info, "MyAttributeAdapter::remove(): serialNum(%" PRIu64 "), docId(%u)", serialNum, lid);
_removes.push_back(lid);
- _tracer.traceRemove(attributeAdapterTypeName, serialNum, lid, immediateCommit);
+ _tracer.traceRemove(attributeAdapterTypeName, serialNum, lid);
}
}
void update(SerialNum serialNum, const document::DocumentUpdate &upd,
- DocumentIdT lid, bool, OnWriteDoneType, IFieldUpdateCallback & onUpdate) override {
+ DocumentIdT lid, OnWriteDoneType, IFieldUpdateCallback & onUpdate) override {
_updateSerial = serialNum;
_updateDocId = upd.getId();
_updateLid = lid;
@@ -372,12 +360,10 @@ struct MyAttributeWriter : public IAttributeWriter
onUpdate.onUpdateField(fieldUpdate.getField().getName(), attr);
}
}
- void update(SerialNum serialNum, const document::Document &doc, DocumentIdT lid,
- bool immediateCommit, OnWriteDoneType) override {
+ void update(SerialNum serialNum, const document::Document &doc, DocumentIdT lid, OnWriteDoneType) override {
(void) serialNum;
(void) doc;
(void) lid;
- (void) immediateCommit;
}
void heartBeat(SerialNum) override { ++_heartBeatCount; }
void compactLidSpace(uint32_t wantedLidLimit, SerialNum ) override {
@@ -818,6 +804,7 @@ TEST_F("require that put() calls attribute adapter", SearchableFeedViewFixture)
DocumentContext dc = f.doc1();
EXPECT_EQUAL(0u, f._docIdLimit.get());
f.putAndWait(dc);
+ f.forceCommitAndWait();
EXPECT_EQUAL(1u, f.maw._putSerial);
EXPECT_EQUAL(DocumentId("id:ns:searchdocument::1"), f.maw._putDocId);
@@ -1184,26 +1171,6 @@ TEST_F("require that compactLidSpace() propagates to index writer",
EXPECT_EQUAL(2u, f.miw._wantedLidLimit);
}
-TEST_F("require that commit is called if visibility delay is 0",
- SearchableFeedViewFixture)
-{
- DocumentContext dc = f.doc1();
- f.putAndWait(dc);
- EXPECT_EQUAL(1u, f.miw._commitCount);
- EXPECT_EQUAL(1u, f.maw._commitCount);
- f.removeAndWait(dc);
- EXPECT_EQUAL(2u, f.miw._commitCount);
- EXPECT_EQUAL(2u, f.maw._commitCount);
- f.assertTrace("put(adapter=attribute,serialNum=1,lid=1,commit=1),"
- "put(adapter=index,serialNum=1,lid=1,commit=0),"
- "commit(adapter=index,serialNum=1),"
- "ack(Result(0, )),"
- "remove(adapter=attribute,serialNum=2,lid=1,commit=1),"
- "remove(adapter=index,serialNum=2,lid=1,commit=0),"
- "commit(adapter=index,serialNum=2),"
- "ack(Result(0, ))");
-}
-
const vespalib::duration LONG_DELAY = 60s;
const vespalib::duration SHORT_DELAY = 500ms;
@@ -1219,11 +1186,11 @@ TEST_F("require that commit is not called when inside a commit interval",
EXPECT_EQUAL(0u, f.miw._commitCount);
EXPECT_EQUAL(0u, f.maw._commitCount);
EXPECT_EQUAL(0u, f._docIdLimit.get());
- f.assertTrace("put(adapter=attribute,serialNum=1,lid=1,commit=0),"
- "put(adapter=index,serialNum=1,lid=1,commit=0),"
+ f.assertTrace("put(adapter=attribute,serialNum=1,lid=1),"
+ "put(adapter=index,serialNum=1,lid=1),"
"ack(Result(0, )),"
- "remove(adapter=attribute,serialNum=2,lid=1,commit=0),"
- "remove(adapter=index,serialNum=2,lid=1,commit=0),"
+ "remove(adapter=attribute,serialNum=2,lid=1),"
+ "remove(adapter=index,serialNum=2,lid=1),"
"ack(Result(0, ))");
f.forceCommitAndWait();
}
@@ -1242,11 +1209,11 @@ TEST_F("require that commit is not implicitly called",
EXPECT_EQUAL(0u, f.miw._commitCount);
EXPECT_EQUAL(0u, f.maw._commitCount);
EXPECT_EQUAL(0u, f._docIdLimit.get());
- f.assertTrace("put(adapter=attribute,serialNum=1,lid=1,commit=0),"
- "put(adapter=index,serialNum=1,lid=1,commit=0),"
+ f.assertTrace("put(adapter=attribute,serialNum=1,lid=1),"
+ "put(adapter=index,serialNum=1,lid=1),"
"ack(Result(0, )),"
- "remove(adapter=attribute,serialNum=2,lid=1,commit=0),"
- "remove(adapter=index,serialNum=2,lid=1,commit=0),"
+ "remove(adapter=attribute,serialNum=2,lid=1),"
+ "remove(adapter=index,serialNum=2,lid=1),"
"ack(Result(0, ))");
f.forceCommitAndWait();
}
@@ -1263,8 +1230,8 @@ TEST_F("require that forceCommit updates docid limit",
EXPECT_EQUAL(1u, f.miw._commitCount);
EXPECT_EQUAL(1u, f.maw._commitCount);
EXPECT_EQUAL(2u, f._docIdLimit.get());
- f.assertTrace("put(adapter=attribute,serialNum=1,lid=1,commit=0),"
- "put(adapter=index,serialNum=1,lid=1,commit=0),"
+ f.assertTrace("put(adapter=attribute,serialNum=1,lid=1),"
+ "put(adapter=index,serialNum=1,lid=1),"
"ack(Result(0, )),"
"commit(adapter=attribute,serialNum=1),"
"commit(adapter=index,serialNum=1)");
diff --git a/searchcore/src/tests/proton/documentdb/storeonlyfeedview/storeonlyfeedview_test.cpp b/searchcore/src/tests/proton/documentdb/storeonlyfeedview/storeonlyfeedview_test.cpp
index e6e71d51e47..3a75f8cd494 100644
--- a/searchcore/src/tests/proton/documentdb/storeonlyfeedview/storeonlyfeedview_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/storeonlyfeedview/storeonlyfeedview_test.cpp
@@ -105,12 +105,12 @@ struct MyMinimalFeedView : public MyMinimalFeedViewBase, public StoreOnlyFeedVie
outstandingMoveOps(outstandingMoveOps_)
{
}
- void removeAttributes(SerialNum s, const LidVector &l, bool immediateCommit, OnWriteDoneType onWriteDone) override {
- StoreOnlyFeedView::removeAttributes(s, l, immediateCommit, onWriteDone);
+ void removeAttributes(SerialNum s, const LidVector &l, OnWriteDoneType onWriteDone) override {
+ StoreOnlyFeedView::removeAttributes(s, l, onWriteDone);
++removeMultiAttributesCount;
}
- void removeIndexedFields(SerialNum s, const LidVector &l, bool immediateCommit, OnWriteDoneType onWriteDone) override {
- StoreOnlyFeedView::removeIndexedFields(s, l, immediateCommit, onWriteDone);
+ void removeIndexedFields(SerialNum s, const LidVector &l, OnWriteDoneType onWriteDone) override {
+ StoreOnlyFeedView::removeIndexedFields(s, l, onWriteDone);
++removeMultiIndexFieldsCount;
}
void heartBeatIndexedFields(SerialNum s) override {
@@ -145,23 +145,23 @@ struct MoveOperationFeedView : public MyMinimalFeedView {
removeIndexFieldsCount(0),
onWriteDoneContexts()
{}
- void putAttributes(SerialNum, search::DocumentIdT, const document::Document &, bool, OnPutDoneType onWriteDone) override {
+ void putAttributes(SerialNum, search::DocumentIdT, const document::Document &, OnPutDoneType onWriteDone) override {
++putAttributesCount;
EXPECT_EQUAL(1, outstandingMoveOps);
onWriteDoneContexts.push_back(onWriteDone);
}
void putIndexedFields(SerialNum, search::DocumentIdT, const document::Document::SP &,
- bool, OnOperationDoneType onWriteDone) override {
+ OnOperationDoneType onWriteDone) override {
++putIndexFieldsCount;
EXPECT_EQUAL(1, outstandingMoveOps);
onWriteDoneContexts.push_back(onWriteDone);
}
- void removeAttributes(SerialNum, search::DocumentIdT, bool, OnRemoveDoneType onWriteDone) override {
+ void removeAttributes(SerialNum, search::DocumentIdT, OnRemoveDoneType onWriteDone) override {
++removeAttributesCount;
EXPECT_EQUAL(1, outstandingMoveOps);
onWriteDoneContexts.push_back(onWriteDone);
}
- void removeIndexedFields(SerialNum, search::DocumentIdT, bool, OnRemoveDoneType onWriteDone) override {
+ void removeIndexedFields(SerialNum, search::DocumentIdT, OnRemoveDoneType onWriteDone) override {
++removeIndexFieldsCount;
EXPECT_EQUAL(1, outstandingMoveOps);
onWriteDoneContexts.push_back(onWriteDone);
diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_populator.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attribute_populator.cpp
index 33a5776cb8a..af7bae32b11 100644
--- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_populator.cpp
+++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_populator.cpp
@@ -3,6 +3,8 @@
#include "attribute_populator.h"
#include <vespa/searchcore/proton/common/eventlogger.h>
#include <vespa/searchlib/common/idestructorcallback.h>
+#include <vespa/searchlib/common/gatecallback.h>
+#include <vespa/vespalib/util/gate.h>
#include <vespa/searchlib/attribute/attributevector.h>
#include <vespa/log/log.h>
@@ -73,8 +75,10 @@ void
AttributePopulator::handleExisting(uint32_t lid, const std::shared_ptr<document::Document> &doc)
{
search::SerialNum serialNum(nextSerialNum());
- auto populateDoneContext = std::make_shared<PopulateDoneContext>(doc);
- _writer.put(serialNum, *doc, lid, true, populateDoneContext);
+ _writer.put(serialNum, *doc, lid, std::make_shared<PopulateDoneContext>(doc));
+ vespalib::Gate gate;
+ _writer.forceCommit(serialNum, std::make_shared<search::GateCallback>(gate));
+ gate.await();
}
void
diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp
index bf32b679d76..2b859c17931 100644
--- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp
+++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp
@@ -127,8 +127,7 @@ ensureLidSpace(SerialNum serialNum, DocumentIdT lid, AttributeVector &attr)
void
applyPutToAttribute(SerialNum serialNum, const FieldValue::UP &fieldValue, DocumentIdT lid,
- bool immediateCommit, AttributeVector &attr,
- AttributeWriter::OnWriteDoneType)
+ AttributeVector &attr, AttributeWriter::OnWriteDoneType)
{
ensureLidSpace(serialNum, lid, attr);
if (fieldValue.get()) {
@@ -136,9 +135,6 @@ applyPutToAttribute(SerialNum serialNum, const FieldValue::UP &fieldValue, Docum
} else {
attr.clearDoc(lid);
}
- if (immediateCommit) {
- attr.commit(serialNum, serialNum);
- }
}
void
@@ -147,7 +143,6 @@ complete_put_to_attribute(SerialNum serial_num,
AttributeVector& attr,
const FieldValue::SP& field_value,
std::future<std::unique_ptr<PrepareResult>>& result_future,
- bool immediate_commit,
AttributeWriter::OnWriteDoneType)
{
ensureLidSpace(serial_num, docid, attr);
@@ -157,20 +152,14 @@ complete_put_to_attribute(SerialNum serial_num,
} else {
attr.clearDoc(docid);
}
- if (immediate_commit) {
- attr.commit(serial_num, serial_num);
- }
}
void
-applyRemoveToAttribute(SerialNum serialNum, DocumentIdT lid, bool immediateCommit,
+applyRemoveToAttribute(SerialNum serialNum, DocumentIdT lid,
AttributeVector &attr, AttributeWriter::OnWriteDoneType)
{
ensureLidSpace(serialNum, lid, attr);
attr.clearDoc(lid);
- if (immediateCommit) {
- attr.commit(serialNum, serialNum);
- }
}
void
@@ -182,15 +171,6 @@ applyUpdateToAttribute(SerialNum serialNum, const FieldUpdate &fieldUpd,
}
void
-applyUpdateToAttributeAndCommit(SerialNum serialNum, const FieldUpdate &fieldUpd,
- DocumentIdT lid, AttributeVector &attr)
-{
- ensureLidSpace(serialNum, lid, attr);
- AttributeUpdater::handleUpdate(attr, lid, fieldUpd);
- attr.commit(serialNum, serialNum);
-}
-
-void
applyReplayDone(uint32_t docIdLimit, AttributeVector &attr)
{
AttributeManager::padAttribute(attr, docIdLimit);
@@ -240,30 +220,22 @@ using AttrUpdates = std::vector<std::pair<AttributeVector *, const FieldUpdate *
struct BatchUpdateTask : public vespalib::Executor::Task {
- BatchUpdateTask(SerialNum serialNum, DocumentIdT lid, bool immediateCommit)
+ BatchUpdateTask(SerialNum serialNum, DocumentIdT lid)
: vespalib::Executor::Task(),
_serialNum(serialNum),
_lid(lid),
- _immediateCommit(immediateCommit),
_onWriteDone()
{ }
~BatchUpdateTask() override;
void run() override {
- if (_immediateCommit) {
- for (const auto & update : _updates) {
- applyUpdateToAttributeAndCommit(_serialNum, *update.second, _lid, *update.first);
- }
- } else {
- for (const auto & update : _updates) {
- applyUpdateToAttribute(_serialNum, *update.second, _lid, *update.first);
- }
+ for (const auto & update : _updates) {
+ applyUpdateToAttribute(_serialNum, *update.second, _lid, *update.first);
}
}
SerialNum _serialNum;
DocumentIdT _lid;
- bool _immediateCommit;
AttrUpdates _updates;
search::IDestructorCallback::SP _onWriteDone;
};
@@ -310,22 +282,20 @@ class PutTask : public vespalib::Executor::Task
const AttributeWriter::WriteContext &_wc;
const SerialNum _serialNum;
const uint32_t _lid;
- const bool _immediateCommit;
const bool _allAttributes;
std::remove_reference_t<AttributeWriter::OnWriteDoneType> _onWriteDone;
std::shared_ptr<DocumentFieldExtractor> _fieldExtractor;
std::vector<FieldValue::UP> _fieldValues;
public:
- PutTask(const AttributeWriter::WriteContext &wc, SerialNum serialNum, std::shared_ptr<DocumentFieldExtractor> fieldExtractor, uint32_t lid, bool immediateCommit, bool allAttributes, AttributeWriter::OnWriteDoneType onWriteDone);
+ PutTask(const AttributeWriter::WriteContext &wc, SerialNum serialNum, std::shared_ptr<DocumentFieldExtractor> fieldExtractor, uint32_t lid, bool allAttributes, AttributeWriter::OnWriteDoneType onWriteDone);
~PutTask() override;
void run() override;
};
-PutTask::PutTask(const AttributeWriter::WriteContext &wc, SerialNum serialNum, std::shared_ptr<DocumentFieldExtractor> fieldExtractor, uint32_t lid, bool immediateCommit, bool allAttributes, AttributeWriter::OnWriteDoneType onWriteDone)
+PutTask::PutTask(const AttributeWriter::WriteContext &wc, SerialNum serialNum, std::shared_ptr<DocumentFieldExtractor> fieldExtractor, uint32_t lid, bool allAttributes, AttributeWriter::OnWriteDoneType onWriteDone)
: _wc(wc),
_serialNum(serialNum),
_lid(lid),
- _immediateCommit(immediateCommit),
_allAttributes(allAttributes),
_onWriteDone(onWriteDone),
_fieldExtractor(std::move(fieldExtractor)),
@@ -352,7 +322,7 @@ PutTask::run()
if (_allAttributes || field.isStructFieldAttribute()) {
AttributeVector &attr = field.getAttribute();
if (attr.getStatus().getLastSyncToken() < _serialNum) {
- applyPutToAttribute(_serialNum, _fieldValues[fieldId], _lid, _immediateCommit, attr, _onWriteDone);
+ applyPutToAttribute(_serialNum, _fieldValues[fieldId], _lid, attr, _onWriteDone);
}
++fieldId;
}
@@ -418,26 +388,22 @@ private:
AttributeVector& _attr;
FieldValue::SP _field_value;
std::future<std::unique_ptr<PrepareResult>> _result_future;
- const bool _immediate_commit;
std::remove_reference_t<AttributeWriter::OnWriteDoneType> _on_write_done;
public:
CompletePutTask(PreparePutTask& prepare_task,
- bool immediate_commit,
AttributeWriter::OnWriteDoneType on_write_done);
~CompletePutTask() override;
void run() override;
};
CompletePutTask::CompletePutTask(PreparePutTask& prepare_task,
- bool immediate_commit,
AttributeWriter::OnWriteDoneType on_write_done)
: _serial_num(prepare_task.serial_num()),
_docid(prepare_task.docid()),
_attr(prepare_task.attr()),
_field_value(prepare_task.field_value()),
_result_future(prepare_task.result_future()),
- _immediate_commit(immediate_commit),
_on_write_done(on_write_done)
{
}
@@ -448,8 +414,7 @@ void
CompletePutTask::run()
{
if (_attr.getStatus().getLastSyncToken() < _serial_num) {
- complete_put_to_attribute(_serial_num, _docid, _attr, _field_value, _result_future,
- _immediate_commit, _on_write_done);
+ complete_put_to_attribute(_serial_num, _docid, _attr, _field_value, _result_future, _on_write_done);
}
}
@@ -458,19 +423,17 @@ class RemoveTask : public vespalib::Executor::Task
const AttributeWriter::WriteContext &_wc;
const SerialNum _serialNum;
const uint32_t _lid;
- const bool _immediateCommit;
std::remove_reference_t<AttributeWriter::OnWriteDoneType> _onWriteDone;
public:
- RemoveTask(const AttributeWriter::WriteContext &wc, SerialNum serialNum, uint32_t lid, bool immediateCommit, AttributeWriter::OnWriteDoneType onWriteDone);
+ RemoveTask(const AttributeWriter::WriteContext &wc, SerialNum serialNum, uint32_t lid, AttributeWriter::OnWriteDoneType onWriteDone);
~RemoveTask() override;
void run() override;
};
-RemoveTask::RemoveTask(const AttributeWriter::WriteContext &wc, SerialNum serialNum, uint32_t lid, bool immediateCommit, AttributeWriter::OnWriteDoneType onWriteDone)
+RemoveTask::RemoveTask(const AttributeWriter::WriteContext &wc, SerialNum serialNum, uint32_t lid, AttributeWriter::OnWriteDoneType onWriteDone)
: _wc(wc),
_serialNum(serialNum),
_lid(lid),
- _immediateCommit(immediateCommit),
_onWriteDone(onWriteDone)
{
}
@@ -485,7 +448,7 @@ RemoveTask::run()
AttributeVector &attr = field.getAttribute();
// Must use <= due to how move operations are handled
if (attr.getStatus().getLastSyncToken() <= _serialNum) {
- applyRemoveToAttribute(_serialNum, _lid, _immediateCommit, attr, _onWriteDone);
+ applyRemoveToAttribute(_serialNum, _lid, attr, _onWriteDone);
}
}
}
@@ -496,18 +459,15 @@ private:
const AttributeWriter::WriteContext &_writeCtx;
const SerialNum _serialNum;
const LidVector _lidsToRemove;
- const bool _immediateCommit;
std::remove_reference_t<AttributeWriter::OnWriteDoneType> _onWriteDone;
public:
BatchRemoveTask(const AttributeWriter::WriteContext &writeCtx,
SerialNum serialNum,
const LidVector &lidsToRemove,
- bool immediateCommit,
AttributeWriter::OnWriteDoneType onWriteDone)
: _writeCtx(writeCtx),
_serialNum(serialNum),
_lidsToRemove(lidsToRemove),
- _immediateCommit(immediateCommit),
_onWriteDone(onWriteDone)
{}
~BatchRemoveTask() override;
@@ -516,10 +476,7 @@ public:
auto &attr = field.getAttribute();
if (attr.getStatus().getLastSyncToken() < _serialNum) {
for (auto lidToRemove : _lidsToRemove) {
- applyRemoveToAttribute(_serialNum, lidToRemove, false, attr, _onWriteDone);
- }
- if (_immediateCommit) {
- attr.commit(_serialNum, _serialNum);
+ applyRemoveToAttribute(_serialNum, lidToRemove, attr, _onWriteDone);
}
}
}
@@ -604,7 +561,7 @@ AttributeWriter::buildFieldPaths(const DocumentType & docType, const DataType *d
void
AttributeWriter::internalPut(SerialNum serialNum, const Document &doc, DocumentIdT lid,
- bool immediateCommit, bool allAttributes, OnWriteDoneType onWriteDone)
+ bool allAttributes, OnWriteDoneType onWriteDone)
{
const DataType *dataType(doc.getDataType());
if (_dataType != dataType) {
@@ -615,13 +572,12 @@ AttributeWriter::internalPut(SerialNum serialNum, const Document &doc, DocumentI
if (wc.use_two_phase_put()) {
assert(wc.getFields().size() == 1);
auto prepare_task = std::make_unique<PreparePutTask>(serialNum, lid, wc.getFields()[0], extractor);
- auto complete_task = std::make_unique<CompletePutTask>(*prepare_task, immediateCommit, onWriteDone);
+ auto complete_task = std::make_unique<CompletePutTask>(*prepare_task, onWriteDone);
_shared_executor.execute(std::move(prepare_task));
_attributeFieldWriter.executeTask(wc.getExecutorId(), std::move(complete_task));
} else {
if (allAttributes || wc.hasStructFieldAttribute()) {
- auto putTask = std::make_unique<PutTask>(wc, serialNum, extractor, lid, immediateCommit, allAttributes,
- onWriteDone);
+ auto putTask = std::make_unique<PutTask>(wc, serialNum, extractor, lid, allAttributes, onWriteDone);
_attributeFieldWriter.executeTask(wc.getExecutorId(), std::move(putTask));
}
}
@@ -629,11 +585,10 @@ AttributeWriter::internalPut(SerialNum serialNum, const Document &doc, DocumentI
}
void
-AttributeWriter::internalRemove(SerialNum serialNum, DocumentIdT lid, bool immediateCommit,
- OnWriteDoneType onWriteDone)
+AttributeWriter::internalRemove(SerialNum serialNum, DocumentIdT lid, OnWriteDoneType onWriteDone)
{
for (const auto &wc : _writeContexts) {
- auto removeTask = std::make_unique<RemoveTask>(wc, serialNum, lid, immediateCommit, onWriteDone);
+ auto removeTask = std::make_unique<RemoveTask>(wc, serialNum, lid, onWriteDone);
_attributeFieldWriter.executeTask(wc.getExecutorId(), std::move(removeTask));
}
}
@@ -678,50 +633,46 @@ AttributeWriter::getWritableAttribute(const vespalib::string &name) const
}
void
-AttributeWriter::put(SerialNum serialNum, const Document &doc, DocumentIdT lid,
- bool immediateCommit, OnWriteDoneType onWriteDone)
+AttributeWriter::put(SerialNum serialNum, const Document &doc, DocumentIdT lid, OnWriteDoneType onWriteDone)
{
LOG(spam, "Handle put: serial(%" PRIu64 "), docId(%s), lid(%u), document(%s)",
serialNum, doc.getId().toString().c_str(), lid, doc.toString(true).c_str());
- internalPut(serialNum, doc, lid, immediateCommit, true, onWriteDone);
+ internalPut(serialNum, doc, lid, true, onWriteDone);
}
void
-AttributeWriter::update(SerialNum serialNum, const Document &doc, DocumentIdT lid,
- bool immediateCommit, OnWriteDoneType onWriteDone)
+AttributeWriter::update(SerialNum serialNum, const Document &doc, DocumentIdT lid, OnWriteDoneType onWriteDone)
{
LOG(spam, "Handle update: serial(%" PRIu64 "), docId(%s), lid(%u), document(%s)",
serialNum, doc.getId().toString().c_str(), lid, doc.toString(true).c_str());
- internalPut(serialNum, doc, lid, immediateCommit, false, onWriteDone);
+ internalPut(serialNum, doc, lid, false, onWriteDone);
}
void
-AttributeWriter::remove(SerialNum serialNum, DocumentIdT lid,
- bool immediateCommit, OnWriteDoneType onWriteDone)
+AttributeWriter::remove(SerialNum serialNum, DocumentIdT lid, OnWriteDoneType onWriteDone)
{
- internalRemove(serialNum, lid, immediateCommit, onWriteDone);
+ internalRemove(serialNum, lid, onWriteDone);
}
void
-AttributeWriter::remove(const LidVector &lidsToRemove, SerialNum serialNum,
- bool immediateCommit, OnWriteDoneType onWriteDone)
+AttributeWriter::remove(const LidVector &lidsToRemove, SerialNum serialNum, OnWriteDoneType onWriteDone)
{
for (const auto &writeCtx : _writeContexts) {
- auto removeTask = std::make_unique<BatchRemoveTask>(writeCtx, serialNum, lidsToRemove, immediateCommit, onWriteDone);
+ auto removeTask = std::make_unique<BatchRemoveTask>(writeCtx, serialNum, lidsToRemove, onWriteDone);
_attributeFieldWriter.executeTask(writeCtx.getExecutorId(), std::move(removeTask));
}
}
void
AttributeWriter::update(SerialNum serialNum, const DocumentUpdate &upd, DocumentIdT lid,
- bool immediateCommit, OnWriteDoneType onWriteDone, IFieldUpdateCallback & onUpdate)
+ OnWriteDoneType onWriteDone, IFieldUpdateCallback & onUpdate)
{
LOG(debug, "Inspecting update for document %d.", lid);
std::vector<std::unique_ptr<BatchUpdateTask>> args;
uint32_t numExecutors = _attributeFieldWriter.getNumExecutors();
args.reserve(numExecutors);
for (uint32_t i(0); i < numExecutors; i++) {
- args.emplace_back(std::make_unique<BatchUpdateTask>(serialNum, lid, immediateCommit));
+ args.emplace_back(std::make_unique<BatchUpdateTask>(serialNum, lid));
args.back()->_updates.reserve((2*upd.getUpdates().size())/numExecutors);
}
diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.h b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.h
index 9e9e8910669..f63a2c6efba 100644
--- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.h
+++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.h
@@ -79,13 +79,12 @@ private:
void setupAttriuteMapping();
void buildFieldPaths(const DocumentType &docType, const DataType *dataType);
void internalPut(SerialNum serialNum, const Document &doc, DocumentIdT lid,
- bool immediateCommit, bool allAttributes, OnWriteDoneType onWriteDone);
- void internalRemove(SerialNum serialNum, DocumentIdT lid,
- bool immediateCommit, OnWriteDoneType onWriteDone);
+ bool allAttributes, OnWriteDoneType onWriteDone);
+ void internalRemove(SerialNum serialNum, DocumentIdT lid, OnWriteDoneType onWriteDone);
public:
AttributeWriter(proton::IAttributeManager::SP mgr);
- ~AttributeWriter();
+ ~AttributeWriter() override;
/* Only for in tests that add attributes after AttributeWriter construction. */
@@ -94,16 +93,12 @@ public:
*/
std::vector<search::AttributeVector *> getWritableAttributes() const override;
search::AttributeVector *getWritableAttribute(const vespalib::string &name) const override;
- void put(SerialNum serialNum, const Document &doc, DocumentIdT lid,
- bool immediateCommit, OnWriteDoneType onWriteDone) override;
- void remove(SerialNum serialNum, DocumentIdT lid,
- bool immediateCommit, OnWriteDoneType onWriteDone) override;
- void remove(const LidVector &lidVector, SerialNum serialNum,
- bool immediateCommit, OnWriteDoneType onWriteDone) override;
+ void put(SerialNum serialNum, const Document &doc, DocumentIdT lid, OnWriteDoneType onWriteDone) override;
+ void remove(SerialNum serialNum, DocumentIdT lid, OnWriteDoneType onWriteDone) override;
+ void remove(const LidVector &lidVector, SerialNum serialNum, OnWriteDoneType onWriteDone) override;
void update(SerialNum serialNum, const DocumentUpdate &upd, DocumentIdT lid,
- bool immediateCommit, OnWriteDoneType onWriteDone, IFieldUpdateCallback & onUpdate) override;
- void update(SerialNum serialNum, const Document &doc, DocumentIdT lid,
- bool immediateCommit, OnWriteDoneType onWriteDone) override;
+ OnWriteDoneType onWriteDone, IFieldUpdateCallback & onUpdate) override;
+ void update(SerialNum serialNum, const Document &doc, DocumentIdT lid, OnWriteDoneType onWriteDone) override;
void heartBeat(SerialNum serialNum) override;
void compactLidSpace(uint32_t wantedLidLimit, SerialNum serialNum) override;
const proton::IAttributeManager::SP &getAttributeManager() const override {
diff --git a/searchcore/src/vespa/searchcore/proton/attribute/filter_attribute_manager.cpp b/searchcore/src/vespa/searchcore/proton/attribute/filter_attribute_manager.cpp
index 3b1269b031c..ffdfdbc4332 100644
--- a/searchcore/src/vespa/searchcore/proton/attribute/filter_attribute_manager.cpp
+++ b/searchcore/src/vespa/searchcore/proton/attribute/filter_attribute_manager.cpp
@@ -233,7 +233,7 @@ FilterAttributeManager::setImportedAttributes(std::unique_ptr<ImportedAttributes
const ImportedAttributesRepo *
FilterAttributeManager::getImportedAttributes() const
{
- throw vespalib::IllegalArgumentException("Not implemented");
+ return nullptr;
}
std::shared_ptr<search::attribute::ReadableAttributeVector>
diff --git a/searchcore/src/vespa/searchcore/proton/attribute/i_attribute_writer.h b/searchcore/src/vespa/searchcore/proton/attribute/i_attribute_writer.h
index 99b5728fd3a..789a8077cba 100644
--- a/searchcore/src/vespa/searchcore/proton/attribute/i_attribute_writer.h
+++ b/searchcore/src/vespa/searchcore/proton/attribute/i_attribute_writer.h
@@ -33,27 +33,23 @@ public:
typedef document::Document Document;
using OnWriteDoneType = const std::shared_ptr<search::IDestructorCallback> &;
- virtual ~IAttributeWriter() {}
+ virtual ~IAttributeWriter() = default;
virtual std::vector<search::AttributeVector *> getWritableAttributes() const = 0;
virtual search::AttributeVector *getWritableAttribute(const vespalib::string &attrName) const = 0;
- virtual void put(SerialNum serialNum, const Document &doc, DocumentIdT lid,
- bool immediateCommit, OnWriteDoneType onWriteDone) = 0;
- virtual void remove(SerialNum serialNum, DocumentIdT lid, bool immediateCommit,
- OnWriteDoneType onWriteDone) = 0;
- virtual void remove(const LidVector &lidVector, SerialNum serialNum,
- bool immediateCommit, OnWriteDoneType onWriteDone) = 0;
+ virtual void put(SerialNum serialNum, const Document &doc, DocumentIdT lid, OnWriteDoneType onWriteDone) = 0;
+ virtual void remove(SerialNum serialNum, DocumentIdT lid, OnWriteDoneType onWriteDone) = 0;
+ virtual void remove(const LidVector &lidVector, SerialNum serialNum, OnWriteDoneType onWriteDone) = 0;
/**
* Update the underlying attributes based on the content of the given DocumentUpdate.
* The OnWriteDoneType instance should ensure the lifetime of the given DocumentUpdate instance.
*/
virtual void update(SerialNum serialNum, const DocumentUpdate &upd, DocumentIdT lid,
- bool immediateCommit, OnWriteDoneType onWriteDone, IFieldUpdateCallback & onUpdate) = 0;
+ OnWriteDoneType onWriteDone, IFieldUpdateCallback & onUpdate) = 0;
/*
* Update the underlying struct field attributes based on updated document.
*/
- virtual void update(SerialNum serialNum, const Document &doc, DocumentIdT lid,
- bool immediateCommit, OnWriteDoneType onWriteDone) = 0;
+ virtual void update(SerialNum serialNum, const Document &doc, DocumentIdT lid, OnWriteDoneType onWriteDone) = 0;
virtual void heartBeat(SerialNum serialNum) = 0;
/**
* Compact the lid space of the underlying attribute vectors.
diff --git a/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoreattribute.cpp b/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoreattribute.cpp
index e547f3556be..7fab995dfb9 100644
--- a/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoreattribute.cpp
+++ b/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoreattribute.cpp
@@ -31,7 +31,6 @@ DocumentMetaStoreAttribute::DocumentMetaStoreAttribute(const vespalib::string &n
{ }
-DocumentMetaStoreAttribute::~DocumentMetaStoreAttribute()
-{ }
+DocumentMetaStoreAttribute::~DocumentMetaStoreAttribute() = default;
}
diff --git a/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoreattribute.h b/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoreattribute.h
index 5b286907fb8..721aa8fe126 100644
--- a/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoreattribute.h
+++ b/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoreattribute.h
@@ -14,22 +14,20 @@ namespace proton {
class DocumentMetaStoreAttribute : public search::NotImplementedAttribute
{
protected:
- virtual void notImplemented() const override __attribute__((noinline));
+ void notImplemented() const override __attribute__((noinline));
public:
DocumentMetaStoreAttribute(const vespalib::string &name=getFixedName());
- virtual ~DocumentMetaStoreAttribute();
+ ~DocumentMetaStoreAttribute() override;
static const vespalib::string &getFixedName();
// Implements IAttributeVector
- virtual size_t
- getFixedWidth() const override
- {
+ size_t getFixedWidth() const override {
return document::GlobalId::LENGTH;
}
- virtual void onCommit() override {}
+ void onCommit() override {}
};
}
diff --git a/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp b/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp
index eec58ed53dc..52b4d869ce8 100644
--- a/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp
@@ -20,46 +20,39 @@ namespace proton {
* Otherwise we can drop it and ack the operation right away.
*/
void
-FastAccessFeedView::putAttributes(SerialNum serialNum, search::DocumentIdT lid, const Document &doc,
- bool immediateCommit, OnPutDoneType onWriteDone)
+FastAccessFeedView::putAttributes(SerialNum serialNum, search::DocumentIdT lid, const Document &doc, OnPutDoneType onWriteDone)
{
- _attributeWriter->put(serialNum, doc, lid, immediateCommit, onWriteDone);
- if (immediateCommit && onWriteDone) {
- onWriteDone->registerPutLid(&_docIdLimit);
- }
+ _attributeWriter->put(serialNum, doc, lid, onWriteDone);
}
void
FastAccessFeedView::updateAttributes(SerialNum serialNum, search::DocumentIdT lid, const DocumentUpdate &upd,
- bool immediateCommit, OnOperationDoneType onWriteDone, IFieldUpdateCallback & onUpdate)
+ OnOperationDoneType onWriteDone, IFieldUpdateCallback & onUpdate)
{
- _attributeWriter->update(serialNum, upd, lid, immediateCommit, onWriteDone, onUpdate);
+ _attributeWriter->update(serialNum, upd, lid, onWriteDone, onUpdate);
}
void
-FastAccessFeedView::updateAttributes(SerialNum serialNum, Lid lid, FutureDoc futureDoc,
- bool immediateCommit, OnOperationDoneType onWriteDone)
+FastAccessFeedView::updateAttributes(SerialNum serialNum, Lid lid, FutureDoc futureDoc, OnOperationDoneType onWriteDone)
{
if (_attributeWriter->hasStructFieldAttribute()) {
const std::unique_ptr<const Document> & doc = futureDoc.get();
if (doc) {
- _attributeWriter->update(serialNum, *doc, lid, immediateCommit, onWriteDone);
+ _attributeWriter->update(serialNum, *doc, lid, onWriteDone);
}
}
}
void
-FastAccessFeedView::removeAttributes(SerialNum serialNum, search::DocumentIdT lid,
- bool immediateCommit, OnRemoveDoneType onWriteDone)
+FastAccessFeedView::removeAttributes(SerialNum serialNum, search::DocumentIdT lid, OnRemoveDoneType onWriteDone)
{
- _attributeWriter->remove(serialNum, lid, immediateCommit, onWriteDone);
+ _attributeWriter->remove(serialNum, lid, onWriteDone);
}
void
-FastAccessFeedView::removeAttributes(SerialNum serialNum, const LidVector &lidsToRemove,
- bool immediateCommit, OnWriteDoneType onWriteDone)
+FastAccessFeedView::removeAttributes(SerialNum serialNum, const LidVector &lidsToRemove, OnWriteDoneType onWriteDone)
{
- _attributeWriter->remove(lidsToRemove, serialNum, immediateCommit, onWriteDone);
+ _attributeWriter->remove(lidsToRemove, serialNum, onWriteDone);
}
void
diff --git a/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.h b/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.h
index 08f11869b08..e0823be3e43 100644
--- a/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.h
+++ b/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.h
@@ -36,18 +36,14 @@ private:
const IAttributeWriter::SP _attributeWriter;
DocIdLimit &_docIdLimit;
- void putAttributes(SerialNum serialNum, search::DocumentIdT lid, const Document &doc,
- bool immediateCommit, OnPutDoneType onWriteDone) override;
+ void putAttributes(SerialNum serialNum, search::DocumentIdT lid, const Document &doc, OnPutDoneType onWriteDone) override;
void updateAttributes(SerialNum serialNum, search::DocumentIdT lid, const document::DocumentUpdate &upd,
- bool immediateCommit, OnOperationDoneType onWriteDone, IFieldUpdateCallback & onUpdate) override;
- void updateAttributes(SerialNum serialNum, Lid lid, FutureDoc doc,
- bool immediateCommit, OnOperationDoneType onWriteDone) override;
- void removeAttributes(SerialNum serialNum, search::DocumentIdT lid,
- bool immediateCommit, OnRemoveDoneType onWriteDone) override;
-
- void removeAttributes(SerialNum serialNum, const LidVector &lidsToRemove,
- bool immediateCommit, OnWriteDoneType onWriteDone) override;
+ OnOperationDoneType onWriteDone, IFieldUpdateCallback & onUpdate) override;
+ void updateAttributes(SerialNum serialNum, Lid lid, FutureDoc doc, OnOperationDoneType onWriteDone) override;
+ void removeAttributes(SerialNum serialNum, search::DocumentIdT lid, OnRemoveDoneType onWriteDone) override;
+
+ void removeAttributes(SerialNum serialNum, const LidVector &lidsToRemove, OnWriteDoneType onWriteDone) override;
void heartBeatAttributes(SerialNum serialNum) 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 360cac6e2ee..ebef7b4b6d4 100644
--- a/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp
@@ -59,46 +59,41 @@ SearchableFeedView::sync()
void
SearchableFeedView::putIndexedFields(SerialNum serialNum, search::DocumentIdT lid, const DocumentSP &newDoc,
- bool immediateCommit, OnOperationDoneType onWriteDone)
+ OnOperationDoneType onWriteDone)
{
if (!hasIndexedFields()) {
return;
}
_writeService.index().execute(
makeLambdaTask([=] {
- performIndexPut(serialNum, lid, newDoc, immediateCommit, onWriteDone);
+ performIndexPut(serialNum, lid, newDoc, onWriteDone);
}));
}
void
-SearchableFeedView::performIndexPut(SerialNum serialNum, search::DocumentIdT lid, const Document &doc,
- bool immediateCommit, OnOperationDoneType onWriteDone)
+SearchableFeedView::performIndexPut(SerialNum serialNum, search::DocumentIdT lid, const Document &doc, OnOperationDoneType onWriteDone)
{
+ (void) onWriteDone;
assert(_writeService.index().isCurrentThread());
VLOG(getDebugLevel(lid, doc.getId()),
"database(%s): performIndexPut: serialNum(%" PRIu64 "), docId(%s), lid(%d)",
_params._docTypeName.toString().c_str(), serialNum, doc.getId().toString().c_str(), lid);
_indexWriter->put(serialNum, doc, lid);
- if (immediateCommit) {
- _indexWriter->commit(serialNum, onWriteDone);
- }
}
void
-SearchableFeedView::performIndexPut(SerialNum serialNum, search::DocumentIdT lid, const DocumentSP &doc,
- bool immediateCommit, OnOperationDoneType onWriteDone)
+SearchableFeedView::performIndexPut(SerialNum serialNum, search::DocumentIdT lid, const DocumentSP &doc, OnOperationDoneType onWriteDone)
{
- performIndexPut(serialNum, lid, *doc, immediateCommit, onWriteDone);
+ performIndexPut(serialNum, lid, *doc, onWriteDone);
}
void
-SearchableFeedView::performIndexPut(SerialNum serialNum, search::DocumentIdT lid, FutureDoc futureDoc,
- bool immediateCommit, OnOperationDoneType onWriteDone)
+SearchableFeedView::performIndexPut(SerialNum serialNum, search::DocumentIdT lid, FutureDoc futureDoc, OnOperationDoneType onWriteDone)
{
const auto &doc = futureDoc.get();
if (doc) {
- performIndexPut(serialNum, lid, *doc, immediateCommit, onWriteDone);
+ performIndexPut(serialNum, lid, *doc, onWriteDone);
}
}
@@ -115,49 +110,44 @@ SearchableFeedView::performIndexHeartBeat(SerialNum serialNum)
}
void
-SearchableFeedView::updateIndexedFields(SerialNum serialNum, search::DocumentIdT lid, FutureDoc futureDoc,
- bool immediateCommit, OnOperationDoneType onWriteDone)
+SearchableFeedView::updateIndexedFields(SerialNum serialNum, search::DocumentIdT lid, FutureDoc futureDoc, OnOperationDoneType onWriteDone)
{
_writeService.index().execute(
makeLambdaTask([serialNum, lid, futureDoc = std::move(futureDoc),
- immediateCommit, onWriteDone = std::move(onWriteDone), this]() mutable {
- performIndexPut(serialNum, lid, std::move(futureDoc), immediateCommit, std::move(onWriteDone));
+ onWriteDone = std::move(onWriteDone), this]() mutable {
+ performIndexPut(serialNum, lid, std::move(futureDoc), std::move(onWriteDone));
}));
}
void
-SearchableFeedView::removeIndexedFields(SerialNum serialNum, search::DocumentIdT lid,
- bool immediateCommit, OnRemoveDoneType onWriteDone)
+SearchableFeedView::removeIndexedFields(SerialNum serialNum, search::DocumentIdT lid, OnRemoveDoneType onWriteDone)
{
if (!hasIndexedFields()) {
return;
}
_writeService.index().execute(
makeLambdaTask([=]() {
- performIndexRemove(serialNum, lid, immediateCommit, onWriteDone);
+ performIndexRemove(serialNum, lid, onWriteDone);
}));
}
void
-SearchableFeedView::performIndexRemove(SerialNum serialNum, search::DocumentIdT lid,
- bool immediateCommit, OnRemoveDoneType onWriteDone)
+SearchableFeedView::performIndexRemove(SerialNum serialNum, search::DocumentIdT lid, OnRemoveDoneType onWriteDone)
{
+ (void) onWriteDone;
assert(_writeService.index().isCurrentThread());
VLOG(getDebugLevel(lid, nullptr),
"database(%s): performIndexRemove: serialNum(%" PRIu64 "), lid(%d)",
_params._docTypeName.toString().c_str(), serialNum, lid);
_indexWriter->remove(serialNum, lid);
- if (immediateCommit) {
- _indexWriter->commit(serialNum, onWriteDone);
- }
}
void
-SearchableFeedView::performIndexRemove(SerialNum serialNum, const LidVector &lidsToRemove,
- bool immediateCommit, OnWriteDoneType onWriteDone)
+SearchableFeedView::performIndexRemove(SerialNum serialNum, const LidVector &lidsToRemove, OnWriteDoneType onWriteDone)
{
+ (void) onWriteDone;
assert(_writeService.index().isCurrentThread());
for (const auto lid : lidsToRemove) {
VLOG(getDebugLevel(lid, nullptr),
@@ -166,21 +156,18 @@ SearchableFeedView::performIndexRemove(SerialNum serialNum, const LidVector &lid
_indexWriter->remove(serialNum, lid);
}
- if (immediateCommit) {
- _indexWriter->commit(serialNum, onWriteDone);
- }
}
void
SearchableFeedView::removeIndexedFields(SerialNum serialNum, const LidVector &lidsToRemove,
- bool immediateCommit, OnWriteDoneType onWriteDone)
+ OnWriteDoneType onWriteDone)
{
if (!hasIndexedFields())
return;
_writeService.index().execute(
makeLambdaTask([=]() {
- performIndexRemove(serialNum, lidsToRemove, immediateCommit, onWriteDone);
+ performIndexRemove(serialNum, lidsToRemove, onWriteDone);
}));
}
diff --git a/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.h b/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.h
index 3265bc0ae70..944d383e06d 100644
--- a/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.h
+++ b/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.h
@@ -34,38 +34,21 @@ private:
bool hasIndexedFields() const { return _hasIndexedFields; }
- void performIndexPut(SerialNum serialNum, search::DocumentIdT lid, const Document &doc,
- bool immediateCommit, OnOperationDoneType onWriteDone);
-
- void performIndexPut(SerialNum serialNum, search::DocumentIdT lid, const DocumentSP &doc,
- bool immediateCommit, OnOperationDoneType onWriteDone);
- void performIndexPut(SerialNum serialNum, search::DocumentIdT lid, FutureDoc doc,
- bool immediateCommit, OnOperationDoneType onWriteDone);
-
- void performIndexRemove(SerialNum serialNum, search::DocumentIdT lid,
- bool immediateCommit, OnRemoveDoneType onWriteDone);
-
- void performIndexRemove(SerialNum serialNum, const LidVector &lidsToRemove,
- bool immediateCommit, OnWriteDoneType onWriteDone);
-
+ void performIndexPut(SerialNum serialNum, search::DocumentIdT lid, const Document &doc, OnOperationDoneType onWriteDone);
+ void performIndexPut(SerialNum serialNum, search::DocumentIdT lid, const DocumentSP &doc, OnOperationDoneType onWriteDone);
+ void performIndexPut(SerialNum serialNum, search::DocumentIdT lid, FutureDoc doc, OnOperationDoneType onWriteDone);
+ void performIndexRemove(SerialNum serialNum, search::DocumentIdT lid, OnRemoveDoneType onWriteDone);
+ void performIndexRemove(SerialNum serialNum, const LidVector &lidsToRemove, OnWriteDoneType onWriteDone);
void performIndexHeartBeat(SerialNum serialNum);
-
void internalDeleteBucket(const DeleteBucketOperation &delOp) override;
void performSync();
void heartBeatIndexedFields(SerialNum serialNum) override;
- void putIndexedFields(SerialNum serialNum, search::DocumentIdT lid, const DocumentSP &newDoc,
- bool immediateCommit, OnOperationDoneType onWriteDone) override;
-
- void updateIndexedFields(SerialNum serialNum, search::DocumentIdT lid, FutureDoc newDoc,
- bool immediateCommit, OnOperationDoneType onWriteDone) override;
-
- void removeIndexedFields(SerialNum serialNum, search::DocumentIdT lid,
- bool immediateCommit, OnRemoveDoneType onWriteDone) override;
-
- void removeIndexedFields(SerialNum serialNum, const LidVector &lidsToRemove,
- bool immediateCommit, OnWriteDoneType onWriteDone) override;
+ void putIndexedFields(SerialNum serialNum, search::DocumentIdT lid, const DocumentSP &newDoc, OnOperationDoneType onWriteDone) override;
+ void updateIndexedFields(SerialNum serialNum, search::DocumentIdT lid, FutureDoc newDoc, OnOperationDoneType onWriteDone) override;
+ void removeIndexedFields(SerialNum serialNum, search::DocumentIdT lid, OnRemoveDoneType onWriteDone) override;
+ void removeIndexedFields(SerialNum serialNum, const LidVector &lidsToRemove, OnWriteDoneType onWriteDone) override;
void performIndexForceCommit(SerialNum serialNum, OnForceCommitDoneType onCommitDone);
void internalForceCommit(SerialNum serialNum, OnForceCommitDoneType onCommitDone) override;
diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp
index 3db55cf6755..186c321d920 100644
--- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp
@@ -288,10 +288,10 @@ StoreOnlyFeedView::considerEarlyAck(FeedToken & token)
}
void
-StoreOnlyFeedView::putAttributes(SerialNum, Lid, const Document &, bool, OnPutDoneType) {}
+StoreOnlyFeedView::putAttributes(SerialNum, Lid, const Document &, OnPutDoneType) {}
void
-StoreOnlyFeedView::putIndexedFields(SerialNum, Lid, const Document::SP &, bool, OnOperationDoneType) {}
+StoreOnlyFeedView::putIndexedFields(SerialNum, Lid, const Document::SP &, OnOperationDoneType) {}
void
StoreOnlyFeedView::preparePut(PutOperation &putOp)
@@ -334,15 +334,14 @@ StoreOnlyFeedView::internalPut(FeedToken token, const PutOperation &putOp)
bool docAlreadyExists = putOp.getValidPrevDbdId(_params._subDbId);
if (putOp.getValidDbdId(_params._subDbId)) {
- bool immediateCommit = needImmediateCommit();
const document::GlobalId &gid = docId.getGlobalId();
std::shared_ptr<PutDoneContext> onWriteDone =
createPutDoneContext(std::move(token), std::move(uncommitted),
_gidToLidChangeHandler, doc, gid, putOp.getLid(), serialNum,
putOp.changedDbdId() && useDocumentMetaStore(serialNum));
putSummary(serialNum, putOp.getLid(), doc, onWriteDone);
- putAttributes(serialNum, putOp.getLid(), *doc, immediateCommit, onWriteDone);
- putIndexedFields(serialNum, putOp.getLid(), doc, immediateCommit, onWriteDone);
+ putAttributes(serialNum, putOp.getLid(), *doc, onWriteDone);
+ putIndexedFields(serialNum, putOp.getLid(), doc, onWriteDone);
}
if (docAlreadyExists && putOp.changedDbdId()) {
assert(!putOp.getValidDbdId(_params._subDbId));
@@ -369,7 +368,7 @@ void
StoreOnlyFeedView::heartBeatAttributes(SerialNum ) {}
void
-StoreOnlyFeedView::updateAttributes(SerialNum, Lid, const DocumentUpdate & upd, bool,
+StoreOnlyFeedView::updateAttributes(SerialNum, Lid, const DocumentUpdate & upd,
OnOperationDoneType, IFieldUpdateCallback & onUpdate)
{
for (const auto & fieldUpdate : upd.getUpdates()) {
@@ -378,12 +377,12 @@ StoreOnlyFeedView::updateAttributes(SerialNum, Lid, const DocumentUpdate & upd,
}
void
-StoreOnlyFeedView::updateAttributes(SerialNum, Lid, FutureDoc, bool, OnOperationDoneType)
+StoreOnlyFeedView::updateAttributes(SerialNum, Lid, FutureDoc, OnOperationDoneType)
{
}
void
-StoreOnlyFeedView::updateIndexedFields(SerialNum, Lid, FutureDoc, bool, OnOperationDoneType)
+StoreOnlyFeedView::updateIndexedFields(SerialNum, Lid, FutureDoc, OnOperationDoneType)
{
}
@@ -495,10 +494,9 @@ StoreOnlyFeedView::internalUpdate(FeedToken token, const UpdateOperation &updOp)
auto uncommitted = get_pending_lid_token(updOp);
considerEarlyAck(token);
- bool immediateCommit = needImmediateCommit();
auto onWriteDone = createUpdateDoneContext(std::move(token), std::move(uncommitted), updOp.getUpdate());
UpdateScope updateScope(*_schema, upd);
- updateAttributes(serialNum, lid, upd, immediateCommit, onWriteDone, updateScope);
+ updateAttributes(serialNum, lid, upd, onWriteDone, updateScope);
if (updateScope.hasIndexOrNonAttributeFields()) {
PromisedDoc promisedDoc;
@@ -506,7 +504,7 @@ StoreOnlyFeedView::internalUpdate(FeedToken token, const UpdateOperation &updOp)
onWriteDone->setDocument(futureDoc);
_pendingLidsForDocStore.waitComplete(lid);
if (updateScope._indexedFields) {
- updateIndexedFields(serialNum, lid, futureDoc, immediateCommit, onWriteDone);
+ updateIndexedFields(serialNum, lid, futureDoc, onWriteDone);
}
PromisedStream promisedStream;
FutureStream futureStream = promisedStream.get_future();
@@ -522,7 +520,7 @@ StoreOnlyFeedView::internalUpdate(FeedToken token, const UpdateOperation &updOp)
makeUpdatedDocument(serialNum, lid, *upd, onWriteDone,
std::move(promisedDoc), std::move(promisedStream));
}));
- updateAttributes(serialNum, lid, std::move(futureDoc), immediateCommit, onWriteDone);
+ updateAttributes(serialNum, lid, std::move(futureDoc), onWriteDone);
}
}
@@ -576,10 +574,10 @@ StoreOnlyFeedView::lookupDocId(const DocumentId &docId, Lid &lid) const
}
void
-StoreOnlyFeedView::removeAttributes(SerialNum, Lid, bool, OnRemoveDoneType) {}
+StoreOnlyFeedView::removeAttributes(SerialNum, Lid, OnRemoveDoneType) {}
void
-StoreOnlyFeedView::removeIndexedFields(SerialNum, Lid, bool, OnRemoveDoneType) {}
+StoreOnlyFeedView::removeIndexedFields(SerialNum, Lid, OnRemoveDoneType) {}
void
StoreOnlyFeedView::prepareRemove(RemoveOperation &rmOp)
@@ -666,9 +664,8 @@ StoreOnlyFeedView::internalRemove(FeedToken token, IPendingLidTracker::Token unc
std::move(pendingNotifyRemoveDone), (explicitReuseLid ? lid : 0u),
std::move(moveDoneCtx));
removeSummary(serialNum, lid, onWriteDone);
- bool immediateCommit = needImmediateCommit();
- removeAttributes(serialNum, lid, immediateCommit, onWriteDone);
- removeIndexedFields(serialNum, lid, immediateCommit, onWriteDone);
+ removeAttributes(serialNum, lid, onWriteDone);
+ removeIndexedFields(serialNum, lid, onWriteDone);
}
PendingNotifyRemoveDone
@@ -699,14 +696,13 @@ StoreOnlyFeedView::adjustMetaStore(const DocumentOperation &op, const GlobalId &
}
void
-StoreOnlyFeedView::removeAttributes(SerialNum, const LidVector &, bool , OnWriteDoneType ) {}
+StoreOnlyFeedView::removeAttributes(SerialNum, const LidVector &, OnWriteDoneType ) {}
void
-StoreOnlyFeedView::removeIndexedFields(SerialNum , const LidVector &, bool , OnWriteDoneType ) {}
+StoreOnlyFeedView::removeIndexedFields(SerialNum , const LidVector &, OnWriteDoneType ) {}
size_t
-StoreOnlyFeedView::removeDocuments(const RemoveDocumentsOperation &op, bool remove_index_and_attributes,
- bool immediateCommit)
+StoreOnlyFeedView::removeDocuments(const RemoveDocumentsOperation &op, bool remove_index_and_attributes)
{
const SerialNum serialNum = op.getSerialNum();
const LidVectorContext::SP &ctx = op.getLidsToRemove(_params._subDbId);
@@ -744,8 +740,8 @@ StoreOnlyFeedView::removeDocuments(const RemoveDocumentsOperation &op, bool remo
onWriteDone = std::make_shared<RemoveBatchDoneContext>(_writeService.master(), std::move(removeBatchDoneTask),
_gidToLidChangeHandler, std::move(gidsToRemove), serialNum);
if (remove_index_and_attributes) {
- removeIndexedFields(serialNum, lidsToRemove, immediateCommit, onWriteDone);
- removeAttributes(serialNum, lidsToRemove, immediateCommit, onWriteDone);
+ removeIndexedFields(serialNum, lidsToRemove, onWriteDone);
+ removeAttributes(serialNum, lidsToRemove, onWriteDone);
}
if (useDocumentStore(serialNum + 1)) {
for (const auto &lid : lidsToRemove) {
@@ -779,8 +775,7 @@ StoreOnlyFeedView::handleDeleteBucket(const DeleteBucketOperation &delOp)
void
StoreOnlyFeedView::internalDeleteBucket(const DeleteBucketOperation &delOp)
{
- bool immediateCommit = needImmediateCommit();
- size_t rm_count = removeDocuments(delOp, true, immediateCommit);
+ size_t rm_count = removeDocuments(delOp, true);
LOG(debug, "internalDeleteBucket(): docType(%s), bucket(%s), lidsToRemove(%zu)",
_params._docTypeName.toString().c_str(), delOp.getBucketId().toString().c_str(), rm_count);
}
@@ -818,15 +813,14 @@ StoreOnlyFeedView::handleMove(const MoveOperation &moveOp, IDestructorCallback::
PendingNotifyRemoveDone pendingNotifyRemoveDone = adjustMetaStore(moveOp, docId.getGlobalId(), docId);
bool docAlreadyExists = moveOp.getValidPrevDbdId(_params._subDbId);
if (moveOp.getValidDbdId(_params._subDbId)) {
- bool immediateCommit = needImmediateCommit();
const document::GlobalId &gid = docId.getGlobalId();
std::shared_ptr<PutDoneContext> onWriteDone =
createPutDoneContext(FeedToken(), _pendingLidsForCommit->produce(moveOp.getLid()),
_gidToLidChangeHandler, doc, gid, moveOp.getLid(), serialNum,
moveOp.changedDbdId() && useDocumentMetaStore(serialNum), doneCtx);
putSummary(serialNum, moveOp.getLid(), doc, onWriteDone);
- putAttributes(serialNum, moveOp.getLid(), *doc, immediateCommit, onWriteDone);
- putIndexedFields(serialNum, moveOp.getLid(), doc, immediateCommit, onWriteDone);
+ putAttributes(serialNum, moveOp.getLid(), *doc, onWriteDone);
+ putIndexedFields(serialNum, moveOp.getLid(), doc, onWriteDone);
}
if (docAlreadyExists && moveOp.changedDbdId()) {
internalRemove(FeedToken(), _pendingLidsForCommit->produce(moveOp.getPrevLid()), serialNum, std::move(pendingNotifyRemoveDone), moveOp.getPrevLid(), doneCtx);
@@ -853,7 +847,7 @@ handlePruneRemovedDocuments(const PruneRemovedDocumentsOperation &pruneOp)
{
assert(_params._subDbType == SubDbType::REMOVED);
assert(pruneOp.getSubDbId() == _params._subDbId);
- uint32_t rm_count = removeDocuments(pruneOp, false, false);
+ uint32_t rm_count = removeDocuments(pruneOp, false);
LOG(debug, "MinimalFeedView::handlePruneRemovedDocuments called, doctype(%s) %u lids pruned, limit %u",
_params._docTypeName.toString().c_str(), rm_count,
diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h
index 167b246ec0b..da1459d521c 100644
--- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h
+++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h
@@ -181,8 +181,7 @@ private:
// Removes documents from meta store and document store.
// returns the number of documents removed.
- size_t removeDocuments(const RemoveDocumentsOperation &op, bool remove_index_and_attribute_fields,
- bool immediateCommit);
+ size_t removeDocuments(const RemoveDocumentsOperation &op, bool remove_index_and_attribute_fields);
void internalRemove(FeedToken token, IPendingLidTracker::Token uncommitted, SerialNum serialNum,
PendingNotifyRemoveDone &&pendingNotifyRemoveDone,
@@ -202,30 +201,20 @@ protected:
virtual void heartBeatAttributes(SerialNum serialNum);
private:
- virtual void putAttributes(SerialNum serialNum, Lid lid, const Document &doc,
- bool immediateCommit, OnPutDoneType onWriteDone);
-
- virtual void putIndexedFields(SerialNum serialNum, Lid lid, const DocumentSP &newDoc,
- bool immediateCommit, OnOperationDoneType onWriteDone);
+ virtual void putAttributes(SerialNum serialNum, Lid lid, const Document &doc, OnPutDoneType onWriteDone);
+ virtual void putIndexedFields(SerialNum serialNum, Lid lid, const DocumentSP &newDoc, OnOperationDoneType onWriteDone);
virtual void updateAttributes(SerialNum serialNum, Lid lid, const DocumentUpdate &upd,
- bool immediateCommit, OnOperationDoneType onWriteDone, IFieldUpdateCallback & onUpdate);
-
- virtual void updateAttributes(SerialNum serialNum, Lid lid, FutureDoc doc,
- bool immediateCommit, OnOperationDoneType onWriteDone);
+ OnOperationDoneType onWriteDone, IFieldUpdateCallback & onUpdate);
- virtual void updateIndexedFields(SerialNum serialNum, Lid lid, FutureDoc doc,
- bool immediateCommit, OnOperationDoneType onWriteDone);
-
- virtual void removeAttributes(SerialNum serialNum, Lid lid, bool immediateCommit, OnRemoveDoneType onWriteDone);
- virtual void removeIndexedFields(SerialNum serialNum, Lid lid, bool immediateCommit, OnRemoveDoneType onWriteDone);
+ virtual void updateAttributes(SerialNum serialNum, Lid lid, FutureDoc doc, OnOperationDoneType onWriteDone);
+ virtual void updateIndexedFields(SerialNum serialNum, Lid lid, FutureDoc doc, OnOperationDoneType onWriteDone);
+ virtual void removeAttributes(SerialNum serialNum, Lid lid, OnRemoveDoneType onWriteDone);
+ virtual void removeIndexedFields(SerialNum serialNum, Lid lid, OnRemoveDoneType onWriteDone);
protected:
- virtual void removeAttributes(SerialNum serialNum, const LidVector &lidsToRemove,
- bool immediateCommit, OnWriteDoneType onWriteDone);
-
- virtual void removeIndexedFields(SerialNum serialNum, const LidVector &lidsToRemove,
- bool immediateCommit, OnWriteDoneType onWriteDone);
+ virtual void removeAttributes(SerialNum serialNum, const LidVector &lidsToRemove, OnWriteDoneType onWriteDone);
+ virtual void removeIndexedFields(SerialNum serialNum, const LidVector &lidsToRemove, OnWriteDoneType onWriteDone);
virtual void internalForceCommit(SerialNum serialNum, OnForceCommitDoneType onCommitDone);
public:
StoreOnlyFeedView(const Context &ctx, const PersistentParams &params);
diff --git a/storage/src/vespa/storage/bucketdb/btree_lockable_map.h b/storage/src/vespa/storage/bucketdb/btree_lockable_map.h
index ea3a7838d43..6e42a721732 100644
--- a/storage/src/vespa/storage/bucketdb/btree_lockable_map.h
+++ b/storage/src/vespa/storage/bucketdb/btree_lockable_map.h
@@ -37,7 +37,7 @@ public:
using BucketId = document::BucketId;
BTreeLockableMap();
- ~BTreeLockableMap();
+ ~BTreeLockableMap() override;
bool operator==(const BTreeLockableMap& other) const;
bool operator!=(const BTreeLockableMap& other) const {