diff options
author | Tor Egge <Tor.Egge@online.no> | 2023-02-06 16:18:49 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2023-02-06 18:56:51 +0100 |
commit | 5337bc72e789586875f4732950841c9720eaff5b (patch) | |
tree | 4c9a9a5979e196b053e6162dd315970b5ef3e208 /searchcore/src/tests/proton/attribute | |
parent | 1a37850993a673e79182eb62220d063878d48410 (diff) |
Reapply make attribute collection spec serial num optional.
Pass reconfig serial num explicitly to various reconfigure member
functions since it might not be available from attribute collection spec.
Diffstat (limited to 'searchcore/src/tests/proton/attribute')
-rw-r--r-- | searchcore/src/tests/proton/attribute/attribute_initializer/attribute_initializer_test.cpp | 13 | ||||
-rw-r--r-- | searchcore/src/tests/proton/attribute/attribute_manager/attribute_manager_test.cpp | 33 |
2 files changed, 43 insertions, 3 deletions
diff --git a/searchcore/src/tests/proton/attribute/attribute_initializer/attribute_initializer_test.cpp b/searchcore/src/tests/proton/attribute/attribute_initializer/attribute_initializer_test.cpp index 106bdf5cc98..52b7a7ce60a 100644 --- a/searchcore/src/tests/proton/attribute/attribute_initializer/attribute_initializer_test.cpp +++ b/searchcore/src/tests/proton/attribute/attribute_initializer/attribute_initializer_test.cpp @@ -95,7 +95,7 @@ struct Fixture vespalib::ThreadStackExecutor _executor; Fixture(); ~Fixture(); - std::unique_ptr<AttributeInitializer> createInitializer(AttributeSpec && spec, SerialNum serialNum); + std::unique_ptr<AttributeInitializer> createInitializer(AttributeSpec && spec, std::optional<SerialNum> serialNum); }; Fixture::Fixture() @@ -109,7 +109,7 @@ Fixture::Fixture() Fixture::~Fixture() = default; std::unique_ptr<AttributeInitializer> -Fixture::createInitializer(AttributeSpec &&spec, SerialNum serialNum) +Fixture::createInitializer(AttributeSpec &&spec, std::optional<SerialNum> serialNum) { return std::make_unique<AttributeInitializer>(_diskLayout->createAttributeDir(spec.getName()), "test.subdb", std::move(spec), serialNum, _factory, _executor); } @@ -241,6 +241,15 @@ TEST("require that transient memory usage is reported for attribute load without EXPECT_EQUAL(0u, avi->get_transient_memory_usage()); } +TEST("require that saved attribute is ignored when serial num is not set") +{ + saveAttr("a", int32_sv, 10, 2); + Fixture f; + auto av = f.createInitializer({"a", int32_sv}, std::nullopt)->init().getAttribute(); + EXPECT_EQUAL(0u, av->getCreateSerialNum()); + EXPECT_EQUAL(1u, av->getNumDocs()); +} + } TEST_MAIN() diff --git a/searchcore/src/tests/proton/attribute/attribute_manager/attribute_manager_test.cpp b/searchcore/src/tests/proton/attribute/attribute_manager/attribute_manager_test.cpp index 616bf9edf6a..29639448023 100644 --- a/searchcore/src/tests/proton/attribute/attribute_manager/attribute_manager_test.cpp +++ b/searchcore/src/tests/proton/attribute/attribute_manager/attribute_manager_test.cpp @@ -2,6 +2,7 @@ #include <vespa/searchcore/proton/attribute/attribute_collection_spec_factory.h> #include <vespa/searchcore/proton/attribute/attribute_manager_initializer.h> +#include <vespa/searchcore/proton/attribute/attribute_manager_reconfig.h> #include <vespa/searchcore/proton/attribute/attribute_writer.h> #include <vespa/searchcore/proton/attribute/attributemanager.h> #include <vespa/searchcore/proton/attribute/exclusive_attribute_read_accessor.h> @@ -222,7 +223,7 @@ SequentialAttributeManager::SequentialAttributeManager(const AttributeManager &c : initializer(newSpec.getDocIdLimit()), mgr(currMgr, std::move(newSpec), initializer) { - mgr.addInitializedAttributes(initializer.getInitializedAttributes()); + mgr.addInitializedAttributes(initializer.getInitializedAttributes(), std::nullopt, std::nullopt); } SequentialAttributeManager::~SequentialAttributeManager() = default; @@ -877,6 +878,36 @@ TEST_F("transient resource usage is zero in steady state", Fixture) EXPECT_EQUAL(0u, usage.memory()); } +TEST_F("late create serial number is set on new attributes", Fixture) +{ + auto am1 = f.make_manager(); + am1->addAttribute({"a1", INT32_SINGLE}, 4); + auto a1 = am1->getAttribute("a1")->getSP(); + uint32_t docid = 0; + a1->addDoc(docid); + EXPECT_EQUAL(1u, docid); + a1->clearDoc(docid); + a1->commit(CommitParam(5)); + AttrSpecList new_spec; + new_spec.emplace_back("a1", INT32_SINGLE); + new_spec.emplace_back("a2", INT32_SINGLE); + // late serial number + auto am2 = am1->prepare_create(AttrMgrSpec(std::move(new_spec), 10, std::nullopt))->create(14, 20); + auto am3 = std::dynamic_pointer_cast<AttributeManager>(am2); + EXPECT_TRUE(a1 == am3->getAttribute("a1")->getSP()); + auto a2 = am3->getAttribute("a2")->getSP(); + TEST_DO(assertCreateSerialNum(*am3, "a1", 4)); + TEST_DO(assertCreateSerialNum(*am3, "a2", 20)); + TEST_DO(assertShrinkTargetSerial(*am3, "a1", 3)); + TEST_DO(assertShrinkTargetSerial(*am3, "a2", 19)); + EXPECT_EQUAL(0u, am3->getFlushedSerialNum("a1")); + EXPECT_EQUAL(0u, am3->getFlushedSerialNum("a2")); + EXPECT_EQUAL(2u, a1->getNumDocs()); + EXPECT_EQUAL(2u, a1->getCommittedDocIdLimit()); + EXPECT_EQUAL(14u, a2->getNumDocs()); + EXPECT_EQUAL(14u, a2->getCommittedDocIdLimit()); +} + TEST_MAIN() { std::filesystem::remove_all(std::filesystem::path(test_dir)); |