diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-12-20 02:07:35 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-20 02:07:35 +0100 |
commit | 04677306ef130fad59efa29141b6fe7b185927fe (patch) | |
tree | e3b2831e09fe0ee713893038129e80485c280353 /searchlib | |
parent | 154f7d1b449f859f2f602b55b7c8a0fd2185ceda (diff) | |
parent | 7530528f450af5fe22e8d5b6b9065678c71936c6 (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.cpp | 9 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/fef/termfieldmatchdata.cpp | 5 |
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; } } |