summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <tegge@oath.com>2019-01-04 14:27:45 +0000
committerTor Egge <tegge@oath.com>2019-01-08 18:30:29 +0000
commit3629c5eca16a5c518229c87f6a730f3124c2e491 (patch)
tree31706b21b4dcfb35a6ae0080c4960b57445c3659
parentb317568915d9e11b11acbf27763ed1b75f0534cb (diff)
Correct tracking of docIdLimit in FixedSourceSelector.
-rw-r--r--searchlib/src/tests/attribute/sourceselector/sourceselector_test.cpp17
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attributevector.h11
-rw-r--r--searchlib/src/vespa/searchlib/attribute/fixedsourceselector.cpp2
3 files changed, 24 insertions, 6 deletions
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 <typename SelectorType>
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<FixedSourceSelector>();
}
+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();
}