summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2021-07-15 17:45:01 +0200
committerGitHub <noreply@github.com>2021-07-15 17:45:01 +0200
commit073c5be0df2970bd4e6d926a56d14657965992d3 (patch)
tree0a679a452c64b2a108295a781723d5df3ca25143
parent7fee64157eaa841a42532e701b8e6bd48b3ec825 (diff)
parenta9f6d620a759f24967b0f44238751d9e156eca5b (diff)
Merge pull request #18619 from vespa-engine/geirst/generalize-address-space-usage-reporting
Generalize how address space usage is reported from attribute vectors.
-rw-r--r--searchcore/src/tests/proton/attribute/attribute_usage_filter/attribute_usage_filter_test.cpp19
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attribute_usage_stats.cpp9
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attribute_vector_explorer.cpp4
-rw-r--r--searchlib/src/tests/attribute/attribute_test.cpp41
-rw-r--r--searchlib/src/tests/attribute/compaction/attribute_compaction_test.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/CMakeLists.txt1
-rw-r--r--searchlib/src/vespa/searchlib/attribute/address_space_components.cpp21
-rw-r--r--searchlib/src/vespa/searchlib/attribute/address_space_components.h21
-rw-r--r--searchlib/src/vespa/searchlib/attribute/address_space_usage.cpp43
-rw-r--r--searchlib/src/vespa/searchlib/attribute/address_space_usage.h24
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attributevector.cpp25
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attributevector.h3
-rw-r--r--searchlib/src/vespa/searchlib/attribute/enumattribute.h2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/enumattribute.hpp8
-rw-r--r--searchlib/src/vespa/searchlib/attribute/multivalueattribute.h2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/multivalueattribute.hpp9
-rw-r--r--vespalib/src/vespa/vespalib/util/address_space.cpp7
-rw-r--r--vespalib/src/vespa/vespalib/util/address_space.h1
18 files changed, 160 insertions, 82 deletions
diff --git a/searchcore/src/tests/proton/attribute/attribute_usage_filter/attribute_usage_filter_test.cpp b/searchcore/src/tests/proton/attribute/attribute_usage_filter/attribute_usage_filter_test.cpp
index bcfdca9da19..a1c7b0a152d 100644
--- a/searchcore/src/tests/proton/attribute/attribute_usage_filter/attribute_usage_filter_test.cpp
+++ b/searchcore/src/tests/proton/attribute/attribute_usage_filter/attribute_usage_filter_test.cpp
@@ -1,10 +1,13 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/log/log.h>
-LOG_SETUP("attribute_usage_filter_test");
-#include <vespa/vespalib/testkit/testapp.h>
-#include <vespa/vespalib/util/size_literals.h>
+
#include <vespa/searchcore/proton/attribute/attribute_usage_filter.h>
#include <vespa/searchcore/proton/attribute/i_attribute_usage_listener.h>
+#include <vespa/searchlib/attribute/address_space_components.h>
+#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/util/size_literals.h>
+
+#include <vespa/log/log.h>
+LOG_SETUP("attribute_usage_filter_test");
using proton::AttributeUsageFilter;
using proton::AttributeUsageStats;
@@ -24,15 +27,15 @@ class MyAttributeStats : public AttributeUsageStats
{
public:
void triggerEnumStoreLimit() {
- merge({ enumStoreOverLoad,
- search::AddressSpaceUsage::defaultMultiValueUsage() },
+ merge({ enumStoreOverLoad,
+ search::AddressSpaceComponents::default_multi_value_usage() },
"enumeratedName",
"ready");
}
void triggerMultiValueLimit() {
- merge({ search::AddressSpaceUsage::defaultEnumStoreUsage(),
- multiValueOverLoad },
+ merge({ search::AddressSpaceComponents::default_enum_store_usage(),
+ multiValueOverLoad },
"multiValueName",
"ready");
}
diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_usage_stats.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attribute_usage_stats.cpp
index f3da5486d3e..e7d6713441d 100644
--- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_usage_stats.cpp
+++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_usage_stats.cpp
@@ -1,13 +1,14 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "attribute_usage_stats.h"
+#include <vespa/searchlib/attribute/address_space_components.h>
#include <iostream>
namespace proton {
AttributeUsageStats::AttributeUsageStats()
- : _enumStoreUsage(search::AddressSpaceUsage::defaultEnumStoreUsage()),
- _multiValueUsage(search::AddressSpaceUsage::defaultMultiValueUsage())
+ : _enumStoreUsage(search::AddressSpaceComponents::default_enum_store_usage()),
+ _multiValueUsage(search::AddressSpaceComponents::default_multi_value_usage())
{
}
@@ -16,8 +17,8 @@ AttributeUsageStats::merge(const search::AddressSpaceUsage &usage,
const vespalib::string &attributeName,
const vespalib::string &subDbName)
{
- _enumStoreUsage.merge(usage.enumStoreUsage(), attributeName, subDbName);
- _multiValueUsage.merge(usage.multiValueUsage(), attributeName, subDbName);
+ _enumStoreUsage.merge(usage.enum_store_usage(), attributeName, subDbName);
+ _multiValueUsage.merge(usage.multi_value_usage(), attributeName, subDbName);
}
std::ostream&
diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_vector_explorer.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attribute_vector_explorer.cpp
index 2ffe3f2c901..ddf240ad90c 100644
--- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_vector_explorer.cpp
+++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_vector_explorer.cpp
@@ -63,8 +63,8 @@ convertAddressSpaceToSlime(const AddressSpace &addressSpace, Cursor &object)
void
convertAddressSpaceUsageToSlime(const AddressSpaceUsage &usage, Cursor &object)
{
- convertAddressSpaceToSlime(usage.enumStoreUsage(), object.setObject("enumStore"));
- convertAddressSpaceToSlime(usage.multiValueUsage(), object.setObject("multiValue"));
+ convertAddressSpaceToSlime(usage.enum_store_usage(), object.setObject("enumStore"));
+ convertAddressSpaceToSlime(usage.multi_value_usage(), object.setObject("multiValue"));
}
void
diff --git a/searchlib/src/tests/attribute/attribute_test.cpp b/searchlib/src/tests/attribute/attribute_test.cpp
index 79e120d0683..0a4a562c5fb 100644
--- a/searchlib/src/tests/attribute/attribute_test.cpp
+++ b/searchlib/src/tests/attribute/attribute_test.cpp
@@ -6,22 +6,23 @@
#include <vespa/document/update/assignvalueupdate.h>
#include <vespa/document/update/mapvalueupdate.h>
#include <vespa/fastlib/io/bufferedfile.h>
+#include <vespa/searchlib/attribute/address_space_components.h>
#include <vespa/searchlib/attribute/attribute.h>
#include <vespa/searchlib/attribute/attributefactory.h>
#include <vespa/searchlib/attribute/attributeguard.h>
#include <vespa/searchlib/attribute/attributememorysavetarget.h>
#include <vespa/searchlib/attribute/attributevector.hpp>
#include <vespa/searchlib/attribute/attrvector.h>
+#include <vespa/searchlib/attribute/multienumattribute.hpp>
#include <vespa/searchlib/attribute/multinumericattribute.h>
#include <vespa/searchlib/attribute/multistringattribute.h>
+#include <vespa/searchlib/attribute/multivalueattribute.hpp>
#include <vespa/searchlib/attribute/predicate_attribute.h>
#include <vespa/searchlib/attribute/singlenumericpostattribute.h>
#include <vespa/searchlib/attribute/singlestringattribute.h>
-#include <vespa/searchlib/attribute/multivalueattribute.hpp>
-#include <vespa/searchlib/attribute/multienumattribute.hpp>
#include <vespa/searchlib/index/dummyfileheadercontext.h>
-#include <vespa/searchlib/util/randomgenerator.h>
#include <vespa/searchlib/test/weighted_type_test_utils.h>
+#include <vespa/searchlib/util/randomgenerator.h>
#include <vespa/vespalib/io/fileutil.h>
#include <vespa/vespalib/testkit/testapp.h>
#include <cmath>
@@ -2105,30 +2106,30 @@ AttributeTest::requireThatAddressSpaceUsageIsReported(const Config &config, bool
AddressSpaceUsage after = attrPtr->getAddressSpaceUsage();
if (attrPtr->hasEnum()) {
LOG(info, "requireThatAddressSpaceUsageIsReported(%s): Has enum", attrName.c_str());
- EXPECT_EQUAL(before.enumStoreUsage().used(), 1u);
- EXPECT_EQUAL(before.enumStoreUsage().dead(), 1u);
- EXPECT_GREATER(after.enumStoreUsage().used(), before.enumStoreUsage().used());
- EXPECT_GREATER_EQUAL(after.enumStoreUsage().limit(), before.enumStoreUsage().limit());
- EXPECT_GREATER(after.enumStoreUsage().limit(), 4200000000u);
+ EXPECT_EQUAL(before.enum_store_usage().used(), 1u);
+ EXPECT_EQUAL(before.enum_store_usage().dead(), 1u);
+ EXPECT_GREATER(after.enum_store_usage().used(), before.enum_store_usage().used());
+ EXPECT_GREATER_EQUAL(after.enum_store_usage().limit(), before.enum_store_usage().limit());
+ EXPECT_GREATER(after.enum_store_usage().limit(), 4200000000u);
} else {
LOG(info, "requireThatAddressSpaceUsageIsReported(%s): NOT enum", attrName.c_str());
- EXPECT_EQUAL(before.enumStoreUsage().used(), 0u);
- EXPECT_EQUAL(before.enumStoreUsage().dead(), 0u);
- EXPECT_EQUAL(after.enumStoreUsage(), before.enumStoreUsage());
- EXPECT_EQUAL(AddressSpaceUsage::defaultEnumStoreUsage(), after.enumStoreUsage());
+ EXPECT_EQUAL(before.enum_store_usage().used(), 0u);
+ EXPECT_EQUAL(before.enum_store_usage().dead(), 0u);
+ EXPECT_EQUAL(after.enum_store_usage(), before.enum_store_usage());
+ EXPECT_EQUAL(AddressSpaceComponents::default_enum_store_usage(), after.enum_store_usage());
}
if (attrPtr->hasMultiValue()) {
LOG(info, "requireThatAddressSpaceUsageIsReported(%s): Has multi-value", attrName.c_str());
- EXPECT_EQUAL(before.multiValueUsage().used(), 1u);
- EXPECT_EQUAL(before.multiValueUsage().dead(), 1u);
- EXPECT_GREATER_EQUAL(after.multiValueUsage().used(), before.multiValueUsage().used());
- EXPECT_GREATER(after.multiValueUsage().limit(), before.multiValueUsage().limit());
- EXPECT_GREATER((1ull << 32), after.multiValueUsage().limit());
+ EXPECT_EQUAL(before.multi_value_usage().used(), 1u);
+ EXPECT_EQUAL(before.multi_value_usage().dead(), 1u);
+ EXPECT_GREATER_EQUAL(after.multi_value_usage().used(), before.multi_value_usage().used());
+ EXPECT_GREATER(after.multi_value_usage().limit(), before.multi_value_usage().limit());
+ EXPECT_GREATER((1ull << 32), after.multi_value_usage().limit());
} else {
LOG(info, "requireThatAddressSpaceUsageIsReported(%s): NOT multi-value", attrName.c_str());
- EXPECT_EQUAL(before.multiValueUsage().used(), 0u);
- EXPECT_EQUAL(after.multiValueUsage(), before.multiValueUsage());
- EXPECT_EQUAL(AddressSpaceUsage::defaultMultiValueUsage(), after.multiValueUsage());
+ EXPECT_EQUAL(before.multi_value_usage().used(), 0u);
+ EXPECT_EQUAL(after.multi_value_usage(), before.multi_value_usage());
+ EXPECT_EQUAL(AddressSpaceComponents::default_multi_value_usage(), after.multi_value_usage());
}
}
diff --git a/searchlib/src/tests/attribute/compaction/attribute_compaction_test.cpp b/searchlib/src/tests/attribute/compaction/attribute_compaction_test.cpp
index a029373821a..be3013c051e 100644
--- a/searchlib/src/tests/attribute/compaction/attribute_compaction_test.cpp
+++ b/searchlib/src/tests/attribute/compaction/attribute_compaction_test.cpp
@@ -154,7 +154,7 @@ public:
return status;
}
const Config &getConfig() const { return _v->getConfig(); }
- AddressSpace getMultiValueAddressSpaceUsage() const {return _v->getAddressSpaceUsage().multiValueUsage(); }
+ AddressSpace getMultiValueAddressSpaceUsage() const {return _v->getAddressSpaceUsage().multi_value_usage(); }
AddressSpace getMultiValueAddressSpaceUsage(const vespalib::string &prefix) {
AddressSpace usage(getMultiValueAddressSpaceUsage());
LOG(info, "address space usage %s: used=%zu, dead=%zu, limit=%zu, usage=%12.8f",
diff --git a/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt b/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt
index bf56b476cc9..e7267e4f6a4 100644
--- a/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt
+++ b/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt
@@ -1,6 +1,7 @@
# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
vespa_add_library(searchlib_attribute OBJECT
SOURCES
+ address_space_components.cpp
address_space_usage.cpp
attribute.cpp
attribute_blueprint_factory.cpp
diff --git a/searchlib/src/vespa/searchlib/attribute/address_space_components.cpp b/searchlib/src/vespa/searchlib/attribute/address_space_components.cpp
new file mode 100644
index 00000000000..74075367da9
--- /dev/null
+++ b/searchlib/src/vespa/searchlib/attribute/address_space_components.cpp
@@ -0,0 +1,21 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "address_space_components.h"
+#include "i_enum_store.h"
+
+namespace search {
+
+using vespalib::AddressSpace;
+
+AddressSpace AddressSpaceComponents::default_enum_store_usage() {
+ return AddressSpace(0, 0, IEnumStore::InternalIndex::offsetSize());
+}
+
+AddressSpace AddressSpaceComponents::default_multi_value_usage() {
+ return AddressSpace(0, 0, (1ull << 32));
+}
+
+const vespalib::string AddressSpaceComponents::enum_store = "enum-store";
+const vespalib::string AddressSpaceComponents::multi_value = "multi-value";
+
+}
diff --git a/searchlib/src/vespa/searchlib/attribute/address_space_components.h b/searchlib/src/vespa/searchlib/attribute/address_space_components.h
new file mode 100644
index 00000000000..d52fe67abbd
--- /dev/null
+++ b/searchlib/src/vespa/searchlib/attribute/address_space_components.h
@@ -0,0 +1,21 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include <vespa/vespalib/stllike/string.h>
+#include <vespa/vespalib/util/address_space.h>
+
+namespace search {
+
+/**
+ * A set of components in an attribute vector that use address space.
+ */
+class AddressSpaceComponents {
+public:
+ static vespalib::AddressSpace default_enum_store_usage();
+ static vespalib::AddressSpace default_multi_value_usage();
+ static const vespalib::string enum_store;
+ static const vespalib::string multi_value;
+};
+
+}
diff --git a/searchlib/src/vespa/searchlib/attribute/address_space_usage.cpp b/searchlib/src/vespa/searchlib/attribute/address_space_usage.cpp
index 692adaf3817..da2e376719c 100644
--- a/searchlib/src/vespa/searchlib/attribute/address_space_usage.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/address_space_usage.cpp
@@ -1,33 +1,52 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#include "address_space_components.h"
#include "address_space_usage.h"
-#include "i_enum_store.h"
namespace search {
using vespalib::AddressSpace;
AddressSpaceUsage::AddressSpaceUsage()
- : _enumStoreUsage(defaultEnumStoreUsage()),
- _multiValueUsage(defaultMultiValueUsage()) {
+ : _map()
+{
+}
+
+AddressSpaceUsage::AddressSpaceUsage(const AddressSpace& enum_store_usage,
+ const AddressSpace& multi_value_usage)
+ : _map()
+{
+ // TODO: Remove this constructor and instead add usage for each relevant component explicit.
+ set(AddressSpaceComponents::enum_store, enum_store_usage);
+ set(AddressSpaceComponents::multi_value, multi_value_usage);
+}
+
+void
+AddressSpaceUsage::set(const vespalib::string& component, const vespalib::AddressSpace& usage)
+{
+ _map[component] = usage;
}
-AddressSpaceUsage::AddressSpaceUsage(const AddressSpace &enumStoreUsage_,
- const AddressSpace &multiValueUsage_)
- : _enumStoreUsage(enumStoreUsage_),
- _multiValueUsage(multiValueUsage_) {
+AddressSpace
+AddressSpaceUsage::get(const vespalib::string& component) const
+{
+ auto itr = _map.find(component);
+ if (itr != _map.end()) {
+ return itr->second;
+ }
+ return AddressSpace();
}
AddressSpace
-AddressSpaceUsage::defaultEnumStoreUsage()
+AddressSpaceUsage::enum_store_usage() const
{
- return AddressSpace(0, 0, IEnumStore::InternalIndex::offsetSize());
+ return get(AddressSpaceComponents::enum_store);
}
AddressSpace
-AddressSpaceUsage::defaultMultiValueUsage()
+AddressSpaceUsage::multi_value_usage() const
{
- return AddressSpace(0, 0, (1ull << 32));
+ return get(AddressSpaceComponents::multi_value);
}
-} // namespace search
+}
diff --git a/searchlib/src/vespa/searchlib/attribute/address_space_usage.h b/searchlib/src/vespa/searchlib/attribute/address_space_usage.h
index 3e6ad1d3f8e..8698fa6d9ef 100644
--- a/searchlib/src/vespa/searchlib/attribute/address_space_usage.h
+++ b/searchlib/src/vespa/searchlib/attribute/address_space_usage.h
@@ -2,28 +2,30 @@
#pragma once
+#include <vespa/vespalib/stllike/hash_fun.h>
+#include <vespa/vespalib/stllike/string.h>
#include <vespa/vespalib/util/address_space.h>
+#include <unordered_map>
namespace search {
/**
- * Represents the address space usage for enum store and multi value mapping.
+ * Represents the address space usage for a set of attribute vector components.
*/
class AddressSpaceUsage
{
private:
- vespalib::AddressSpace _enumStoreUsage;
- vespalib::AddressSpace _multiValueUsage;
+ using AddressSpaceMap = std::unordered_map<vespalib::string, vespalib::AddressSpace, vespalib::hash<vespalib::string>>;
+ AddressSpaceMap _map;
public:
AddressSpaceUsage();
- AddressSpaceUsage(const vespalib::AddressSpace &enumStoreUsage_,
- const vespalib::AddressSpace &multiValueUsage_);
- static vespalib::AddressSpace defaultEnumStoreUsage();
- static vespalib::AddressSpace defaultMultiValueUsage();
- const vespalib::AddressSpace &enumStoreUsage() const { return _enumStoreUsage; }
- const vespalib::AddressSpace &multiValueUsage() const { return _multiValueUsage; }
-
+ AddressSpaceUsage(const vespalib::AddressSpace& enum_store_usage,
+ const vespalib::AddressSpace& multi_value_usage);
+ void set(const vespalib::string& component, const vespalib::AddressSpace& usage);
+ vespalib::AddressSpace get(const vespalib::string& component) const;
+ vespalib::AddressSpace enum_store_usage() const;
+ vespalib::AddressSpace multi_value_usage() const;
};
-} // namespace search
+}
diff --git a/searchlib/src/vespa/searchlib/attribute/attributevector.cpp b/searchlib/src/vespa/searchlib/attribute/attributevector.cpp
index 08ddc01c15b..79baa10a381 100644
--- a/searchlib/src/vespa/searchlib/attribute/attributevector.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/attributevector.cpp
@@ -1,10 +1,11 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include "attributevector.h"
+#include "address_space_components.h"
#include "attribute_read_guard.h"
#include "attributefilesavetarget.h"
#include "attributeiterators.hpp"
#include "attributesaver.h"
+#include "attributevector.h"
#include "attributevector.hpp"
#include "floatbase.h"
#include "interlock.h"
@@ -14,14 +15,14 @@
#include <vespa/document/update/assignvalueupdate.h>
#include <vespa/document/update/mapvalueupdate.h>
#include <vespa/fastlib/io/bufferedfile.h>
+#include <vespa/searchcommon/attribute/attribute_utils.h>
#include <vespa/searchlib/common/tunefileinfo.h>
#include <vespa/searchlib/index/dummyfileheadercontext.h>
#include <vespa/searchlib/query/query_term_decoder.h>
#include <vespa/searchlib/queryeval/emptysearch.h>
+#include <vespa/searchlib/util/logutil.h>
#include <vespa/vespalib/util/exceptions.h>
#include <vespa/vespalib/util/size_literals.h>
-#include <vespa/searchlib/util/logutil.h>
-#include <vespa/searchcommon/attribute/attribute_utils.h>
#include <thread>
#include <vespa/log/log.h>
@@ -222,22 +223,20 @@ AttributeVector::getEnumStoreValuesMemoryUsage() const
return vespalib::MemoryUsage();
}
-vespalib::AddressSpace
-AttributeVector::getEnumStoreAddressSpaceUsage() const
-{
- return AddressSpaceUsage::defaultEnumStoreUsage();
-}
-
-vespalib::AddressSpace
-AttributeVector::getMultiValueAddressSpaceUsage() const
+void
+AttributeVector::populate_address_space_usage(AddressSpaceUsage& usage) const
{
- return AddressSpaceUsage::defaultMultiValueUsage();
+ // TODO: Stop inserting defaults here when code using AddressSpaceUsage no longer require these two components.
+ usage.set(AddressSpaceComponents::enum_store, AddressSpaceComponents::default_enum_store_usage());
+ usage.set(AddressSpaceComponents::multi_value, AddressSpaceComponents::default_multi_value_usage());
}
AddressSpaceUsage
AttributeVector::getAddressSpaceUsage() const
{
- return AddressSpaceUsage(getEnumStoreAddressSpaceUsage(), getMultiValueAddressSpaceUsage());
+ AddressSpaceUsage usage;
+ populate_address_space_usage(usage);
+ return usage;
}
bool
diff --git a/searchlib/src/vespa/searchlib/attribute/attributevector.h b/searchlib/src/vespa/searchlib/attribute/attributevector.h
index a4294df8cb7..3c27f00a022 100644
--- a/searchlib/src/vespa/searchlib/attribute/attributevector.h
+++ b/searchlib/src/vespa/searchlib/attribute/attributevector.h
@@ -381,8 +381,7 @@ protected:
}
virtual vespalib::MemoryUsage getEnumStoreValuesMemoryUsage() const;
- virtual vespalib::AddressSpace getEnumStoreAddressSpaceUsage() const;
- virtual vespalib::AddressSpace getMultiValueAddressSpaceUsage() const;
+ virtual void populate_address_space_usage(AddressSpaceUsage& usage) const;
public:
DECLARE_IDENTIFIABLE_ABSTRACT(AttributeVector);
diff --git a/searchlib/src/vespa/searchlib/attribute/enumattribute.h b/searchlib/src/vespa/searchlib/attribute/enumattribute.h
index 443433757b3..cee091b1ac8 100644
--- a/searchlib/src/vespa/searchlib/attribute/enumattribute.h
+++ b/searchlib/src/vespa/searchlib/attribute/enumattribute.h
@@ -64,7 +64,7 @@ protected:
void insertNewUniqueValues(EnumStoreBatchUpdater& updater);
virtual void considerAttributeChange(const Change & c, EnumStoreBatchUpdater & inserter) = 0;
vespalib::MemoryUsage getEnumStoreValuesMemoryUsage() const override;
- vespalib::AddressSpace getEnumStoreAddressSpaceUsage() const override;
+ void populate_address_space_usage(AddressSpaceUsage& usage) const override;
public:
EnumAttribute(const vespalib::string & baseFileName, const AttributeVector::Config & cfg);
~EnumAttribute();
diff --git a/searchlib/src/vespa/searchlib/attribute/enumattribute.hpp b/searchlib/src/vespa/searchlib/attribute/enumattribute.hpp
index 164bb411061..643741b7eca 100644
--- a/searchlib/src/vespa/searchlib/attribute/enumattribute.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/enumattribute.hpp
@@ -2,6 +2,7 @@
#pragma once
+#include "address_space_components.h"
#include <vespa/vespalib/util/hdr_abort.h>
#include <vespa/searchlib/attribute/enumattribute.h>
#include <vespa/searchlib/attribute/enumstore.hpp>
@@ -76,10 +77,11 @@ EnumAttribute<B>::getEnumStoreValuesMemoryUsage() const
}
template <typename B>
-vespalib::AddressSpace
-EnumAttribute<B>::getEnumStoreAddressSpaceUsage() const
+void
+EnumAttribute<B>::populate_address_space_usage(AddressSpaceUsage& usage) const
{
- return _enumStore.get_address_space_usage();
+ B::populate_address_space_usage(usage);
+ usage.set(AddressSpaceComponents::enum_store, _enumStore.get_address_space_usage());
}
} // namespace search
diff --git a/searchlib/src/vespa/searchlib/attribute/multivalueattribute.h b/searchlib/src/vespa/searchlib/attribute/multivalueattribute.h
index d36777a25a9..8e6e4914012 100644
--- a/searchlib/src/vespa/searchlib/attribute/multivalueattribute.h
+++ b/searchlib/src/vespa/searchlib/attribute/multivalueattribute.h
@@ -48,7 +48,7 @@ protected:
**/
bool onAddDoc(DocId doc) override { (void) doc; return false; }
- vespalib::AddressSpace getMultiValueAddressSpaceUsage() const override;
+ void populate_address_space_usage(AddressSpaceUsage& usage) const override;
public:
MultiValueAttribute(const vespalib::string & baseFileName, const AttributeVector::Config & cfg);
diff --git a/searchlib/src/vespa/searchlib/attribute/multivalueattribute.hpp b/searchlib/src/vespa/searchlib/attribute/multivalueattribute.hpp
index 2e73909ea1e..190f73182f3 100644
--- a/searchlib/src/vespa/searchlib/attribute/multivalueattribute.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/multivalueattribute.hpp
@@ -2,6 +2,7 @@
#pragma once
+#include "address_space_components.h"
#include <vespa/searchlib/attribute/multivalueattribute.h>
#include <vespa/vespalib/stllike/hash_map.h>
#include <vespa/vespalib/stllike/hash_map.hpp>
@@ -200,13 +201,13 @@ MultiValueAttribute<B, M>::apply_attribute_changes_to_wset(DocumentValues& docVa
}
template <typename B, typename M>
-vespalib::AddressSpace
-MultiValueAttribute<B, M>::getMultiValueAddressSpaceUsage() const
+void
+MultiValueAttribute<B, M>::populate_address_space_usage(AddressSpaceUsage& usage) const
{
- return _mvMapping.getAddressSpaceUsage();
+ B::populate_address_space_usage(usage);
+ usage.set(AddressSpaceComponents::multi_value, _mvMapping.getAddressSpaceUsage());
}
-
template <typename B, typename M>
bool
MultiValueAttribute<B, M>::addDoc(DocId & doc)
diff --git a/vespalib/src/vespa/vespalib/util/address_space.cpp b/vespalib/src/vespa/vespalib/util/address_space.cpp
index 113e4ba1478..1f6874e3e2a 100644
--- a/vespalib/src/vespa/vespalib/util/address_space.cpp
+++ b/vespalib/src/vespa/vespalib/util/address_space.cpp
@@ -6,6 +6,13 @@
namespace vespalib {
+AddressSpace::AddressSpace()
+ : _used(0),
+ _dead(0),
+ _limit(0)
+{
+}
+
AddressSpace::AddressSpace(size_t used_, size_t dead_, size_t limit_)
: _used(used_),
_dead(dead_),
diff --git a/vespalib/src/vespa/vespalib/util/address_space.h b/vespalib/src/vespa/vespalib/util/address_space.h
index 98ffdac9599..8eb3ba811f9 100644
--- a/vespalib/src/vespa/vespalib/util/address_space.h
+++ b/vespalib/src/vespa/vespalib/util/address_space.h
@@ -18,6 +18,7 @@ private:
size_t _limit;
public:
+ AddressSpace();
AddressSpace(size_t used_, size_t dead_, size_t limit_);
size_t used() const { return _used; }
size_t dead() const { return _dead; }