diff options
author | Geir Storli <geirst@verizonmedia.com> | 2021-01-25 16:02:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-25 16:02:12 +0100 |
commit | 748d3108a4167023c450fd5d951826de3dcb0dfb (patch) | |
tree | 2de158b3edbc49f0ffdfc91a1e4be051ca367c76 | |
parent | 7280724b0eef1ffaf899b3ae67fdc9310c0871b4 (diff) | |
parent | bc6800ad8e746a2cef6a4fa1ddbeea21130d16ca (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.cpp | 29 | ||||
-rw-r--r-- | storage/src/vespa/storage/persistence/filestorage/service_layer_host_info_reporter.cpp | 23 |
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(); |