summaryrefslogtreecommitdiffstats
path: root/searchcore/src/tests/proton/attribute
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2023-02-06 16:18:49 +0100
committerTor Egge <Tor.Egge@online.no>2023-02-06 16:18:49 +0100
commit42ef5b4cb30135b13859741145d9008ff606c4b0 (patch)
tree9722f6f6bcce852cb04c6b1aba1321206eef5fe5 /searchcore/src/tests/proton/attribute
parent8e9ec7f77efecfa970b58568f024a118122b334e (diff)
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.cpp13
-rw-r--r--searchcore/src/tests/proton/attribute/attribute_manager/attribute_manager_test.cpp33
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));