summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2021-08-20 10:41:12 +0000
committerGeir Storli <geirst@verizonmedia.com>2021-08-20 11:03:59 +0000
commit3cf0428b6865f0efc68e39d4137279ee404b88e0 (patch)
tree1313fd5d37762feefdd638ed7ac5efe420fc76dd
parenteadf49cb8c1feff72098a5f2b6a44bfe82702812 (diff)
Report max address space used in attribute vector components from content nodes (proton) to the cluster controller.
This is more generic than explicit address space values for enum store and multi value. This is used in the cluster controller to determine whether to block external feed.
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/ResourceLimits.java3
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/content/ContentSearchClusterTest.java2
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/content/FleetControllerClusterTest.java5
-rw-r--r--persistence/src/vespa/persistence/spi/attribute_resource_usage.h2
-rw-r--r--persistence/src/vespa/persistence/spi/resource_usage.cpp3
-rw-r--r--persistence/src/vespa/persistence/spi/resource_usage.h17
-rw-r--r--searchcore/src/tests/proton/persistenceengine/resource_usage_tracker/resource_usage_tracker_test.cpp50
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.cpp33
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.h3
-rw-r--r--storage/src/tests/persistence/filestorage/service_layer_host_info_reporter_test.cpp44
-rw-r--r--storage/src/vespa/storage/persistence/filestorage/service_layer_host_info_reporter.cpp21
11 files changed, 74 insertions, 109 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/ResourceLimits.java b/config-model/src/main/java/com/yahoo/vespa/model/content/ResourceLimits.java
index a12e183b409..cd9a0c89bf8 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/content/ResourceLimits.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/ResourceLimits.java
@@ -37,8 +37,7 @@ public class ResourceLimits implements FleetcontrollerConfig.Producer, ProtonCon
// storage/src/vespa/storage/persistence/filestorage/service_layer_host_info_reporter.cpp
builder.cluster_feed_block_limit.put("memory", memoryLimit.orElse(0.8));
builder.cluster_feed_block_limit.put("disk", diskLimit.orElse(0.8));
- builder.cluster_feed_block_limit.put("attribute-enum-store", 0.89);
- builder.cluster_feed_block_limit.put("attribute-multi-value", 0.89);
+ builder.cluster_feed_block_limit.put("attribute-address-space", 0.89);
}
@Override
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/ContentSearchClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/ContentSearchClusterTest.java
index 46bd005deb6..b9a98dab432 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/content/ContentSearchClusterTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/content/ContentSearchClusterTest.java
@@ -99,7 +99,7 @@ public class ContentSearchClusterTest {
private static void assertClusterControllerResourceLimits(double expDiskLimit, double expMemoryLimit, ContentCluster cluster) {
var limits = getFleetcontrollerConfig(cluster).cluster_feed_block_limit();
- assertEquals(4, limits.size());
+ assertEquals(3, limits.size());
assertEquals(expDiskLimit, limits.get("disk"), EPSILON);
assertEquals(expMemoryLimit, limits.get("memory"), EPSILON);
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/FleetControllerClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/FleetControllerClusterTest.java
index d17f2d36b9c..cc1b96dc588 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/content/FleetControllerClusterTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/content/FleetControllerClusterTest.java
@@ -124,11 +124,10 @@ public class FleetControllerClusterTest {
private void assertLimits(double expDisk, double expMemory, FleetcontrollerConfig config) {
var limits = config.cluster_feed_block_limit();
- assertEquals(4, limits.size());
+ assertEquals(3, limits.size());
assertEquals(expDisk, limits.get("disk"), DELTA);
assertEquals(expMemory, limits.get("memory"), DELTA);
- assertEquals(0.89, limits.get("attribute-enum-store"), DELTA);
- assertEquals(0.89, limits.get("attribute-multi-value"), DELTA);
+ assertEquals(0.89, limits.get("attribute-address-space"), DELTA);
}
private FleetcontrollerConfig getConfigForResourceLimitsTuning(Double diskLimit, Double memoryLimit) {
diff --git a/persistence/src/vespa/persistence/spi/attribute_resource_usage.h b/persistence/src/vespa/persistence/spi/attribute_resource_usage.h
index 02e0c248e3d..5cd8c93890f 100644
--- a/persistence/src/vespa/persistence/spi/attribute_resource_usage.h
+++ b/persistence/src/vespa/persistence/spi/attribute_resource_usage.h
@@ -13,7 +13,7 @@ namespace storage::spi {
class AttributeResourceUsage
{
double _usage;
- vespalib::string _name; // document_type.subdb.attribute
+ vespalib::string _name; // document_type.subdb.attribute.component
public:
AttributeResourceUsage(double usage, const vespalib::string& name)
diff --git a/persistence/src/vespa/persistence/spi/resource_usage.cpp b/persistence/src/vespa/persistence/spi/resource_usage.cpp
index 517a45a3d41..3dfc026c714 100644
--- a/persistence/src/vespa/persistence/spi/resource_usage.cpp
+++ b/persistence/src/vespa/persistence/spi/resource_usage.cpp
@@ -21,8 +21,7 @@ std::ostream& operator<<(std::ostream& out, const ResourceUsage& resource_usage)
{
out << "{disk_usage=" << resource_usage.get_disk_usage() <<
", memory_usage=" << resource_usage.get_memory_usage() <<
- ", attribute_enum_store_usage=" << resource_usage.get_attribute_enum_store_usage() <<
- ", attribute_multivalue_usage=" << resource_usage.get_attribute_multivalue_usage() << "}";
+ ", attribute_address_space_usage=" << resource_usage.get_attribute_address_space_usage() << "}";
return out;
}
diff --git a/persistence/src/vespa/persistence/spi/resource_usage.h b/persistence/src/vespa/persistence/spi/resource_usage.h
index 921da8bbf06..82ff889c03e 100644
--- a/persistence/src/vespa/persistence/spi/resource_usage.h
+++ b/persistence/src/vespa/persistence/spi/resource_usage.h
@@ -14,21 +14,20 @@ class ResourceUsage
{
double _disk_usage;
double _memory_usage;
- AttributeResourceUsage _attribute_enum_store_usage;
- AttributeResourceUsage _attribute_multivalue_usage;
+ AttributeResourceUsage _attribute_address_space_usage;
public:
- ResourceUsage(double disk_usage, double memory_usage, const AttributeResourceUsage &attribute_enum_store_usage, const AttributeResourceUsage &attribute_multivalue_usage)
+ ResourceUsage(double disk_usage, double memory_usage,
+ const AttributeResourceUsage &attribute_address_space_usage)
: _disk_usage(disk_usage),
_memory_usage(memory_usage),
- _attribute_enum_store_usage(attribute_enum_store_usage),
- _attribute_multivalue_usage(attribute_multivalue_usage)
+ _attribute_address_space_usage(attribute_address_space_usage)
{
}
ResourceUsage(double disk_usage, double memory_usage)
- : ResourceUsage(disk_usage, memory_usage, AttributeResourceUsage(), AttributeResourceUsage())
+ : ResourceUsage(disk_usage, memory_usage, AttributeResourceUsage())
{
}
@@ -49,14 +48,12 @@ public:
double get_disk_usage() const noexcept { return _disk_usage; }
double get_memory_usage() const noexcept { return _memory_usage; }
- const AttributeResourceUsage& get_attribute_enum_store_usage() const noexcept { return _attribute_enum_store_usage; }
- const AttributeResourceUsage& get_attribute_multivalue_usage() const noexcept { return _attribute_multivalue_usage; }
+ const AttributeResourceUsage& get_attribute_address_space_usage() const noexcept { return _attribute_address_space_usage; }
bool operator==(const ResourceUsage &rhs) const noexcept {
return ((_disk_usage == rhs._disk_usage) &&
(_memory_usage == rhs._memory_usage) &&
- (_attribute_enum_store_usage == rhs._attribute_enum_store_usage) &&
- (_attribute_multivalue_usage == rhs._attribute_multivalue_usage));
+ (_attribute_address_space_usage == rhs._attribute_address_space_usage));
}
bool operator!=(const ResourceUsage &rhs) const noexcept {
return !operator==(rhs);
diff --git a/searchcore/src/tests/proton/persistenceengine/resource_usage_tracker/resource_usage_tracker_test.cpp b/searchcore/src/tests/proton/persistenceengine/resource_usage_tracker/resource_usage_tracker_test.cpp
index 4144b87c61d..7e1cf89ccdf 100644
--- a/searchcore/src/tests/proton/persistenceengine/resource_usage_tracker/resource_usage_tracker_test.cpp
+++ b/searchcore/src/tests/proton/persistenceengine/resource_usage_tracker/resource_usage_tracker_test.cpp
@@ -1,11 +1,12 @@
// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/persistence/spi/resource_usage_listener.h>
#include <vespa/persistence/spi/resource_usage.h>
+#include <vespa/persistence/spi/resource_usage_listener.h>
#include <vespa/searchcore/proton/attribute/attribute_usage_stats.h>
#include <vespa/searchcore/proton/attribute/i_attribute_usage_listener.h>
#include <vespa/searchcore/proton/persistenceengine/resource_usage_tracker.h>
#include <vespa/searchcore/proton/test/disk_mem_usage_notifier.h>
+#include <vespa/searchlib/attribute/address_space_components.h>
#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/util/idestructorcallback.h>
#include <atomic>
@@ -131,7 +132,7 @@ struct AttributeUsageStatsBuilder
~AttributeUsageStatsBuilder();
AttributeUsageStatsBuilder& reset() { stats = AttributeUsageStats(); return *this; }
- AttributeUsageStatsBuilder& merge(const NamedAttribute& named_attribute, size_t used_enum_store, size_t used_multivalue);
+ AttributeUsageStatsBuilder& merge(const NamedAttribute& named_attribute, size_t used_address_space);
AttributeUsageStats build() { return stats; }
@@ -140,11 +141,11 @@ struct AttributeUsageStatsBuilder
AttributeUsageStatsBuilder::~AttributeUsageStatsBuilder() = default;
AttributeUsageStatsBuilder&
-AttributeUsageStatsBuilder::merge(const NamedAttribute& named_attribute, size_t used_enum_store, size_t used_multivalue)
+AttributeUsageStatsBuilder::merge(const NamedAttribute& named_attribute, size_t used_address_space)
{
- vespalib::AddressSpace enum_store_usage(used_enum_store, 0, usage_limit);
- vespalib::AddressSpace multivalue_usage(used_multivalue, 0, usage_limit);
- search::AddressSpaceUsage as_usage(enum_store_usage, multivalue_usage);
+ vespalib::AddressSpace address_space_usage(used_address_space, 0, usage_limit);
+ search::AddressSpaceUsage as_usage;
+ as_usage.set("comp", address_space_usage);
stats.merge(as_usage, named_attribute.attribute, named_attribute.subdb);
return *this;
}
@@ -153,11 +154,10 @@ double rel_usage(size_t usage) noexcept {
return (double) usage / (double) usage_limit;
}
-ResourceUsage make_resource_usage(const vespalib::string& enum_store_name, size_t used_enum_store, const vespalib::string &multivalue_name, size_t used_multivalue)
+ResourceUsage make_resource_usage(const vespalib::string& attr_name, size_t used_address_space)
{
- AttributeResourceUsage enum_store_usage(rel_usage(used_enum_store), enum_store_name);
- AttributeResourceUsage multivalue_usage(rel_usage(used_multivalue), multivalue_name);
- return ResourceUsage(0.0, 0.0, enum_store_usage, multivalue_usage);
+ AttributeResourceUsage address_space_usage(rel_usage(used_address_space), attr_name);
+ return ResourceUsage(0.0, 0.0, address_space_usage);
}
}
@@ -170,24 +170,24 @@ TEST_F(ResourceUsageTrackerTest, aggregates_attribute_usage)
auto aul2 = _tracker->make_attribute_usage_listener("doctype2");
AttributeUsageStatsBuilder b1;
AttributeUsageStatsBuilder b2;
- b1.merge(ready_a1, 10, 20).merge(ready_a2, 5, 30);
- b2.merge(ready_a1, 15, 15);
+ b1.merge(ready_a1, 10).merge(ready_a2, 5);
+ b2.merge(ready_a1, 15);
aul1->notify_attribute_usage(b1.build());
aul2->notify_attribute_usage(b2.build());
- EXPECT_EQ(make_resource_usage("doctype2.0.ready.a1", 15, "doctype1.0.ready.a2", 30), get_usage());
- b1.merge(notready_a1, 5, 31);
+ EXPECT_EQ(make_resource_usage("doctype2.0.ready.a1.comp", 15), get_usage());
+ b1.merge(notready_a1, 16);
aul1->notify_attribute_usage(b1.build());
- EXPECT_EQ(make_resource_usage("doctype2.0.ready.a1", 15, "doctype1.2.notready.a1", 31), get_usage());
- b1.reset().merge(ready_a1, 10, 20).merge(ready_a2, 5, 30);
+ EXPECT_EQ(make_resource_usage("doctype1.2.notready.a1.comp", 16), get_usage());
+ b1.reset().merge(ready_a1, 10).merge(ready_a2, 5);
aul1->notify_attribute_usage(b1.build());
- EXPECT_EQ(make_resource_usage("doctype2.0.ready.a1", 15, "doctype1.0.ready.a2", 30), get_usage());
+ EXPECT_EQ(make_resource_usage("doctype2.0.ready.a1.comp", 15), get_usage());
aul2.reset();
- EXPECT_EQ(make_resource_usage("doctype1.0.ready.a1", 10, "doctype1.0.ready.a2", 30), get_usage());
+ EXPECT_EQ(make_resource_usage("doctype1.0.ready.a1.comp", 10), get_usage());
aul1.reset();
- EXPECT_EQ(make_resource_usage("", 0, "", 0), get_usage());
+ EXPECT_EQ(make_resource_usage("", 0), get_usage());
aul2 = _tracker->make_attribute_usage_listener("doctype2");
aul2->notify_attribute_usage(b2.build());
- EXPECT_EQ(make_resource_usage("doctype2.0.ready.a1", 15, "doctype2.0.ready.a1", 15), get_usage());
+ EXPECT_EQ(make_resource_usage("doctype2.0.ready.a1.comp", 15), get_usage());
}
TEST_F(ResourceUsageTrackerTest, can_skip_scan_when_aggregating_attributes)
@@ -198,16 +198,16 @@ TEST_F(ResourceUsageTrackerTest, can_skip_scan_when_aggregating_attributes)
auto aul2 = _tracker->make_attribute_usage_listener("doctype2");
AttributeUsageStatsBuilder b1;
AttributeUsageStatsBuilder b2;
- b1.merge(ready_a1, 20, 20).merge(ready_a2, 5, 30);
- b2.merge(ready_a1, 15, 15);
+ b1.merge(ready_a1, 20).merge(ready_a2, 5);
+ b2.merge(ready_a1, 15);
aul1->notify_attribute_usage(b1.build());
- EXPECT_EQ(make_resource_usage("doctype1.0.ready.a1", 20, "doctype1.0.ready.a2", 30), get_usage());
+ EXPECT_EQ(make_resource_usage("doctype1.0.ready.a1.comp", 20), get_usage());
EXPECT_EQ(2u, get_update_count());
aul1->notify_attribute_usage(b1.build());
- EXPECT_EQ(make_resource_usage("doctype1.0.ready.a1", 20, "doctype1.0.ready.a2", 30), get_usage());
+ EXPECT_EQ(make_resource_usage("doctype1.0.ready.a1.comp", 20), get_usage());
EXPECT_EQ(2u, get_update_count()); // usage for doctype1 has not changed
aul2->notify_attribute_usage(b2.build());
- EXPECT_EQ(make_resource_usage("doctype1.0.ready.a1", 20, "doctype1.0.ready.a2", 30), get_usage());
+ EXPECT_EQ(make_resource_usage("doctype1.0.ready.a1.comp", 20), get_usage());
EXPECT_EQ(2u, get_update_count()); // usage for doctype2 is less than usage for doctype1
aul2.reset();
aul1.reset();
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.cpp
index 9791b55f7b7..9f1c6e66b5c 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.cpp
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.cpp
@@ -73,8 +73,7 @@ ResourceUsageTracker::ResourceUsageTracker(IDiskMemUsageNotifier& disk_mem_usage
_listener(nullptr),
_disk_mem_usage_notifier(disk_mem_usage_notifier),
_attribute_usage(),
- _attribute_enum_store_max_document_type(),
- _attribute_multivalue_max_document_type()
+ _attribute_address_space_max_document_type()
{
_disk_mem_usage_notifier.addDiskMemUsageListener(this);
}
@@ -88,7 +87,7 @@ void
ResourceUsageTracker::notifyDiskMemUsage(DiskMemUsageState state)
{
std::lock_guard guard(_lock);
- _resource_usage = ResourceUsage(state.diskState().usage(), state.memoryState().usage(), _resource_usage.get_attribute_enum_store_usage(), _resource_usage.get_attribute_multivalue_usage());
+ _resource_usage = ResourceUsage(state.diskState().usage(), state.memoryState().usage(), _resource_usage.get_attribute_address_space_usage());
if (_listener != nullptr) {
_listener->update_resource_usage(_resource_usage);
}
@@ -125,6 +124,7 @@ namespace {
bool same_usage(const AddressSpaceUsageStats &lhs, const AddressSpaceUsageStats &rhs) {
return ((lhs.getUsage().usage() == rhs.getUsage().usage()) &&
+ (lhs.get_component_name() == rhs.get_component_name()) &&
(lhs.getAttributeName() == rhs.getAttributeName()) &&
(lhs.getSubDbName() == rhs.getSubDbName()));
}
@@ -140,18 +140,15 @@ ResourceUsageTracker::notify_attribute_usage(const vespalib::string &document_ty
{
std::lock_guard guard(_lock);
auto& old_usage = _attribute_usage[document_type];
- if (same_usage(old_usage.enumStoreUsage(), attribute_usage.enumStoreUsage()) &&
- same_usage(old_usage.multiValueUsage(), attribute_usage.multiValueUsage())) {
+ if (same_usage(old_usage.max_address_space_usage(), attribute_usage.max_address_space_usage())) {
return; // usage for document type has not changed
}
old_usage = attribute_usage;
- double enum_store_max = attribute_usage.enumStoreUsage().getUsage().usage();
- double multivalue_max = attribute_usage.multiValueUsage().getUsage().usage();
- double old_enum_store_max = _resource_usage.get_attribute_enum_store_usage().get_usage();
- double old_multivalue_max = _resource_usage.get_attribute_multivalue_usage().get_usage();
+ double address_space_max = attribute_usage.max_address_space_usage().getUsage().usage();
+ double old_address_space_max = _resource_usage.get_attribute_address_space_usage().get_usage();
- if (can_skip_scan(enum_store_max, old_enum_store_max, document_type == _attribute_enum_store_max_document_type) &&
- can_skip_scan(multivalue_max, old_multivalue_max, document_type == _attribute_multivalue_max_document_type)) {
+ if (can_skip_scan(address_space_max, old_address_space_max,
+ document_type == _attribute_address_space_max_document_type)) {
return; // usage for document type is less than or equal to usage for other document types
}
if (scan_attribute_usage(false, guard) && _listener != nullptr) {
@@ -168,7 +165,7 @@ class MaxAttributeUsage
double _max_usage;
vespalib::string get_name() const {
- return *_document_type + "." + _max->getSubDbName() + "." + _max->getAttributeName();
+ return *_document_type + "." + _max->getSubDbName() + "." + _max->getAttributeName() + "." + _max->get_component_name();
}
public:
@@ -203,23 +200,19 @@ public:
bool
ResourceUsageTracker::scan_attribute_usage(bool force_changed, std::lock_guard<std::mutex>&)
{
- MaxAttributeUsage enum_store_max;
- MaxAttributeUsage multivalue_max;
+ MaxAttributeUsage address_space_max;
for (const auto& kv : _attribute_usage) {
- enum_store_max.sample(kv.first, kv.second.enumStoreUsage());
- multivalue_max.sample(kv.first, kv.second.multiValueUsage());
+ address_space_max.sample(kv.first, kv.second.max_address_space_usage());
}
ResourceUsage new_resource_usage(_resource_usage.get_disk_usage(),
_resource_usage.get_memory_usage(),
- enum_store_max.get_max_resource_usage(),
- multivalue_max.get_max_resource_usage());
+ address_space_max.get_max_resource_usage());
bool changed = (new_resource_usage != _resource_usage) ||
force_changed;
if (changed) {
_resource_usage = std::move(new_resource_usage);
- _attribute_enum_store_max_document_type = enum_store_max.get_document_type();
- _attribute_multivalue_max_document_type = multivalue_max.get_document_type();
+ _attribute_address_space_max_document_type = address_space_max.get_document_type();
}
return changed;
}
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.h b/searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.h
index 879e60aeeac..40d8598a8da 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.h
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.h
@@ -31,8 +31,7 @@ class ResourceUsageTracker : public std::enable_shared_from_this<ResourceUsageTr
storage::spi::IResourceUsageListener* _listener;
IDiskMemUsageNotifier& _disk_mem_usage_notifier;
vespalib::hash_map<vespalib::string, AttributeUsageStats> _attribute_usage;
- vespalib::string _attribute_enum_store_max_document_type;
- vespalib::string _attribute_multivalue_max_document_type;
+ vespalib::string _attribute_address_space_max_document_type;
void remove_listener();
void remove_document_type(const vespalib::string &document_type);
void notify_attribute_usage(const vespalib::string &document_type, const AttributeUsageStats &attribute_usage);
diff --git a/storage/src/tests/persistence/filestorage/service_layer_host_info_reporter_test.cpp b/storage/src/tests/persistence/filestorage/service_layer_host_info_reporter_test.cpp
index e5ba04f789b..0b984eabea8 100644
--- a/storage/src/tests/persistence/filestorage/service_layer_host_info_reporter_test.cpp
+++ b/storage/src/tests/persistence/filestorage/service_layer_host_info_reporter_test.cpp
@@ -30,8 +30,7 @@ get_attribute_usage_element(const vespalib::Slime& root, const vespalib::string&
return AttributeResourceUsage(usage, name.make_string());
}
-const vespalib::string attr_es_name("doctype.subdb.esattr");
-const vespalib::string attr_mv_name("doctype.subdb.mvattr");
+const vespalib::string attr_name("doctype.subdb.attr.enum-store");
}
@@ -43,12 +42,12 @@ struct ServiceLayerHostInfoReporterTest : ::testing::Test {
ServiceLayerHostInfoReporterTest();
~ServiceLayerHostInfoReporterTest();
- void notify(double disk_usage, double memory_usage, const AttributeResourceUsage &attribute_enum_store_usage, const AttributeResourceUsage &attribute_multivalue_usage) {
+ void notify(double disk_usage, double memory_usage, const AttributeResourceUsage &attribute_address_space_usage) {
auto& listener = static_cast<spi::IResourceUsageListener&>(_reporter);
- listener.update_resource_usage(ResourceUsage(disk_usage, memory_usage, attribute_enum_store_usage, attribute_multivalue_usage));
+ listener.update_resource_usage(ResourceUsage(disk_usage, memory_usage, attribute_address_space_usage));
}
void notify(double disk_usage, double memory_usage) {
- notify(disk_usage, memory_usage, {0.0, ""}, {0.0, ""});
+ notify(disk_usage, memory_usage, {0.0, ""});
}
void set_noise_level(double level) {
_reporter.set_noise_level(level);
@@ -60,7 +59,8 @@ struct ServiceLayerHostInfoReporterTest : ::testing::Test {
ResourceUsage get_slime_usage() {
vespalib::Slime root;
util::reporterToSlime(_reporter, root);
- return ResourceUsage(get_usage_element(root, "disk"), get_usage_element(root, "memory"), get_attribute_usage_element(root, "attribute-enum-store"), get_attribute_usage_element(root, "attribute-multi-value"));
+ return ResourceUsage(get_usage_element(root, "disk"), get_usage_element(root, "memory"),
+ get_attribute_usage_element(root, "attribute-address-space"));
}
};
@@ -97,12 +97,9 @@ TEST_F(ServiceLayerHostInfoReporterTest, request_almost_immediate_node_state_as_
EXPECT_EQ(3, requested_almost_immediate_replies());
EXPECT_EQ(ResourceUsage(0.8, 0.7), get_old_usage());
EXPECT_EQ(ResourceUsage(0.7999, 0.6999), get_usage());
- notify(0.8, 0.7, {0.1, attr_es_name}, {});
- EXPECT_EQ(ResourceUsage(0.8, 0.7, {0.1, attr_es_name}, {}), get_old_usage());
- EXPECT_EQ(ResourceUsage(0.8, 0.7, {0.1, attr_es_name}, {}), get_usage());
- notify(0.8, 0.7, {0.1, attr_es_name}, {0.2, attr_mv_name});
- EXPECT_EQ(ResourceUsage(0.8, 0.7, {0.1, attr_es_name}, {0.2, attr_mv_name}), get_old_usage());
- EXPECT_EQ(ResourceUsage(0.8, 0.7, {0.1, attr_es_name}, {0.2, attr_mv_name}), get_usage());
+ notify(0.8, 0.7, {0.1, attr_name});
+ EXPECT_EQ(ResourceUsage(0.8, 0.7, {0.1, attr_name}), get_old_usage());
+ EXPECT_EQ(ResourceUsage(0.8, 0.7, {0.1, attr_name}), get_usage());
}
TEST_F(ServiceLayerHostInfoReporterTest, can_set_noise_level)
@@ -125,25 +122,14 @@ TEST_F(ServiceLayerHostInfoReporterTest, can_set_noise_level)
}
TEST_F(ServiceLayerHostInfoReporterTest,
- first_valid_attribute_enum_store_sample_triggers_immediate_node_state_when_below_noise_level)
+ first_valid_attribute_address_space_sample_triggers_immediate_node_state_when_below_noise_level)
{
set_noise_level(0.02);
constexpr double usage_below_noise_level = 0.019;
- notify(0.0, 0.0, {usage_below_noise_level, attr_es_name}, {});
+ notify(0.0, 0.0, {usage_below_noise_level, attr_name});
EXPECT_EQ(1, requested_almost_immediate_replies());
- EXPECT_EQ(ResourceUsage(0.0, 0.0, {usage_below_noise_level, attr_es_name}, {}), get_old_usage());
- EXPECT_EQ(ResourceUsage(0.0, 0.0, {usage_below_noise_level, attr_es_name}, {}), get_usage());
-}
-
-TEST_F(ServiceLayerHostInfoReporterTest,
- first_valid_attribute_multi_value_sample_triggers_immediate_node_state_when_below_noise_level)
-{
- set_noise_level(0.02);
- constexpr double usage_below_noise_level = 0.019;
- notify(0.0, 0.0, {}, {usage_below_noise_level, attr_mv_name});
- EXPECT_EQ(1, requested_almost_immediate_replies());
- EXPECT_EQ(ResourceUsage(0.0, 0.0, {}, {usage_below_noise_level, attr_mv_name}), get_old_usage());
- EXPECT_EQ(ResourceUsage(0.0, 0.0, {}, {usage_below_noise_level, attr_mv_name}), get_usage());
+ EXPECT_EQ(ResourceUsage(0.0, 0.0, {usage_below_noise_level, attr_name}), get_old_usage());
+ EXPECT_EQ(ResourceUsage(0.0, 0.0, {usage_below_noise_level, attr_name}), get_usage());
}
TEST_F(ServiceLayerHostInfoReporterTest, json_report_generated)
@@ -151,8 +137,8 @@ TEST_F(ServiceLayerHostInfoReporterTest, json_report_generated)
EXPECT_EQ(ResourceUsage(0.0, 0.0), get_slime_usage());
notify(0.5, 0.4);
EXPECT_EQ(ResourceUsage(0.5, 0.4), get_slime_usage());
- notify(0.5, 0.4, {0.3, attr_es_name}, {0.2, attr_mv_name});
- EXPECT_EQ(ResourceUsage(0.5, 0.4, {0.3, attr_es_name}, {0.2, attr_mv_name}), get_slime_usage());
+ notify(0.5, 0.4, {0.3, attr_name});
+ EXPECT_EQ(ResourceUsage(0.5, 0.4, {0.3, attr_name}), get_slime_usage());
}
}
diff --git a/storage/src/vespa/storage/persistence/filestorage/service_layer_host_info_reporter.cpp b/storage/src/vespa/storage/persistence/filestorage/service_layer_host_info_reporter.cpp
index 97244582f50..67668d8ea55 100644
--- a/storage/src/vespa/storage/persistence/filestorage/service_layer_host_info_reporter.cpp
+++ b/storage/src/vespa/storage/persistence/filestorage/service_layer_host_info_reporter.cpp
@@ -18,8 +18,7 @@ namespace {
const vespalib::string memory_label("memory");
const vespalib::string disk_label("disk");
-const vespalib::string attribute_enum_store_label("attribute-enum-store");
-const vespalib::string attribute_multi_value_label("attribute-multi-value");
+const vespalib::string attribute_address_space_label("attribute-address-space");
void write_usage(vespalib::JsonStream& output, const vespalib::string &label, double value)
{
@@ -40,18 +39,13 @@ bool want_immediate_report(const spi::ResourceUsage& old_usage, const spi::Resou
{
auto disk_usage_diff = fabs(new_usage.get_disk_usage() - old_usage.get_disk_usage());
auto memory_usage_diff = fabs(new_usage.get_memory_usage() - old_usage.get_memory_usage());
- auto enum_store_diff = fabs(new_usage.get_attribute_enum_store_usage().get_usage() - old_usage.get_attribute_enum_store_usage().get_usage());
- auto multivalue_diff = fabs(new_usage.get_attribute_multivalue_usage().get_usage() - old_usage.get_attribute_multivalue_usage().get_usage());
- bool enum_store_got_valid = !old_usage.get_attribute_enum_store_usage().valid() &&
- new_usage.get_attribute_enum_store_usage().valid();
- bool multivalue_got_valid = !old_usage.get_attribute_multivalue_usage().valid() &&
- new_usage.get_attribute_multivalue_usage().valid();
+ auto address_space_diff = fabs(new_usage.get_attribute_address_space_usage().get_usage() - old_usage.get_attribute_address_space_usage().get_usage());
+ bool address_space_got_valid = !old_usage.get_attribute_address_space_usage().valid() &&
+ new_usage.get_attribute_address_space_usage().valid();
return ((disk_usage_diff > noise_level) ||
(memory_usage_diff > noise_level) ||
- (enum_store_diff > noise_level) ||
- (multivalue_diff > noise_level) ||
- enum_store_got_valid ||
- multivalue_got_valid);
+ (address_space_diff > noise_level) ||
+ address_space_got_valid);
}
}
@@ -121,8 +115,7 @@ ServiceLayerHostInfoReporter::report(vespalib::JsonStream& output)
LOG(debug, "report(): usage=%s", to_string(usage).c_str());
write_usage(output, memory_label, usage.get_memory_usage());
write_usage(output, disk_label, usage.get_disk_usage());
- write_attribute_usage(output, attribute_enum_store_label, usage.get_attribute_enum_store_usage());
- write_attribute_usage(output, attribute_multi_value_label, usage.get_attribute_multivalue_usage());
+ write_attribute_usage(output, attribute_address_space_label, usage.get_attribute_address_space_usage());
}
output << End();
output << End();