diff options
author | Tor Egge <Tor.Egge@broadpark.no> | 2019-08-26 12:04:52 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@broadpark.no> | 2019-08-26 16:15:32 +0200 |
commit | dab8f7407cd1872bbe5c10b9a94ab4a8cd91eaa3 (patch) | |
tree | c78e7942f5555f0c2ca5c5d0888861f972a78d86 /searchlib/src/tests | |
parent | b26d567a0eb28d97f0601440c781ea5e5a3c1ed1 (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.cpp | 17 | ||||
-rw-r--r-- | searchlib/src/tests/attribute/enumstore/enumstore_test.cpp | 26 |
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) { |