From 6878609fc59fa48110b1e3dcbdb96e83e1d73206 Mon Sep 17 00:00:00 2001 From: Yash Tibrewal Date: Wed, 16 Aug 2023 13:35:05 -0700 Subject: [PATCH] [GSM Observability] Add cloud c++ dependency.. this time for sure (#34071) --- bazel/googleapis.BUILD | 28 +++++++++++++++++++ bazel/grpc_build_system.bzl | 2 ++ bazel/grpc_deps.bzl | 12 ++++++++ bazel/grpc_extra_deps.bzl | 3 ++ test/cpp/ext/gsm/BUILD | 1 + test/cpp/ext/gsm/gsm_observability_test.cc | 5 ++++ tools/distrib/fix_build_deps.py | 1 + .../run_tests/sanity/check_bazel_workspace.py | 4 +++ 8 files changed, 56 insertions(+) create mode 100644 bazel/googleapis.BUILD diff --git a/bazel/googleapis.BUILD b/bazel/googleapis.BUILD new file mode 100644 index 00000000000..dc7e05f7424 --- /dev/null +++ b/bazel/googleapis.BUILD @@ -0,0 +1,28 @@ +# Copyright 2023 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +licenses(["notice"]) + +package( + default_visibility = ["//visibility:public"] +) + +# This is needed for the dependency on google_cloud_cpp to work. +# Taken from https://github.com/googleapis/google-cloud-cpp/blob/2839e9dba793ca023e11ea67f201f66f74fa7d3e/bazel/googleapis.BUILD +cc_library( + name = "googleapis_system_includes", + includes = [ + ".", + ], +) diff --git a/bazel/grpc_build_system.bzl b/bazel/grpc_build_system.bzl index 3c62942b605..7d3a9e25600 100644 --- a/bazel/grpc_build_system.bzl +++ b/bazel/grpc_build_system.bzl @@ -75,6 +75,8 @@ def _get_external_deps(external_deps): ret.append("@com_google_googleapis//" + dep) elif dep.startswith("otel/"): ret.append(dep.replace("otel/", "@io_opentelemetry_cpp//")) + elif dep.startswith("google_cloud_cpp"): + ret.append(dep.replace("google_cloud_cpp", "@google_cloud_cpp//")) else: ret.append("//external:" + dep) return ret diff --git a/bazel/grpc_deps.bzl b/bazel/grpc_deps.bzl index c2f0159b051..ecf995c7a51 100644 --- a/bazel/grpc_deps.bzl +++ b/bazel/grpc_deps.bzl @@ -438,6 +438,7 @@ def grpc_deps(): name = "com_google_googleapis", sha256 = "5bb6b0253ccf64b53d6c7249625a7e3f6c3bc6402abd52d3778bfa48258703a0", strip_prefix = "googleapis-2f9af297c84c55c8b871ba4495e01ade42476c92", + build_file = Label("//bazel:googleapis.BUILD"), urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/googleapis/googleapis/archive/2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz", "https://github.com/googleapis/googleapis/archive/2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz", @@ -499,6 +500,17 @@ def grpc_deps(): ], ) + if "google_cloud_cpp" not in native.existing_rules(): + http_archive( + name = "google_cloud_cpp", + sha256 = "371d01b03c7e2604d671b8fa1c86710abe3b524a78bc2705a6bb4de715696755", + strip_prefix = "google-cloud-cpp-2.14.0", + urls = [ + "https://storage.googleapis.com/grpc-bazel-mirror/github.com/googleapis/google-cloud-cpp/archive/refs/tags/v2.14.0.tar.gz", + "https://github.com/googleapis/google-cloud-cpp/archive/refs/tags/v2.14.0.tar.gz", + ], + ) + grpc_python_deps() # TODO: move some dependencies from "grpc_deps" here? diff --git a/bazel/grpc_extra_deps.bzl b/bazel/grpc_extra_deps.bzl index 4d8afa3131a..e57aa968eaf 100644 --- a/bazel/grpc_extra_deps.bzl +++ b/bazel/grpc_extra_deps.bzl @@ -20,6 +20,7 @@ load("@com_envoyproxy_protoc_gen_validate//:dependencies.bzl", "go_third_party") load("@com_google_googleapis//:repository_rules.bzl", "switched_rules_by_language") load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") load("@envoy_api//bazel:repositories.bzl", "api_dependencies") +load("@google_cloud_cpp//bazel:google_cloud_cpp_deps.bzl", "google_cloud_cpp_deps") load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") load("@upb//bazel:workspace_deps.bzl", "upb_deps") @@ -71,3 +72,5 @@ def grpc_extra_deps(ignore_version_differences = False): grpc = True, python = True, ) + + google_cloud_cpp_deps() diff --git a/test/cpp/ext/gsm/BUILD b/test/cpp/ext/gsm/BUILD index fc96886fc58..4fa713f1115 100644 --- a/test/cpp/ext/gsm/BUILD +++ b/test/cpp/ext/gsm/BUILD @@ -27,6 +27,7 @@ grpc_cc_test( "gsm_observability_test.cc", ], external_deps = [ + "google_cloud_cpp:experimental-opentelemetry", "gtest", "otel/sdk/src/metrics", ], diff --git a/test/cpp/ext/gsm/gsm_observability_test.cc b/test/cpp/ext/gsm/gsm_observability_test.cc index 2530149d0de..584df8990a5 100644 --- a/test/cpp/ext/gsm/gsm_observability_test.cc +++ b/test/cpp/ext/gsm/gsm_observability_test.cc @@ -18,6 +18,7 @@ #include "src/cpp/ext/gsm/gsm_observability.h" +#include "google/cloud/opentelemetry/resource_detector.h" #include "gtest/gtest.h" #include "test/core/util/test_config.h" @@ -32,6 +33,10 @@ TEST(GsmCustomObservabilityBuilderTest, Basic) { absl::UnimplementedError("Not Implemented")); } +TEST(GsmDependencyTest, GoogleCloudOpenTelemetryDependency) { + EXPECT_NE(google::cloud::otel::MakeResourceDetector(), nullptr); +} + } // namespace } // namespace testing } // namespace grpc diff --git a/tools/distrib/fix_build_deps.py b/tools/distrib/fix_build_deps.py index cf6a827644d..ac13e43f729 100755 --- a/tools/distrib/fix_build_deps.py +++ b/tools/distrib/fix_build_deps.py @@ -93,6 +93,7 @@ EXTERNAL_DEPS = { "absl/types/variant.h": "absl/types:variant", "absl/utility/utility.h": "absl/utility", "address_sorting/address_sorting.h": "address_sorting", + "google/cloud/opentelemetry/resource_detector.h": "google_cloud_cpp:experimental-opentelemetry", "opentelemetry/context/context.h": "otel/api", "opentelemetry/metrics/meter.h": "otel/api", "opentelemetry/metrics/meter_provider.h": "otel/api", diff --git a/tools/run_tests/sanity/check_bazel_workspace.py b/tools/run_tests/sanity/check_bazel_workspace.py index 2b78c439c18..c7adcc18e1b 100755 --- a/tools/run_tests/sanity/check_bazel_workspace.py +++ b/tools/run_tests/sanity/check_bazel_workspace.py @@ -78,6 +78,7 @@ _GRPC_DEP_NAMES = [ "com_google_googleapis", "com_google_libprotobuf_mutator", "com_github_cncf_udpa", + "google_cloud_cpp", ] _GRPC_BAZEL_ONLY_DEPS = [ @@ -104,6 +105,7 @@ _GRPC_BAZEL_ONLY_DEPS = [ "com_envoyproxy_protoc_gen_validate", "com_google_googleapis", "com_google_libprotobuf_mutator", + "google_cloud_cpp", ] @@ -165,6 +167,7 @@ build_rules = { "load": lambda a, b: None, "git_repository": lambda **args: eval_state.git_repository(**args), "grpc_python_deps": lambda: None, + "Label": lambda a: None, } exec((bazel_file), build_rules) for name in _GRPC_DEP_NAMES: @@ -213,6 +216,7 @@ for name in _GRPC_DEP_NAMES: "load": lambda a, b: None, "git_repository": lambda **args: state.git_repository(**args), "grpc_python_deps": lambda *args, **kwargs: None, + "Label": lambda a: None, } exec((bazel_file), rules) assert name not in list(names_and_urls_with_overridden_name.keys())