summaryrefslogtreecommitdiffstats
path: root/searchlib/src/tests
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2019-08-26 12:04:52 +0200
committerTor Egge <Tor.Egge@broadpark.no>2019-08-26 16:15:32 +0200
commitdab8f7407cd1872bbe5c10b9a94ab4a8cd91eaa3 (patch)
treec78e7942f5555f0c2ca5c5d0888861f972a78d86 /searchlib/src/tests
parentb26d567a0eb28d97f0601440c781ea5e5a3c1ed1 (diff)
Use unique store enumerator when saving enumerated attribute vectors.
Diffstat (limited to 'searchlib/src/tests')
-rw-r--r--searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp17
-rw-r--r--searchlib/src/tests/attribute/enumstore/enumstore_test.cpp26
2 files changed, 26 insertions, 17 deletions
diff --git a/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp b/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp
index 9972fa785eb..b9feeb124ce 100644
--- a/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp
+++ b/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp
@@ -8,6 +8,7 @@
#include <vespa/searchlib/attribute/attributeguard.h>
#include <vespa/searchlib/attribute/attributememoryfilebufferwriter.h>
#include <vespa/searchlib/attribute/attributememorysavetarget.h>
+#include <vespa/searchlib/attribute/attributesaver.h>
#include <vespa/searchlib/attribute/attrvector.h>
#include <vespa/searchlib/attribute/multinumericattribute.h>
#include <vespa/searchlib/attribute/multistringattribute.h>
@@ -142,6 +143,7 @@ private:
SearchContextPtr getSearch(const V & vec);
MemAttr::SP saveMem(AttributeVector &v);
+ void saveMemDuringCompaction(AttributeVector &v);
void checkMem(AttributeVector &v, const MemAttr &e);
MemAttr::SP saveBoth(AttributePtr v);
AttributePtr make(Config cfg, const vespalib::string &pref, bool fastSearch = false);
@@ -503,6 +505,19 @@ EnumeratedSaveTest::saveMem(AttributeVector &v)
return res;
}
+void
+EnumeratedSaveTest::saveMemDuringCompaction(AttributeVector &v)
+{
+ MemAttr::SP res(new MemAttr);
+ auto *enum_store_base = v.getEnumStoreBase();
+ if (enum_store_base != nullptr) {
+ auto saver = v.onInitSave(v.getBaseFileName());
+ // Simulate compaction
+ enum_store_base->get_data_store_base().bump_compaction_count();
+ auto save_result = saver->save(*res);
+ EXPECT_EQUAL(!v.hasMultiValue(), save_result);
+ }
+}
void
EnumeratedSaveTest::checkMem(AttributeVector &v, const MemAttr &e)
@@ -608,6 +623,8 @@ EnumeratedSaveTest::testReload(AttributePtr v0,
TEST_DO((checkLoad<VectorType, BufferType>(v, pref + "2_e", v2)));
TEST_DO(checkMem(*v, supportsEnumerated ? *emv2 : *mv2));
+ saveMemDuringCompaction(*v);
+
TermFieldMatchData md;
SearchContextPtr sc = getSearch<VectorType>(as<VectorType>(v));
sc->fetchPostings(true);
diff --git a/searchlib/src/tests/attribute/enumstore/enumstore_test.cpp b/searchlib/src/tests/attribute/enumstore/enumstore_test.cpp
index 5476f0f8e66..3a70073226c 100644
--- a/searchlib/src/tests/attribute/enumstore/enumstore_test.cpp
+++ b/searchlib/src/tests/attribute/enumstore/enumstore_test.cpp
@@ -54,7 +54,7 @@ private:
void testCompaction();
template <typename EnumStoreType>
- void testCompaction(bool hasPostings, bool disableReEnumerate);
+ void testCompaction(bool hasPostings);
void testReset();
template <typename EnumStoreType>
@@ -396,15 +396,13 @@ EnumStoreTest::testUniques
void
EnumStoreTest::testCompaction()
{
- testCompaction<StringEnumStore>(false, false);
- testCompaction<StringEnumStore>(true, false);
- testCompaction<StringEnumStore>(false, true);
- testCompaction<StringEnumStore>(true, true);
+ testCompaction<StringEnumStore>(false);
+ testCompaction<StringEnumStore>(true);
}
template <typename EnumStoreType>
void
-EnumStoreTest::testCompaction(bool hasPostings, bool disableReEnumerate)
+EnumStoreTest::testCompaction(bool hasPostings)
{
// entrySize = 15 before alignment
uint32_t entrySize = EnumStoreType::alignEntrySize(15);
@@ -462,30 +460,24 @@ EnumStoreTest::testCompaction(bool hasPostings, bool disableReEnumerate)
EXPECT_EQUAL(entrySize + RESERVED_BYTES, ses.getBuffer(0).getDeadElems());
// perform compaction
- if (disableReEnumerate) {
- ses.disableReEnumerate();
- }
EnumStoreBase::EnumIndexMap old2New;
EXPECT_TRUE(ses.performCompaction(3 * entrySize, old2New));
- if (disableReEnumerate) {
- ses.enableReEnumerate();
- }
EXPECT_TRUE(ses.getRemaining() >= 3 * entrySize);
EXPECT_TRUE(ses.getBuffer(1).remaining() >= 3 * entrySize);
EXPECT_TRUE(ses.getBuffer(1).size() == entrySize * 4);
EXPECT_TRUE(ses.getBuffer(1).getDeadElems() == 0);
- EXPECT_EQUAL((disableReEnumerate ? 4u : 3u), ses.getLastEnum());
+ EXPECT_EQUAL(3u, ses.getLastEnum());
// add new unique strings
ses.addEnum("enum05", idx);
- EXPECT_EQUAL((disableReEnumerate ? 5u : 4u), ses.getEnum(idx));
+ EXPECT_EQUAL(4u, ses.getEnum(idx));
ses.addEnum("enum06", idx);
- EXPECT_EQUAL((disableReEnumerate ? 6u : 5u), ses.getEnum(idx));
+ EXPECT_EQUAL(5u, ses.getEnum(idx));
ses.addEnum("enum00", idx);
- EXPECT_EQUAL((disableReEnumerate ? 7u : 6u), ses.getEnum(idx));
+ EXPECT_EQUAL(6u, ses.getEnum(idx));
- EXPECT_EQUAL((disableReEnumerate ? 7u : 6u), ses.getLastEnum());
+ EXPECT_EQUAL(6u, ses.getLastEnum());
// compare old and new indices
for (uint32_t i = 0; i < indices.size(); ++i) {