summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2021-01-25 16:02:12 +0100
committerGitHub <noreply@github.com>2021-01-25 16:02:12 +0100
commit748d3108a4167023c450fd5d951826de3dcb0dfb (patch)
tree2de158b3edbc49f0ffdfc91a1e4be051ca367c76
parent7280724b0eef1ffaf899b3ae67fdc9310c0871b4 (diff)
parentbc6800ad8e746a2cef6a4fa1ddbeea21130d16ca (diff)
Merge pull request #16197 from vespa-engine/toregge/add-attribute-resource-usage-to-reported-host-info
Add attribute resource usage to reported host info.
-rw-r--r--storage/src/tests/persistence/filestorage/service_layer_host_info_reporter_test.cpp29
-rw-r--r--storage/src/vespa/storage/persistence/filestorage/service_layer_host_info_reporter.cpp23
2 files changed, 46 insertions, 6 deletions
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 cf9d380fb13..c4489b42978 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
@@ -11,6 +11,7 @@
namespace storage {
+using spi::AttributeResourceUsage;
using spi::ResourceUsage;
namespace {
@@ -21,6 +22,17 @@ get_usage_element(const vespalib::Slime& root, const vespalib::string& label)
return root.get()["content-node"]["resource-usage"][label]["usage"].asDouble();
}
+AttributeResourceUsage
+get_attribute_usage_element(const vespalib::Slime& root, const vespalib::string& label)
+{
+ double usage = get_usage_element(root, label);
+ auto name = root.get()["content-node"]["resource-usage"][label]["name"].asString();
+ return AttributeResourceUsage(usage, name.make_string());
+}
+
+const vespalib::string attr_es_name("doctype.subdb.esattr");
+const vespalib::string attr_mv_name("doctype.subdb.mvattr");
+
}
struct ServiceLayerHostInfoReporterTest : ::testing::Test {
@@ -31,9 +43,12 @@ struct ServiceLayerHostInfoReporterTest : ::testing::Test {
ServiceLayerHostInfoReporterTest();
~ServiceLayerHostInfoReporterTest();
- void notify(double disk_usage, double memory_usage) {
+ void notify(double disk_usage, double memory_usage, const AttributeResourceUsage &attribute_enum_store_usage, const AttributeResourceUsage &attribute_multivalue_usage) {
auto& listener = static_cast<spi::IResourceUsageListener&>(_reporter);
- listener.update_resource_usage(ResourceUsage(disk_usage, memory_usage));
+ listener.update_resource_usage(ResourceUsage(disk_usage, memory_usage, attribute_enum_store_usage, attribute_multivalue_usage));
+ }
+ void notify(double disk_usage, double memory_usage) {
+ notify(disk_usage, memory_usage, {0.0, ""}, {0.0, ""});
}
size_t requested_almost_immediate_replies() { return _state_manager.requested_almost_immediate_node_state_replies(); }
@@ -42,7 +57,7 @@ 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"));
+ 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"));
}
};
@@ -79,6 +94,12 @@ 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.799, 0.699), 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());
}
TEST_F(ServiceLayerHostInfoReporterTest, json_report_generated)
@@ -86,6 +107,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());
}
}
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 784aa16bf02..01a923d7d90 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
@@ -13,6 +13,11 @@ namespace {
constexpr double diff_slack = 0.01;
+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");
+
void write_usage(vespalib::JsonStream& output, const vespalib::string &label, double value)
{
output << label << Object();
@@ -20,11 +25,21 @@ void write_usage(vespalib::JsonStream& output, const vespalib::string &label, do
output << End();
}
+void write_attribute_usage(vespalib::JsonStream& output, const vespalib::string &label, const spi::AttributeResourceUsage &usage)
+{
+ output << label << Object();
+ output << "usage" << usage.get_usage();
+ output << "name" << usage.get_name();
+ output << End();
+}
+
bool want_immediate_report(const spi::ResourceUsage& old_resource_usage, const spi::ResourceUsage& resource_usage)
{
auto disk_usage_diff = fabs(resource_usage.get_disk_usage() - old_resource_usage.get_disk_usage());
auto memory_usage_diff = fabs(resource_usage.get_memory_usage() - old_resource_usage.get_memory_usage());
- return (disk_usage_diff > diff_slack || memory_usage_diff > diff_slack);
+ auto attribute_enum_store_diff = fabs(resource_usage.get_attribute_enum_store_usage().get_usage() - old_resource_usage.get_attribute_enum_store_usage().get_usage());
+ auto attribute_multivalue_diff = fabs(resource_usage.get_attribute_multivalue_usage().get_usage() - old_resource_usage.get_attribute_multivalue_usage().get_usage());
+ return (disk_usage_diff > diff_slack || memory_usage_diff > diff_slack || attribute_enum_store_diff > diff_slack || attribute_multivalue_diff > diff_slack);
}
}
@@ -67,8 +82,10 @@ ServiceLayerHostInfoReporter::report(vespalib::JsonStream& output)
{
std::lock_guard guard(_lock);
auto& usage = get_usage();
- write_usage(output, "memory", usage.get_memory_usage());
- write_usage(output, "disk", usage.get_disk_usage());
+ 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());
}
output << End();
output << End();