diff options
8 files changed, 67 insertions, 3 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java index 57d938f8a71..62662bde2ad 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java @@ -72,6 +72,9 @@ public class VespaMetricSet { metrics.add(new Metric("vds.server.network.tls-connections-broken")); metrics.add(new Metric("vds.server.network.failed-tls-config-reloads")); + // C++ Fnet metrics + metrics.add(new Metric("vds.server.fnet.num-connections")); + return metrics; } diff --git a/fnet/src/vespa/fnet/connection.cpp b/fnet/src/vespa/fnet/connection.cpp index 74a7d19387c..bf29cc29c18 100644 --- a/fnet/src/vespa/fnet/connection.cpp +++ b/fnet/src/vespa/fnet/connection.cpp @@ -13,6 +13,8 @@ #include <vespa/log/log.h> LOG_SETUP(".fnet"); +std::atomic<uint64_t> FNET_Connection::_num_connections = 0; + namespace { class SyncPacket : public FNET_DummyPacket { private: @@ -489,6 +491,7 @@ FNET_Connection::FNET_Connection(FNET_TransportThread *owner, _cleanup(nullptr) { assert(_socket && (_socket->get_fd() >= 0)); + ++_num_connections; } @@ -526,6 +529,7 @@ FNET_Connection::FNET_Connection(FNET_TransportThread *owner, _adminChannel = admin.get(); _channels.Register(admin.release()); } + ++_num_connections; } @@ -536,6 +540,7 @@ FNET_Connection::~FNET_Connection() delete _adminChannel; } assert(_cleanup == nullptr); + --_num_connections; } diff --git a/fnet/src/vespa/fnet/connection.h b/fnet/src/vespa/fnet/connection.h index 760b1b96d4d..c9c49c5151a 100644 --- a/fnet/src/vespa/fnet/connection.h +++ b/fnet/src/vespa/fnet/connection.h @@ -10,6 +10,7 @@ #include <vespa/vespalib/net/socket_handle.h> #include <vespa/vespalib/net/async_resolver.h> #include <vespa/vespalib/net/crypto_socket.h> +#include <atomic> class FNET_IPacketStreamer; class FNET_IServerAdapter; @@ -111,6 +112,8 @@ private: FNET_IConnectionCleanupHandler *_cleanup; // cleanup handler + static std::atomic<uint64_t> _num_connections; // total number of connections + FNET_Connection(const FNET_Connection &); FNET_Connection &operator=(const FNET_Connection &); @@ -517,5 +520,10 @@ public: */ uint32_t getInputBufferSize() const { return _input.GetBufSize(); } + /** + * @return the total number of connection objects + **/ + static uint64_t get_num_connections() { + return _num_connections.load(std::memory_order_relaxed); + } }; - diff --git a/storage/src/vespa/storage/storageserver/CMakeLists.txt b/storage/src/vespa/storage/storageserver/CMakeLists.txt index 73873e78032..1aafe58af6c 100644 --- a/storage/src/vespa/storage/storageserver/CMakeLists.txt +++ b/storage/src/vespa/storage/storageserver/CMakeLists.txt @@ -7,11 +7,12 @@ vespa_add_library(storage_storageserver changedbucketownershiphandler.cpp communicationmanager.cpp communicationmanagermetrics.cpp - configurable_bucket_resolver.cpp config_logging.cpp + configurable_bucket_resolver.cpp distributornode.cpp distributornodecontext.cpp documentapiconverter.cpp + fnet_metrics_wrapper.cpp fnetlistener.cpp mergethrottler.cpp messagesink.cpp diff --git a/storage/src/vespa/storage/storageserver/fnet_metrics_wrapper.cpp b/storage/src/vespa/storage/storageserver/fnet_metrics_wrapper.cpp new file mode 100644 index 00000000000..476ececd078 --- /dev/null +++ b/storage/src/vespa/storage/storageserver/fnet_metrics_wrapper.cpp @@ -0,0 +1,21 @@ +// Copyright 2020 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "fnet_metrics_wrapper.h" + +namespace storage { + +FnetMetricsWrapper::FnetMetricsWrapper(metrics::MetricSet* owner) + : metrics::MetricSet("fnet", {}, "transport layer metrics", owner), + _num_connections("num-connections", {}, "total number of connection objects", this) +{ +} + +FnetMetricsWrapper::~FnetMetricsWrapper() = default; + +void +FnetMetricsWrapper::update_metrics() +{ + _num_connections.set(FNET_Connection::get_num_connections()); +} + +} diff --git a/storage/src/vespa/storage/storageserver/fnet_metrics_wrapper.h b/storage/src/vespa/storage/storageserver/fnet_metrics_wrapper.h new file mode 100644 index 00000000000..dacb9e9f52c --- /dev/null +++ b/storage/src/vespa/storage/storageserver/fnet_metrics_wrapper.h @@ -0,0 +1,22 @@ +// Copyright 2020 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include <vespa/metrics/metrics.h> +#include <vespa/fnet/connection.h> + +namespace storage { + +// Simple wrapper around low-level fnet network metrics +class FnetMetricsWrapper : public metrics::MetricSet +{ +private: + metrics::LongValueMetric _num_connections; + +public: + explicit FnetMetricsWrapper(metrics::MetricSet* owner); + ~FnetMetricsWrapper() override; + void update_metrics(); +}; + +} diff --git a/storage/src/vespa/storage/storageserver/storagemetricsset.cpp b/storage/src/vespa/storage/storageserver/storagemetricsset.cpp index f3240f0663b..6ed5c1ab650 100644 --- a/storage/src/vespa/storage/storageserver/storagemetricsset.cpp +++ b/storage/src/vespa/storage/storageserver/storagemetricsset.cpp @@ -23,7 +23,8 @@ StorageMetricSet::StorageMetricSet() memoryUse_messages(this), memoryUse_visiting("memoryusage_visiting", {{"memory"}}, "Message use from visiting", this), - tls_metrics(this) + tls_metrics(this), + fnet_metrics(this) {} StorageMetricSet::~StorageMetricSet() = default; @@ -35,6 +36,7 @@ void StorageMetricSet::updateMetrics() { // be erased from history. This will no longer be a problem once we move to a // metrics system built around absolute (rather than derived) values. tls_metrics.update_metrics_with_snapshot_delta(); + fnet_metrics.update_metrics(); } } // storage diff --git a/storage/src/vespa/storage/storageserver/storagemetricsset.h b/storage/src/vespa/storage/storageserver/storagemetricsset.h index 49795c63324..a315e974c01 100644 --- a/storage/src/vespa/storage/storageserver/storagemetricsset.h +++ b/storage/src/vespa/storage/storageserver/storagemetricsset.h @@ -3,6 +3,7 @@ #pragma once #include "tls_statistics_metrics_wrapper.h" +#include "fnet_metrics_wrapper.h" #include <vespa/metrics/metrics.h> namespace storage { @@ -27,6 +28,7 @@ struct StorageMetricSet : public metrics::MetricSet metrics::LongValueMetric memoryUse_visiting; TlsStatisticsMetricsWrapper tls_metrics; + FnetMetricsWrapper fnet_metrics; StorageMetricSet(); ~StorageMetricSet() override; |