Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 19 additions & 3 deletions google/cloud/bigtable/internal/data_connection_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
#include "google/cloud/bigtable/result_source_interface.h"
#include "google/cloud/bigtable/retry_policy.h"
#include "google/cloud/background_threads.h"
#include "google/cloud/common_options.h"
#include "google/cloud/credentials.h"
#include "google/cloud/grpc_options.h"
#include "google/cloud/idempotency.h"
#include "google/cloud/internal/algorithm.h"
Expand All @@ -39,6 +41,7 @@
#include "google/cloud/internal/random.h"
#include "google/cloud/internal/retry_loop.h"
#include "google/cloud/internal/streaming_read_rpc.h"
#include "google/cloud/universe_domain_options.h"
#include <memory>
#include <string>

Expand Down Expand Up @@ -195,6 +198,17 @@ std::string_view InstanceNameFromTableName(std::string_view table_name) {
return table_name.substr(0, pos);
}

#ifdef GOOGLE_CLOUD_CPP_BIGTABLE_WITH_OTEL_METRICS
Options MetricsExporterConnectionOptions(Options options) {
// We start with a copy of the client options to preserve credentials and
// universe domain, but we must unset Bigtable-specific endpoints/authorities
// to allow default Monitoring defaults.
options.unset<EndpointOption>();
options.unset<AuthorityOption>();
return options;
}
#endif // GOOGLE_CLOUD_CPP_BIGTABLE_WITH_OTEL_METRICS

} // namespace

bigtable::Row TransformReadModifyWriteRowResponse(
Expand Down Expand Up @@ -227,23 +241,25 @@ DataConnectionImpl::DataConnectionImpl(
options_(MergeOptions(std::move(options), DataConnection::options())) {
#ifdef GOOGLE_CLOUD_CPP_BIGTABLE_WITH_OTEL_METRICS
if (options_.get<bigtable::EnableMetricsOption>()) {
metric_service_connection_ = monitoring_v3::MakeMetricServiceConnection(
MetricsExporterConnectionOptions(options_));
// The client_uid is eventually used in conjunction with other data labels
// to identify metric data points. This pseudorandom string is used to aid
// in disambiguation.
auto gen = internal::MakeDefaultPRNG();
std::string client_uid =
internal::Sample(gen, 16, "abcdefghijklmnopqrstuvwxyz0123456789");
operation_context_factory_ =
std::make_unique<MetricsOperationContextFactory>(std::move(client_uid),
options_);
std::make_unique<MetricsOperationContextFactory>(
std::move(client_uid), metric_service_connection_, options_);
} else {
operation_context_factory_ =
std::make_unique<SimpleOperationContextFactory>();
}
#else
operation_context_factory_ =
std::make_unique<SimpleOperationContextFactory>();
#endif
#endif // GOOGLE_CLOUD_CPP_BIGTABLE_WITH_OTEL_METRICS
}

DataConnectionImpl::DataConnectionImpl(
Expand Down
7 changes: 7 additions & 0 deletions google/cloud/bigtable/internal/data_connection_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@
#include "google/cloud/bigtable/prepared_query.h"
#include "google/cloud/bigtable/result_source_interface.h"
#include "google/cloud/background_threads.h"
#ifdef GOOGLE_CLOUD_CPP_BIGTABLE_WITH_OTEL_METRICS
#include "google/cloud/monitoring/v3/metric_connection.h"
Comment thread
scotthart marked this conversation as resolved.
#endif // GOOGLE_CLOUD_CPP_BIGTABLE_WITH_OTEL_METRICS
#include "google/cloud/options.h"
#include "google/cloud/status_or.h"
#include "google/cloud/version.h"
Expand Down Expand Up @@ -142,6 +145,10 @@ class DataConnectionImpl : public bigtable::DataConnection {

std::unique_ptr<BackgroundThreads> background_;
std::unique_ptr<StubManager> stub_manager_;
#ifdef GOOGLE_CLOUD_CPP_BIGTABLE_WITH_OTEL_METRICS
std::shared_ptr<::google::cloud::monitoring_v3::MetricServiceConnection>
metric_service_connection_;
#endif // GOOGLE_CLOUD_CPP_BIGTABLE_WITH_OTEL_METRICS
std::unique_ptr<OperationContextFactory> operation_context_factory_;
std::shared_ptr<MutateRowsLimiter> limiter_;
Options options_;
Expand Down
6 changes: 4 additions & 2 deletions google/cloud/bigtable/internal/operation_context_factory.cc
Original file line number Diff line number Diff line change
Expand Up @@ -158,9 +158,11 @@ MetricsOperationContextFactory::MetricsOperationContextFactory(
}

MetricsOperationContextFactory::MetricsOperationContextFactory(
std::string client_uid, Options options)
std::string client_uid,
std::shared_ptr<monitoring_v3::MetricServiceConnection> conn,
Options options)
: MetricsOperationContextFactory(
std::move(client_uid), nullptr,
std::move(client_uid), std::move(conn),
std::make_shared<OperationContext::Clock>(), std::move(options)) {}

MetricsOperationContextFactory::MetricsOperationContextFactory(
Expand Down
10 changes: 5 additions & 5 deletions google/cloud/bigtable/internal/operation_context_factory.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,16 +88,16 @@ class SimpleOperationContextFactory : public OperationContextFactory {

class MetricsOperationContextFactory : public OperationContextFactory {
public:
explicit MetricsOperationContextFactory(std::string client_uid,
Options options = {});
MetricsOperationContextFactory(
std::string client_uid,
std::shared_ptr<monitoring_v3::MetricServiceConnection> conn,
Options options = {});

// Used for injecting a MockMetricsServiceConnection for testing.
MetricsOperationContextFactory(
std::string client_uid,
std::shared_ptr<monitoring_v3::MetricServiceConnection> conn,
std::shared_ptr<OperationContext::Clock> clock =
std::make_shared<OperationContext::Clock>(),
Options options = {});
std::shared_ptr<OperationContext::Clock> clock, Options options = {});
Comment thread
scotthart marked this conversation as resolved.

// This constructs an instance only suitable for testing. The provided metric
// is copied into every RPC metric vector, preventing normal Metric
Expand Down
Loading