From 3629c5eca16a5c518229c87f6a730f3124c2e491 Mon Sep 17 00:00:00 2001 From: Tor Egge Date: Fri, 4 Jan 2019 14:27:45 +0000 Subject: Correct tracking of docIdLimit in FixedSourceSelector. --- .../attribute/sourceselector/sourceselector_test.cpp | 17 +++++++++++++++++ .../src/vespa/searchlib/attribute/attributevector.h | 11 +++++------ .../vespa/searchlib/attribute/fixedsourceselector.cpp | 2 ++ 3 files changed, 24 insertions(+), 6 deletions(-) (limited to 'searchlib') diff --git a/searchlib/src/tests/attribute/sourceselector/sourceselector_test.cpp b/searchlib/src/tests/attribute/sourceselector/sourceselector_test.cpp index 1eda0b7cb67..75a0ccf6ab9 100644 --- a/searchlib/src/tests/attribute/sourceselector/sourceselector_test.cpp +++ b/searchlib/src/tests/attribute/sourceselector/sourceselector_test.cpp @@ -49,6 +49,7 @@ private: template void requireThatSourcesAreCountedCorrectly(); void requireThatSourcesAreCountedCorrectly(); + void requireThatDocIdLimitIsCorrect(); }; int @@ -64,6 +65,7 @@ Test::Main() TEST_DO(requireThatSelectorCanSaveAndLoad()); TEST_DO(requireThatCompleteSourceRangeIsHandled()); TEST_DO(requireThatSourcesAreCountedCorrectly()); + TEST_DO(requireThatDocIdLimitIsCorrect()); TEST_DONE(); } @@ -219,6 +221,21 @@ Test::requireThatSourcesAreCountedCorrectly() requireThatSourcesAreCountedCorrectly(); } +void +Test::requireThatDocIdLimitIsCorrect() +{ + FixedSourceSelector selector(default_source, base_file_name); + EXPECT_EQUAL(0u, selector.getDocIdLimit()); + selector.setSource(8, 10); + EXPECT_EQUAL(9u, selector.getDocIdLimit()); + selector.compactLidSpace(4); + EXPECT_EQUAL(4u, selector.getDocIdLimit()); + selector.setSource(6, 10); + EXPECT_EQUAL(7u, selector.getDocIdLimit()); + auto selector2 = selector.cloneAndSubtract(base_file_name2, 3); + EXPECT_EQUAL(7u, selector2->getDocIdLimit()); +} + } // namespace TEST_APPHOOK(Test); diff --git a/searchlib/src/vespa/searchlib/attribute/attributevector.h b/searchlib/src/vespa/searchlib/attribute/attributevector.h index ab590f807bf..1e8dfd6658a 100644 --- a/searchlib/src/vespa/searchlib/attribute/attributevector.h +++ b/searchlib/src/vespa/searchlib/attribute/attributevector.h @@ -256,12 +256,6 @@ protected: EnumModifier getEnumModifier(); ValueModifier getValueModifier() { return ValueModifier(*this); } - void updateUncommittedDocIdLimit(DocId doc) { - if (_uncommittedDocIdLimit <= doc) { - _uncommittedDocIdLimit = doc + 1; - } - } - void updateCommittedDocIdLimit() { if (_uncommittedDocIdLimit != 0) { if (_uncommittedDocIdLimit > _committedDocIdLimit) { @@ -413,6 +407,11 @@ public: void setCommittedDocIdLimit(uint32_t committedDocIdLimit) { _committedDocIdLimit = committedDocIdLimit; } + void updateUncommittedDocIdLimit(DocId doc) { + if (_uncommittedDocIdLimit <= doc) { + _uncommittedDocIdLimit = doc + 1; + } + } const Status & getStatus() const { return _status; } Status & getStatus() { return _status; } diff --git a/searchlib/src/vespa/searchlib/attribute/fixedsourceselector.cpp b/searchlib/src/vespa/searchlib/attribute/fixedsourceselector.cpp index 385ffc95c40..2ee35e3403f 100644 --- a/searchlib/src/vespa/searchlib/attribute/fixedsourceselector.cpp +++ b/searchlib/src/vespa/searchlib/attribute/fixedsourceselector.cpp @@ -45,6 +45,7 @@ FixedSourceSelector::cloneAndSubtract(const vespalib::string & attrBaseFileName, } selector->_source.commit(); selector->setBaseId(getBaseId() + diff); + selector->_source.setCommittedDocIdLimit(_source.getCommittedDocIdLimit()); return selector; } @@ -85,6 +86,7 @@ FixedSourceSelector::setSource(uint32_t docId, queryeval::Source source) **/ reserve(docId+1); _source.update(docId, source); + _source.updateUncommittedDocIdLimit(docId + 1); _source.commit(); } -- cgit v1.2.3