summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-12-20 02:07:35 +0100
committerGitHub <noreply@github.com>2019-12-20 02:07:35 +0100
commit04677306ef130fad59efa29141b6fe7b185927fe (patch)
treee3b2831e09fe0ee713893038129e80485c280353 /searchlib
parent154f7d1b449f859f2f602b55b7c8a0fd2185ceda (diff)
parent7530528f450af5fe22e8d5b6b9065678c71936c6 (diff)
Merge pull request #11605 from vespa-engine/balder/avoid-work-for-nothing
If it is full, it is full. No point in moving data to new buffers as …
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/fef/fef_test.cpp9
-rw-r--r--searchlib/src/vespa/searchlib/fef/termfieldmatchdata.cpp5
2 files changed, 11 insertions, 3 deletions
diff --git a/searchlib/src/tests/fef/fef_test.cpp b/searchlib/src/tests/fef/fef_test.cpp
index 244a4e26554..896a917d6e3 100644
--- a/searchlib/src/tests/fef/fef_test.cpp
+++ b/searchlib/src/tests/fef/fef_test.cpp
@@ -68,14 +68,23 @@ TEST("test TermFieldMatchDataAppend")
tmd.appendPosition(pos);
EXPECT_EQUAL(2u, tmd.size());
EXPECT_EQUAL(2u, tmd.capacity());
+ uint32_t resizeCount(0);
+ const TermFieldMatchDataPosition * prev = tmd.begin();
for (size_t i(2); i < std::numeric_limits<uint16_t>::max(); i++) {
EXPECT_EQUAL(i, tmd.size());
EXPECT_EQUAL(std::min(size_t(std::numeric_limits<uint16_t>::max()), vespalib::roundUp2inN(i)), tmd.capacity());
tmd.appendPosition(pos);
+ const TermFieldMatchDataPosition * cur = tmd.begin();
+ if (cur != prev) {
+ prev = cur;
+ resizeCount++;
+ }
}
+ EXPECT_EQUAL(15u, resizeCount);
EXPECT_EQUAL(std::numeric_limits<uint16_t>::max(), tmd.size());
EXPECT_EQUAL(std::numeric_limits<uint16_t>::max(), tmd.capacity());
tmd.appendPosition(pos);
+ EXPECT_EQUAL(prev, tmd.begin());
EXPECT_EQUAL(std::numeric_limits<uint16_t>::max(), tmd.size());
EXPECT_EQUAL(std::numeric_limits<uint16_t>::max(), tmd.capacity());
}
diff --git a/searchlib/src/vespa/searchlib/fef/termfieldmatchdata.cpp b/searchlib/src/vespa/searchlib/fef/termfieldmatchdata.cpp
index 4de84866edf..781135bf246 100644
--- a/searchlib/src/vespa/searchlib/fef/termfieldmatchdata.cpp
+++ b/searchlib/src/vespa/searchlib/fef/termfieldmatchdata.cpp
@@ -142,6 +142,7 @@ TermFieldMatchData::allocateVector()
void
TermFieldMatchData::appendPositionToAllocatedVector(const TermFieldMatchDataPosition &pos)
{
+ if (__builtin_expect(_sz >= MAX_ELEMS, false)) return;
assert(allocated());
if (__builtin_expect(_sz >= _data._positions._allocated, false)) {
resizePositionVector(_sz*2);
@@ -149,9 +150,7 @@ TermFieldMatchData::appendPositionToAllocatedVector(const TermFieldMatchDataPosi
if (__builtin_expect(pos.getElementLen() > _data._positions._maxElementLength, false)) {
_data._positions._maxElementLength = pos.getElementLen();
}
- if (__builtin_expect(_sz < MAX_ELEMS, true)) {
- _data._positions._positions[_sz++] = pos;
- }
+ _data._positions._positions[_sz++] = pos;
}
}