Compare commits
1 Commits
master
...
test_61618
| Author | SHA1 | Date |
|---|---|---|
|
|
fc0a516d73 |
6
BUILD
6
BUILD
|
|
@ -14,6 +14,8 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
load("@bazel_skylib//lib:selects.bzl", "selects")
|
||||
load("@bazel_skylib//rules:common_settings.bzl", "bool_flag")
|
||||
load(
|
||||
"//bazel:grpc_build_system.bzl",
|
||||
"grpc_cc_library",
|
||||
|
|
@ -22,8 +24,6 @@ load(
|
|||
"grpc_upb_proto_reflection_library",
|
||||
"python_config_settings",
|
||||
)
|
||||
load("@bazel_skylib//lib:selects.bzl", "selects")
|
||||
load("@bazel_skylib//rules:common_settings.bzl", "bool_flag")
|
||||
|
||||
licenses(["reciprocal"])
|
||||
|
||||
|
|
@ -2385,6 +2385,7 @@ grpc_cc_library(
|
|||
],
|
||||
external_deps = [
|
||||
"absl/base:core_headers",
|
||||
"absl/functional:any_invocable",
|
||||
"absl/status",
|
||||
"absl/status:statusor",
|
||||
"absl/strings",
|
||||
|
|
@ -2465,6 +2466,7 @@ grpc_cc_library(
|
|||
hdrs = GRPCXX_HDRS,
|
||||
external_deps = [
|
||||
"absl/base:core_headers",
|
||||
"absl/functional:any_invocable",
|
||||
"absl/status",
|
||||
"absl/status:statusor",
|
||||
"absl/strings",
|
||||
|
|
|
|||
|
|
@ -35,8 +35,7 @@ EXPERIMENT_ENABLES = {
|
|||
"promise_based_client_call": "event_engine_client,event_engine_listener,promise_based_client_call",
|
||||
"promise_based_server_call": "promise_based_server_call",
|
||||
"chaotic_good": "chaotic_good,event_engine_client,event_engine_listener,promise_based_client_call,promise_based_server_call",
|
||||
"registered_method_lookup_in_transport": "registered_method_lookup_in_transport",
|
||||
"promise_based_inproc_transport": "event_engine_client,event_engine_listener,promise_based_client_call,promise_based_inproc_transport,promise_based_server_call,registered_method_lookup_in_transport",
|
||||
"promise_based_inproc_transport": "event_engine_client,event_engine_listener,promise_based_client_call,promise_based_inproc_transport,promise_based_server_call",
|
||||
"rstpit": "rstpit",
|
||||
"schedule_cancellation_over_write": "schedule_cancellation_over_write",
|
||||
"server_privacy": "server_privacy",
|
||||
|
|
@ -96,9 +95,6 @@ EXPERIMENTS = {
|
|||
"event_engine_listener_test": [
|
||||
"event_engine_listener",
|
||||
],
|
||||
"surface_registered_method_lookup": [
|
||||
"registered_method_lookup_in_transport",
|
||||
],
|
||||
},
|
||||
},
|
||||
"ios": {
|
||||
|
|
@ -134,9 +130,6 @@ EXPERIMENTS = {
|
|||
],
|
||||
},
|
||||
"on": {
|
||||
"surface_registered_method_lookup": [
|
||||
"registered_method_lookup_in_transport",
|
||||
],
|
||||
},
|
||||
},
|
||||
"posix": {
|
||||
|
|
@ -200,9 +193,6 @@ EXPERIMENTS = {
|
|||
"resolver_component_tests_runner_invoker": [
|
||||
"event_engine_dns",
|
||||
],
|
||||
"surface_registered_method_lookup": [
|
||||
"registered_method_lookup_in_transport",
|
||||
],
|
||||
"xds_end2end_test": [
|
||||
"work_serializer_dispatch",
|
||||
],
|
||||
|
|
|
|||
|
|
@ -27,13 +27,13 @@
|
|||
Contains macros used throughout the repo.
|
||||
"""
|
||||
|
||||
load("@build_bazel_rules_apple//apple:ios.bzl", "ios_unit_test")
|
||||
load("@build_bazel_rules_apple//apple/testing/default_runner:ios_test_runner.bzl", "ios_test_runner")
|
||||
load("@com_google_protobuf//bazel:upb_proto_library.bzl", "upb_proto_library", "upb_proto_reflection_library")
|
||||
load("//bazel:cc_grpc_library.bzl", "cc_grpc_library")
|
||||
load("//bazel:copts.bzl", "GRPC_DEFAULT_COPTS")
|
||||
load("//bazel:experiments.bzl", "EXPERIMENTS", "EXPERIMENT_ENABLES", "EXPERIMENT_POLLERS")
|
||||
load("//bazel:test_experiments.bzl", "TEST_EXPERIMENTS", "TEST_EXPERIMENT_ENABLES", "TEST_EXPERIMENT_POLLERS")
|
||||
load("@build_bazel_rules_apple//apple:ios.bzl", "ios_unit_test")
|
||||
load("@build_bazel_rules_apple//apple/testing/default_runner:ios_test_runner.bzl", "ios_test_runner")
|
||||
load("@com_google_protobuf//bazel:upb_proto_library.bzl", "upb_proto_library", "upb_proto_reflection_library")
|
||||
|
||||
# The set of pollers to test against if a test exercises polling
|
||||
POLLERS = ["epoll1", "poll"]
|
||||
|
|
@ -120,6 +120,7 @@ def _update_visibility(visibility):
|
|||
"tsi": PRIVATE,
|
||||
"xds": PRIVATE,
|
||||
"xds_client_core": PRIVATE,
|
||||
"xds_end2end_test_utils": PRIVATE,
|
||||
"grpc_python_observability": PRIVATE,
|
||||
"event_engine_base_hdrs": PRIVATE,
|
||||
"useful": PRIVATE,
|
||||
|
|
|
|||
|
|
@ -64,14 +64,18 @@ Support for [xDS v2 APIs](https://www.envoyproxy.io/docs/envoy/latest/api/api_su
|
|||
[Fault Injection](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/http/fault/v3/fault.proto):<br> Only the following fields are supported:<ul><li>delay</li><li>abort</li><li>max_active_faults</li><li>headers</li></ul> | [A33](https://github.com/grpc/proposal/blob/master/A33-Fault-Injection.md) | v1.37.1 | v1.37.1 | v1.37.0 | v1.4.0 |
|
||||
[Client Status Discovery Service](https://github.com/envoyproxy/envoy/blob/main/api/envoy/service/status/v3/csds.proto) | [A40](https://github.com/grpc/proposal/blob/master/A40-csds-support.md) | v1.37.1 (C++)<br>v1.38.0 (Python) | v1.37.1 | v1.37.0 | v1.5.0 |
|
||||
[Aggregate Clusters](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/aggregate_cluster.html) and [Logical DNS Clusters](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/service_discovery.html#logical-dns) | [A37](https://github.com/grpc/proposal/blob/master/A37-xds-aggregate-and-logical-dns-clusters.md) | v1.47.0 | v1.39.0 | v1.52.2 | v1.9.0 |
|
||||
[Ring hash](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/load_balancers#ring-hash) load balancing policy:<br> Only the following [policy specifiers](https://github.com/envoyproxy/envoy/blob/2443032526cf6e50d63d35770df9473dd0460fc0/api/envoy/config/route/v3/route_components.proto#L706) are supported:<ul><li>header</li><li>filter_state with key `io.grpc.channel_id`</li></ul>Only [`XX_HASH`](https://github.com/envoyproxy/envoy/blob/2443032526cf6e50d63d35770df9473dd0460fc0/api/envoy/config/cluster/v3/cluster.proto#L383) function is supported. | [A42](https://github.com/grpc/proposal/blob/master/A42-xds-ring-hash-lb-policy.md) | v1.40.0<br>(C++ and Python) | v1.40.1 | 1.41.0 | |
|
||||
Aggregate Cluster Behavior Fixes | [A75](https://github.com/grpc/proposal/blob/master/A75-xds-aggregate-cluster-behavior-fixes.md) | v1.61.0 | | | |
|
||||
[Ring hash](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/load_balancers#ring-hash) load balancing policy:<br> Only the following [policy specifiers](https://github.com/envoyproxy/envoy/blob/2443032526cf6e50d63d35770df9473dd0460fc0/api/envoy/config/route/v3/route_components.proto#L706) are supported:<ul><li>header</li><li>filter_state with key `io.grpc.channel_id`</li></ul>Only [`XX_HASH`](https://github.com/envoyproxy/envoy/blob/2443032526cf6e50d63d35770df9473dd0460fc0/api/envoy/config/cluster/v3/cluster.proto#L383) function is supported. | [A42](https://github.com/grpc/proposal/blob/master/A42-xds-ring-hash-lb-policy.md) | v1.40.0<br>(C++ and Python) | v1.40.1 | 1.41.0 | v1.10.0 |
|
||||
[Retry](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#envoy-v3-api-msg-config-route-v3-retrypolicy):<br>Only the following fields are supported:<ul><li>retry_on for the following conditions: cancelled, deadline-exceeded, internal, resource-exhausted, and unavailable.</li><li>num_retries</li><li>retry_back_off</li></ul> | [A44](https://github.com/grpc/proposal/blob/master/A44-xds-retry.md) | v1.40.0<br>(C++ and Python) | v1.40.1 | 1.41.0 | v1.8.0 |
|
||||
[Security](https://www.envoyproxy.io/docs/envoy/latest/configuration/security/security):<br>Uses [certificate providers](https://github.com/grpc/proposal/blob/master/A29-xds-tls-security.md#certificate-provider-plugin-framework) instead of SDS | [A29](https://github.com/grpc/proposal/blob/master/A29-xds-tls-security.md) | v1.41.0<br>(C++ and Python) | v1.41.0 | 1.41.0 | |
|
||||
[Authorization (RBAC)](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/http/rbac/v3/rbac.proto):<br><ul><li>`LOG` action has no effect<li>CEL unsupported and rejected</ul> | [A41](https://github.com/grpc/proposal/blob/master/A41-xds-rbac.md) | v1.51.0<br>(C++ and Python) | v1.42.0 | 1.42.0 | |
|
||||
[Least Request LB Policy](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/load_balancers.html#weighted-least-request) | [A48](https://github.com/grpc/proposal/blob/master/A48-xds-least-request-lb-policy.md) | | v1.48.0 | | |
|
||||
[Outlier Detection](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/outlier):<br>Only the following detection types are supported:<ul><li>Success Rate</li><li>Failure Percentage</li></ul> | [A50](https://github.com/grpc/proposal/blob/master/A50-xds-outlier-detection.md) | v1.51.0 | v1.49.0 | v1.50.0 | v1.7.0 |
|
||||
[Custom Load Balancer Configuration](https://github.com/envoyproxy/envoy/blob/57be3189ffa3372b34e9480d1f02b2d165e49077/api/envoy/config/cluster/v3/cluster.proto#L1208) | [A52](https://github.com/grpc/proposal/blob/master/A52-xds-custom-lb-policies.md) | v1.55.0 | v1.47.0 | v1.56.0 | |
|
||||
[Custom Load Balancer Configuration](https://github.com/envoyproxy/envoy/blob/57be3189ffa3372b34e9480d1f02b2d165e49077/api/envoy/config/cluster/v3/cluster.proto#L1208) | [A52](https://github.com/grpc/proposal/blob/master/A52-xds-custom-lb-policies.md) | v1.55.0 | v1.47.0 | v1.56.0 | v1.10.0 |
|
||||
[xDS Federation](https://github.com/cncf/xds/blob/main/proposals/TP1-xds-transport-next.md) | [A47](https://github.com/grpc/proposal/blob/master/A47-xds-federation.md) | v1.55.0 | v1.55.0 | v1.55.0 | |
|
||||
[Client-Side Weighted Round Robin LB Policy](https://github.com/envoyproxy/envoy/blob/a6d46b6ac4750720eec9a49abe701f0df9bf8e0a/api/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.proto#L36) | [A58](https://github.com/grpc/proposal/blob/master/A58-client-side-weighted-round-robin-lb-policy.md) | v1.55.0 | v1.54.0 | v1.56.0 | |
|
||||
Pick First | [A62](https://github.com/grpc/proposal/blob/master/A62-pick-first.md) | v1.58.0 | v1.58.1 | v1.56.0 | |
|
||||
[StringMatcher for Header Matching](https://github.com/envoyproxy/envoy/blob/3fe4b8d335fa339ef6f17325c8d31f87ade7bb1a/api/envoy/config/route/v3/route_components.proto#L2280) | [A63](https://github.com/grpc/proposal/blob/master/A63-xds-string-matcher-in-header-matching.md) | v1.56.0 | v1.53.0 | v1.56.0 | v1.9.0 |
|
||||
mTLS Credentials in xDS Bootstrap File | [A65](https://github.com/grpc/proposal/blob/master/A65-xds-mtls-creds-in-bootstrap.md) | v1.57.0 | | | |
|
||||
LRS Custom Metrics Support | [A64](https://github.com/grpc/proposal/blob/master/A64-lrs-custom-metrics.md) | v1.54.0 | | | |
|
||||
mTLS Credentials in xDS Bootstrap File | [A65](https://github.com/grpc/proposal/blob/master/A65-xds-mtls-creds-in-bootstrap.md) | v1.57.0 | | v1.61.0 | |
|
||||
Stateful Session Affinity | [A55](https://github.com/grpc/proposal/blob/master/A55-xds-stateful-session-affinity.md), [A60](https://github.com/grpc/proposal/blob/master/A60-xds-stateful-session-affinity-weighted-clusters.md), [A75](https://github.com/grpc/proposal/blob/master/A75-xds-aggregate-cluster-behavior-fixes.md) | v1.61.0 | | | |
|
||||
|
|
|
|||
|
|
@ -100,6 +100,13 @@ class OpenTelemetryPluginBuilder {
|
|||
OpenTelemetryPluginBuilder& SetGenericMethodAttributeFilter(
|
||||
absl::AnyInvocable<bool(absl::string_view /*generic_method*/) const>
|
||||
generic_method_attribute_filter);
|
||||
// Methods to manipulate which instruments are enabled in the OpenTelemetry
|
||||
// Stats Plugin.
|
||||
OpenTelemetryPluginBuilder& EnableMetrics(
|
||||
absl::Span<const absl::string_view> metric_names);
|
||||
OpenTelemetryPluginBuilder& DisableMetrics(
|
||||
absl::Span<const absl::string_view> metric_names);
|
||||
OpenTelemetryPluginBuilder& DisableAllMetrics();
|
||||
/// Add a plugin option to add to the opentelemetry plugin being built. At
|
||||
/// present, this type is an opaque type. Ownership of \a option is
|
||||
/// transferred when `AddPluginOption` is invoked. A maximum of 64 plugin
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
#define GRPCPP_IMPL_SERVER_CALLBACK_HANDLERS_H
|
||||
|
||||
#include <grpc/grpc.h>
|
||||
#include <grpc/impl/call.h>
|
||||
#include <grpc/support/log.h>
|
||||
#include <grpcpp/impl/rpc_service_method.h>
|
||||
#include <grpcpp/server_context.h>
|
||||
|
|
@ -186,6 +187,8 @@ class CallbackUnaryHandler : public grpc::internal::MethodHandler {
|
|||
ctx_->set_message_allocator_state(allocator_state);
|
||||
}
|
||||
|
||||
grpc_call* call() override { return call_.call(); }
|
||||
|
||||
/// SetupReactor binds the reactor (which also releases any queued
|
||||
/// operations), maybe calls OnCancel if possible/needed, and maybe marks
|
||||
/// the completion of the RPC. This should be the last component of the
|
||||
|
|
@ -370,6 +373,8 @@ class CallbackClientStreamingHandler : public grpc::internal::MethodHandler {
|
|||
std::function<void()> call_requester)
|
||||
: ctx_(ctx), call_(*call), call_requester_(std::move(call_requester)) {}
|
||||
|
||||
grpc_call* call() override { return call_.call(); }
|
||||
|
||||
void SetupReactor(ServerReadReactor<RequestType>* reactor) {
|
||||
reactor_.store(reactor, std::memory_order_relaxed);
|
||||
// The callback for this function should not be inlined because it invokes
|
||||
|
|
@ -595,6 +600,8 @@ class CallbackServerStreamingHandler : public grpc::internal::MethodHandler {
|
|||
req_(req),
|
||||
call_requester_(std::move(call_requester)) {}
|
||||
|
||||
grpc_call* call() override { return call_.call(); }
|
||||
|
||||
void SetupReactor(ServerWriteReactor<ResponseType>* reactor) {
|
||||
reactor_.store(reactor, std::memory_order_relaxed);
|
||||
// The callback for this function should not be inlined because it invokes
|
||||
|
|
@ -807,6 +814,8 @@ class CallbackBidiHandler : public grpc::internal::MethodHandler {
|
|||
std::function<void()> call_requester)
|
||||
: ctx_(ctx), call_(*call), call_requester_(std::move(call_requester)) {}
|
||||
|
||||
grpc_call* call() override { return call_.call(); }
|
||||
|
||||
void SetupReactor(ServerBidiReactor<RequestType, ResponseType>* reactor) {
|
||||
reactor_.store(reactor, std::memory_order_relaxed);
|
||||
// The callbacks for these functions should not be inlined because they
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
#include <vector>
|
||||
|
||||
#include <grpc/grpc.h>
|
||||
#include <grpc/impl/call.h>
|
||||
#include <grpc/impl/compression_types.h>
|
||||
#include <grpcpp/impl/call.h>
|
||||
#include <grpcpp/impl/call_op_set.h>
|
||||
|
|
@ -520,7 +521,9 @@ class ServerContextBase {
|
|||
public:
|
||||
TestServerCallbackUnary(ServerContextBase* ctx,
|
||||
std::function<void(grpc::Status)> func)
|
||||
: reactor_(ctx->DefaultReactor()), func_(std::move(func)) {
|
||||
: reactor_(ctx->DefaultReactor()),
|
||||
func_(std::move(func)),
|
||||
call_(ctx->c_call()) {
|
||||
this->BindReactor(reactor_);
|
||||
}
|
||||
void Finish(grpc::Status s) override {
|
||||
|
|
@ -537,12 +540,16 @@ class ServerContextBase {
|
|||
|
||||
private:
|
||||
void CallOnDone() override {}
|
||||
|
||||
grpc_call* call() override { return call_; }
|
||||
|
||||
grpc::internal::ServerReactor* reactor() override { return reactor_; }
|
||||
|
||||
grpc::ServerUnaryReactor* const reactor_;
|
||||
std::atomic_bool status_set_{false};
|
||||
grpc::Status status_;
|
||||
const std::function<void(grpc::Status s)> func_;
|
||||
grpc_call* call_;
|
||||
};
|
||||
|
||||
alignas(Reactor) char default_reactor_[sizeof(Reactor)];
|
||||
|
|
|
|||
|
|
@ -23,6 +23,9 @@
|
|||
#include <functional>
|
||||
#include <type_traits>
|
||||
|
||||
#include "absl/functional/any_invocable.h"
|
||||
|
||||
#include <grpc/impl/call.h>
|
||||
#include <grpcpp/impl/call.h>
|
||||
#include <grpcpp/impl/call_op_set.h>
|
||||
#include <grpcpp/impl/sync.h>
|
||||
|
|
@ -127,6 +130,12 @@ class ServerCallbackCall {
|
|||
private:
|
||||
virtual ServerReactor* reactor() = 0;
|
||||
|
||||
virtual grpc_call* call() = 0;
|
||||
|
||||
virtual void RunAsync(absl::AnyInvocable<void()> cb) {
|
||||
grpc_call_run_in_event_engine(call(), std::move(cb));
|
||||
}
|
||||
|
||||
// CallOnDone performs the work required at completion of the RPC: invoking
|
||||
// the OnDone function and doing all necessary cleanup. This function is only
|
||||
// ever invoked on a fully-Unref'fed ServerCallbackCall.
|
||||
|
|
|
|||
|
|
@ -96,18 +96,12 @@ const char* const additional_constraints_chaotic_good = "{}";
|
|||
const uint8_t required_experiments_chaotic_good[] = {
|
||||
static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedClientCall),
|
||||
static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedServerCall)};
|
||||
const char* const description_registered_method_lookup_in_transport =
|
||||
"Change registered method's lookup point to transport";
|
||||
const char* const additional_constraints_registered_method_lookup_in_transport =
|
||||
"{}";
|
||||
const char* const description_promise_based_inproc_transport =
|
||||
"Use promises for the in-process transport.";
|
||||
const char* const additional_constraints_promise_based_inproc_transport = "{}";
|
||||
const uint8_t required_experiments_promise_based_inproc_transport[] = {
|
||||
static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedClientCall),
|
||||
static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedServerCall),
|
||||
static_cast<uint8_t>(
|
||||
grpc_core::kExperimentIdRegisteredMethodLookupInTransport)};
|
||||
static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedServerCall)};
|
||||
const char* const description_rstpit =
|
||||
"On RST_STREAM on a server, reduce MAX_CONCURRENT_STREAMS for a short "
|
||||
"duration";
|
||||
|
|
@ -201,14 +195,10 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|||
{"chaotic_good", description_chaotic_good,
|
||||
additional_constraints_chaotic_good, required_experiments_chaotic_good, 2,
|
||||
false, true},
|
||||
{"registered_method_lookup_in_transport",
|
||||
description_registered_method_lookup_in_transport,
|
||||
additional_constraints_registered_method_lookup_in_transport, nullptr, 0,
|
||||
true, true},
|
||||
{"promise_based_inproc_transport",
|
||||
description_promise_based_inproc_transport,
|
||||
additional_constraints_promise_based_inproc_transport,
|
||||
required_experiments_promise_based_inproc_transport, 3, false, false},
|
||||
required_experiments_promise_based_inproc_transport, 2, false, false},
|
||||
{"rstpit", description_rstpit, additional_constraints_rstpit, nullptr, 0,
|
||||
false, true},
|
||||
{"schedule_cancellation_over_write",
|
||||
|
|
@ -316,18 +306,12 @@ const char* const additional_constraints_chaotic_good = "{}";
|
|||
const uint8_t required_experiments_chaotic_good[] = {
|
||||
static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedClientCall),
|
||||
static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedServerCall)};
|
||||
const char* const description_registered_method_lookup_in_transport =
|
||||
"Change registered method's lookup point to transport";
|
||||
const char* const additional_constraints_registered_method_lookup_in_transport =
|
||||
"{}";
|
||||
const char* const description_promise_based_inproc_transport =
|
||||
"Use promises for the in-process transport.";
|
||||
const char* const additional_constraints_promise_based_inproc_transport = "{}";
|
||||
const uint8_t required_experiments_promise_based_inproc_transport[] = {
|
||||
static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedClientCall),
|
||||
static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedServerCall),
|
||||
static_cast<uint8_t>(
|
||||
grpc_core::kExperimentIdRegisteredMethodLookupInTransport)};
|
||||
static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedServerCall)};
|
||||
const char* const description_rstpit =
|
||||
"On RST_STREAM on a server, reduce MAX_CONCURRENT_STREAMS for a short "
|
||||
"duration";
|
||||
|
|
@ -421,14 +405,10 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|||
{"chaotic_good", description_chaotic_good,
|
||||
additional_constraints_chaotic_good, required_experiments_chaotic_good, 2,
|
||||
false, true},
|
||||
{"registered_method_lookup_in_transport",
|
||||
description_registered_method_lookup_in_transport,
|
||||
additional_constraints_registered_method_lookup_in_transport, nullptr, 0,
|
||||
true, true},
|
||||
{"promise_based_inproc_transport",
|
||||
description_promise_based_inproc_transport,
|
||||
additional_constraints_promise_based_inproc_transport,
|
||||
required_experiments_promise_based_inproc_transport, 3, false, false},
|
||||
required_experiments_promise_based_inproc_transport, 2, false, false},
|
||||
{"rstpit", description_rstpit, additional_constraints_rstpit, nullptr, 0,
|
||||
false, true},
|
||||
{"schedule_cancellation_over_write",
|
||||
|
|
@ -536,18 +516,12 @@ const char* const additional_constraints_chaotic_good = "{}";
|
|||
const uint8_t required_experiments_chaotic_good[] = {
|
||||
static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedClientCall),
|
||||
static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedServerCall)};
|
||||
const char* const description_registered_method_lookup_in_transport =
|
||||
"Change registered method's lookup point to transport";
|
||||
const char* const additional_constraints_registered_method_lookup_in_transport =
|
||||
"{}";
|
||||
const char* const description_promise_based_inproc_transport =
|
||||
"Use promises for the in-process transport.";
|
||||
const char* const additional_constraints_promise_based_inproc_transport = "{}";
|
||||
const uint8_t required_experiments_promise_based_inproc_transport[] = {
|
||||
static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedClientCall),
|
||||
static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedServerCall),
|
||||
static_cast<uint8_t>(
|
||||
grpc_core::kExperimentIdRegisteredMethodLookupInTransport)};
|
||||
static_cast<uint8_t>(grpc_core::kExperimentIdPromiseBasedServerCall)};
|
||||
const char* const description_rstpit =
|
||||
"On RST_STREAM on a server, reduce MAX_CONCURRENT_STREAMS for a short "
|
||||
"duration";
|
||||
|
|
@ -641,14 +615,10 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|||
{"chaotic_good", description_chaotic_good,
|
||||
additional_constraints_chaotic_good, required_experiments_chaotic_good, 2,
|
||||
false, true},
|
||||
{"registered_method_lookup_in_transport",
|
||||
description_registered_method_lookup_in_transport,
|
||||
additional_constraints_registered_method_lookup_in_transport, nullptr, 0,
|
||||
true, true},
|
||||
{"promise_based_inproc_transport",
|
||||
description_promise_based_inproc_transport,
|
||||
additional_constraints_promise_based_inproc_transport,
|
||||
required_experiments_promise_based_inproc_transport, 3, false, false},
|
||||
required_experiments_promise_based_inproc_transport, 2, false, false},
|
||||
{"rstpit", description_rstpit, additional_constraints_rstpit, nullptr, 0,
|
||||
false, true},
|
||||
{"schedule_cancellation_over_write",
|
||||
|
|
|
|||
|
|
@ -87,8 +87,6 @@ inline bool IsPendingQueueCapEnabled() { return true; }
|
|||
inline bool IsPromiseBasedClientCallEnabled() { return false; }
|
||||
inline bool IsPromiseBasedServerCallEnabled() { return false; }
|
||||
inline bool IsChaoticGoodEnabled() { return false; }
|
||||
#define GRPC_EXPERIMENT_IS_INCLUDED_REGISTERED_METHOD_LOOKUP_IN_TRANSPORT
|
||||
inline bool IsRegisteredMethodLookupInTransportEnabled() { return true; }
|
||||
inline bool IsPromiseBasedInprocTransportEnabled() { return false; }
|
||||
inline bool IsRstpitEnabled() { return false; }
|
||||
inline bool IsScheduleCancellationOverWriteEnabled() { return false; }
|
||||
|
|
@ -135,8 +133,6 @@ inline bool IsPendingQueueCapEnabled() { return true; }
|
|||
inline bool IsPromiseBasedClientCallEnabled() { return false; }
|
||||
inline bool IsPromiseBasedServerCallEnabled() { return false; }
|
||||
inline bool IsChaoticGoodEnabled() { return false; }
|
||||
#define GRPC_EXPERIMENT_IS_INCLUDED_REGISTERED_METHOD_LOOKUP_IN_TRANSPORT
|
||||
inline bool IsRegisteredMethodLookupInTransportEnabled() { return true; }
|
||||
inline bool IsPromiseBasedInprocTransportEnabled() { return false; }
|
||||
inline bool IsRstpitEnabled() { return false; }
|
||||
inline bool IsScheduleCancellationOverWriteEnabled() { return false; }
|
||||
|
|
@ -184,8 +180,6 @@ inline bool IsPendingQueueCapEnabled() { return true; }
|
|||
inline bool IsPromiseBasedClientCallEnabled() { return false; }
|
||||
inline bool IsPromiseBasedServerCallEnabled() { return false; }
|
||||
inline bool IsChaoticGoodEnabled() { return false; }
|
||||
#define GRPC_EXPERIMENT_IS_INCLUDED_REGISTERED_METHOD_LOOKUP_IN_TRANSPORT
|
||||
inline bool IsRegisteredMethodLookupInTransportEnabled() { return true; }
|
||||
inline bool IsPromiseBasedInprocTransportEnabled() { return false; }
|
||||
inline bool IsRstpitEnabled() { return false; }
|
||||
inline bool IsScheduleCancellationOverWriteEnabled() { return false; }
|
||||
|
|
@ -222,7 +216,6 @@ enum ExperimentIds {
|
|||
kExperimentIdPromiseBasedClientCall,
|
||||
kExperimentIdPromiseBasedServerCall,
|
||||
kExperimentIdChaoticGood,
|
||||
kExperimentIdRegisteredMethodLookupInTransport,
|
||||
kExperimentIdPromiseBasedInprocTransport,
|
||||
kExperimentIdRstpit,
|
||||
kExperimentIdScheduleCancellationOverWrite,
|
||||
|
|
@ -309,10 +302,6 @@ inline bool IsPromiseBasedServerCallEnabled() {
|
|||
inline bool IsChaoticGoodEnabled() {
|
||||
return IsExperimentEnabled(kExperimentIdChaoticGood);
|
||||
}
|
||||
#define GRPC_EXPERIMENT_IS_INCLUDED_REGISTERED_METHOD_LOOKUP_IN_TRANSPORT
|
||||
inline bool IsRegisteredMethodLookupInTransportEnabled() {
|
||||
return IsExperimentEnabled(kExperimentIdRegisteredMethodLookupInTransport);
|
||||
}
|
||||
#define GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_INPROC_TRANSPORT
|
||||
inline bool IsPromiseBasedInprocTransportEnabled() {
|
||||
return IsExperimentEnabled(kExperimentIdPromiseBasedInprocTransport);
|
||||
|
|
|
|||
|
|
@ -165,7 +165,7 @@
|
|||
owner: ctiller@google.com
|
||||
test_tags: []
|
||||
allow_in_fuzzing_config: false # experiment currently crashes if enabled
|
||||
requires: [promise_based_client_call, promise_based_server_call, registered_method_lookup_in_transport]
|
||||
requires: [promise_based_client_call, promise_based_server_call]
|
||||
- name: promise_based_server_call
|
||||
description:
|
||||
If set, use the new gRPC promise based call code when it's appropriate
|
||||
|
|
@ -173,12 +173,6 @@
|
|||
expiry: 2024/06/14
|
||||
owner: ctiller@google.com
|
||||
test_tags: ["core_end2end_test", "cpp_end2end_test", "xds_end2end_test", "logging_test"]
|
||||
- name: registered_method_lookup_in_transport
|
||||
description:
|
||||
Change registered method's lookup point to transport
|
||||
expiry: 2024/03/31
|
||||
owner: yashkt@google.com
|
||||
test_tags: ["surface_registered_method_lookup"]
|
||||
- name: rstpit
|
||||
description:
|
||||
On RST_STREAM on a server, reduce MAX_CONCURRENT_STREAMS for a short duration
|
||||
|
|
|
|||
|
|
@ -96,8 +96,6 @@
|
|||
posix: false
|
||||
- name: promise_based_server_call
|
||||
default: false
|
||||
- name: registered_method_lookup_in_transport
|
||||
default: true
|
||||
- name: rstpit
|
||||
default: false
|
||||
- name: schedule_cancellation_over_write
|
||||
|
|
|
|||
|
|
@ -1330,13 +1330,10 @@ void Server::ChannelData::InitTransport(RefCountedPtr<Server> server,
|
|||
++accept_stream_types;
|
||||
op->set_accept_stream = true;
|
||||
op->set_accept_stream_fn = AcceptStream;
|
||||
if (IsRegisteredMethodLookupInTransportEnabled()) {
|
||||
op->set_registered_method_matcher_fn = [](void* arg,
|
||||
ClientMetadata* metadata) {
|
||||
static_cast<ChannelData*>(arg)->SetRegisteredMethodOnMetadata(
|
||||
*metadata);
|
||||
};
|
||||
}
|
||||
op->set_registered_method_matcher_fn = [](void* arg,
|
||||
ClientMetadata* metadata) {
|
||||
static_cast<ChannelData*>(arg)->SetRegisteredMethodOnMetadata(*metadata);
|
||||
};
|
||||
op->set_accept_stream_user_data = this;
|
||||
}
|
||||
if (transport->server_transport() != nullptr) {
|
||||
|
|
@ -1527,15 +1524,9 @@ ArenaPromise<ServerMetadataHandle> Server::ChannelData::MakeCallPromise(
|
|||
}
|
||||
// Find request matcher.
|
||||
RequestMatcherInterface* matcher;
|
||||
RegisteredMethod* rm = nullptr;
|
||||
if (IsRegisteredMethodLookupInTransportEnabled()) {
|
||||
rm = static_cast<RegisteredMethod*>(
|
||||
call_args.client_initial_metadata->get(GrpcRegisteredMethod())
|
||||
.value_or(nullptr));
|
||||
} else {
|
||||
rm = chand->GetRegisteredMethod(host_ptr->as_string_view(),
|
||||
path_ptr->as_string_view());
|
||||
}
|
||||
RegisteredMethod* rm = static_cast<RegisteredMethod*>(
|
||||
call_args.client_initial_metadata->get(GrpcRegisteredMethod())
|
||||
.value_or(nullptr));
|
||||
ArenaPromise<absl::StatusOr<NextResult<MessageHandle>>>
|
||||
maybe_read_first_message([] { return NextResult<MessageHandle>(); });
|
||||
if (rm != nullptr) {
|
||||
|
|
@ -1760,7 +1751,6 @@ void Server::CallData::KillZombie() {
|
|||
|
||||
// If this changes, change MakeCallPromise too.
|
||||
void Server::CallData::StartNewRpc(grpc_call_element* elem) {
|
||||
auto* chand = static_cast<ChannelData*>(elem->channel_data);
|
||||
if (server_->ShutdownCalled()) {
|
||||
state_.store(CallState::ZOMBIED, std::memory_order_relaxed);
|
||||
KillZombie();
|
||||
|
|
@ -1771,15 +1761,8 @@ void Server::CallData::StartNewRpc(grpc_call_element* elem) {
|
|||
grpc_server_register_method_payload_handling payload_handling =
|
||||
GRPC_SRM_PAYLOAD_NONE;
|
||||
if (path_.has_value() && host_.has_value()) {
|
||||
RegisteredMethod* rm;
|
||||
if (IsRegisteredMethodLookupInTransportEnabled()) {
|
||||
rm = static_cast<RegisteredMethod*>(
|
||||
recv_initial_metadata_->get(GrpcRegisteredMethod())
|
||||
.value_or(nullptr));
|
||||
} else {
|
||||
rm = chand->GetRegisteredMethod(host_->as_string_view(),
|
||||
path_->as_string_view());
|
||||
}
|
||||
RegisteredMethod* rm = static_cast<RegisteredMethod*>(
|
||||
recv_initial_metadata_->get(GrpcRegisteredMethod()).value_or(nullptr));
|
||||
if (rm != nullptr) {
|
||||
matcher_ = rm->matcher.get();
|
||||
payload_handling = rm->payload_handling;
|
||||
|
|
|
|||
|
|
@ -15,18 +15,10 @@
|
|||
//
|
||||
//
|
||||
|
||||
#include <utility>
|
||||
|
||||
#include "absl/status/status.h"
|
||||
|
||||
#include <grpc/grpc.h>
|
||||
#include <grpcpp/support/client_callback.h>
|
||||
#include <grpcpp/support/status.h>
|
||||
|
||||
#include "src/core/lib/iomgr/closure.h"
|
||||
#include "src/core/lib/iomgr/error.h"
|
||||
#include "src/core/lib/iomgr/exec_ctx.h"
|
||||
#include "src/core/lib/iomgr/executor.h"
|
||||
#include "src/core/lib/surface/call.h"
|
||||
|
||||
namespace grpc {
|
||||
|
|
|
|||
|
|
@ -150,15 +150,19 @@ OpenTelemetryPluginBuilderImpl::SetMeterProvider(
|
|||
return *this;
|
||||
}
|
||||
|
||||
OpenTelemetryPluginBuilderImpl& OpenTelemetryPluginBuilderImpl::EnableMetric(
|
||||
absl::string_view metric_name) {
|
||||
metrics_.emplace(metric_name);
|
||||
OpenTelemetryPluginBuilderImpl& OpenTelemetryPluginBuilderImpl::EnableMetrics(
|
||||
absl::Span<const absl::string_view> metric_names) {
|
||||
for (const auto& metric_name : metric_names) {
|
||||
metrics_.emplace(metric_name);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
OpenTelemetryPluginBuilderImpl& OpenTelemetryPluginBuilderImpl::DisableMetric(
|
||||
absl::string_view metric_name) {
|
||||
metrics_.erase(metric_name);
|
||||
OpenTelemetryPluginBuilderImpl& OpenTelemetryPluginBuilderImpl::DisableMetrics(
|
||||
absl::Span<const absl::string_view> metric_names) {
|
||||
for (const auto& metric_name : metric_names) {
|
||||
metrics_.erase(metric_name);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
@ -607,6 +611,23 @@ OpenTelemetryPluginBuilder::SetGenericMethodAttributeFilter(
|
|||
return *this;
|
||||
}
|
||||
|
||||
OpenTelemetryPluginBuilder& OpenTelemetryPluginBuilder::EnableMetrics(
|
||||
absl::Span<const absl::string_view> metric_names) {
|
||||
impl_->EnableMetrics(metric_names);
|
||||
return *this;
|
||||
}
|
||||
|
||||
OpenTelemetryPluginBuilder& OpenTelemetryPluginBuilder::DisableMetrics(
|
||||
absl::Span<const absl::string_view> metric_names) {
|
||||
impl_->DisableMetrics(metric_names);
|
||||
return *this;
|
||||
}
|
||||
|
||||
OpenTelemetryPluginBuilder& OpenTelemetryPluginBuilder::DisableAllMetrics() {
|
||||
impl_->DisableAllMetrics();
|
||||
return *this;
|
||||
}
|
||||
|
||||
OpenTelemetryPluginBuilder& OpenTelemetryPluginBuilder::AddPluginOption(
|
||||
std::unique_ptr<OpenTelemetryPluginOption> option) {
|
||||
impl_->AddPluginOption(
|
||||
|
|
|
|||
|
|
@ -135,8 +135,10 @@ class OpenTelemetryPluginBuilderImpl {
|
|||
// grpc.server.call.duration
|
||||
// grpc.server.call.sent_total_compressed_message_size
|
||||
// grpc.server.call.rcvd_total_compressed_message_size
|
||||
OpenTelemetryPluginBuilderImpl& EnableMetric(absl::string_view metric_name);
|
||||
OpenTelemetryPluginBuilderImpl& DisableMetric(absl::string_view metric_name);
|
||||
OpenTelemetryPluginBuilderImpl& EnableMetrics(
|
||||
absl::Span<const absl::string_view> metric_names);
|
||||
OpenTelemetryPluginBuilderImpl& DisableMetrics(
|
||||
absl::Span<const absl::string_view> metric_names);
|
||||
OpenTelemetryPluginBuilderImpl& DisableAllMetrics();
|
||||
// If set, \a target_selector is called per channel to decide whether to
|
||||
// collect metrics on that target or not.
|
||||
|
|
@ -173,6 +175,10 @@ class OpenTelemetryPluginBuilderImpl {
|
|||
absl::string_view optional_label_key);
|
||||
absl::Status BuildAndRegisterGlobal();
|
||||
|
||||
const absl::flat_hash_set<std::string>& TestOnlyEnabledMetrics() {
|
||||
return metrics_;
|
||||
}
|
||||
|
||||
private:
|
||||
std::shared_ptr<opentelemetry::metrics::MeterProvider> meter_provider_;
|
||||
std::unique_ptr<LabelsInjector> labels_injector_;
|
||||
|
|
|
|||
|
|
@ -15,72 +15,29 @@
|
|||
//
|
||||
//
|
||||
|
||||
#include "absl/status/status.h"
|
||||
|
||||
#include <grpcpp/support/server_callback.h>
|
||||
|
||||
#include "src/core/lib/iomgr/closure.h"
|
||||
#include "src/core/lib/iomgr/error.h"
|
||||
#include "src/core/lib/iomgr/exec_ctx.h"
|
||||
#include "src/core/lib/iomgr/executor.h"
|
||||
|
||||
namespace grpc {
|
||||
namespace internal {
|
||||
|
||||
void ServerCallbackCall::ScheduleOnDone(bool inline_ondone) {
|
||||
if (inline_ondone) {
|
||||
CallOnDone();
|
||||
} else {
|
||||
// Unlike other uses of closure, do not Ref or Unref here since at this
|
||||
// point, all the Ref'fing and Unref'fing is done for this call.
|
||||
grpc_core::ExecCtx exec_ctx;
|
||||
struct ClosureWithArg {
|
||||
grpc_closure closure;
|
||||
ServerCallbackCall* call;
|
||||
explicit ClosureWithArg(ServerCallbackCall* call_arg) : call(call_arg) {
|
||||
GRPC_CLOSURE_INIT(
|
||||
&closure,
|
||||
[](void* void_arg, grpc_error_handle) {
|
||||
ClosureWithArg* arg = static_cast<ClosureWithArg*>(void_arg);
|
||||
arg->call->CallOnDone();
|
||||
delete arg;
|
||||
},
|
||||
this, grpc_schedule_on_exec_ctx);
|
||||
}
|
||||
};
|
||||
ClosureWithArg* arg = new ClosureWithArg(this);
|
||||
grpc_core::Executor::Run(&arg->closure, absl::OkStatus());
|
||||
return;
|
||||
}
|
||||
RunAsync([this]() { CallOnDone(); });
|
||||
}
|
||||
|
||||
void ServerCallbackCall::CallOnCancel(ServerReactor* reactor) {
|
||||
if (reactor->InternalInlineable()) {
|
||||
reactor->OnCancel();
|
||||
} else {
|
||||
// Ref to make sure that the closure executes before the whole call gets
|
||||
// destructed, and Unref within the closure.
|
||||
Ref();
|
||||
grpc_core::ExecCtx exec_ctx;
|
||||
struct ClosureWithArg {
|
||||
grpc_closure closure;
|
||||
ServerCallbackCall* call;
|
||||
ServerReactor* reactor;
|
||||
ClosureWithArg(ServerCallbackCall* call_arg, ServerReactor* reactor_arg)
|
||||
: call(call_arg), reactor(reactor_arg) {
|
||||
GRPC_CLOSURE_INIT(
|
||||
&closure,
|
||||
[](void* void_arg, grpc_error_handle) {
|
||||
ClosureWithArg* arg = static_cast<ClosureWithArg*>(void_arg);
|
||||
arg->reactor->OnCancel();
|
||||
arg->call->MaybeDone();
|
||||
delete arg;
|
||||
},
|
||||
this, grpc_schedule_on_exec_ctx);
|
||||
}
|
||||
};
|
||||
ClosureWithArg* arg = new ClosureWithArg(this, reactor);
|
||||
grpc_core::Executor::Run(&arg->closure, absl::OkStatus());
|
||||
return;
|
||||
}
|
||||
Ref();
|
||||
RunAsync([this, reactor]() {
|
||||
reactor->OnCancel();
|
||||
MaybeDone();
|
||||
});
|
||||
}
|
||||
|
||||
} // namespace internal
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
load("//bazel:grpc_build_system.bzl", "grpc_generate_objc_one_off_targets", "grpc_objc_library")
|
||||
load("@build_bazel_rules_apple//apple:resources.bzl", "apple_resource_bundle")
|
||||
load("//bazel:grpc_build_system.bzl", "grpc_generate_objc_one_off_targets", "grpc_objc_library")
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
|
|
|
|||
|
|
@ -14,15 +14,15 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application")
|
||||
load("@build_bazel_rules_apple//apple:tvos.bzl", "tvos_application")
|
||||
load("@build_bazel_rules_apple//apple:watchos.bzl", "watchos_application", "watchos_extension")
|
||||
load(
|
||||
"//src/objective-c:grpc_objc_internal_library.bzl",
|
||||
"grpc_objc_examples_library",
|
||||
"local_objc_grpc_library",
|
||||
"proto_library_objc_wrapper",
|
||||
)
|
||||
load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application")
|
||||
load("@build_bazel_rules_apple//apple:tvos.bzl", "tvos_application")
|
||||
load("@build_bazel_rules_apple//apple:watchos.bzl", "watchos_application", "watchos_extension")
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
|
|
|
|||
|
|
@ -23,6 +23,11 @@ Each rule listed must be re-written for Google's internal build system, and
|
|||
each change must be ported from one to the other.
|
||||
"""
|
||||
|
||||
load("@build_bazel_rules_apple//apple:ios.bzl", "ios_unit_test")
|
||||
load(
|
||||
"@build_bazel_rules_apple//apple/testing/default_runner:ios_test_runner.bzl",
|
||||
"ios_test_runner",
|
||||
)
|
||||
load("@rules_proto//proto:defs.bzl", "proto_library")
|
||||
load(
|
||||
"//bazel:generate_objc.bzl",
|
||||
|
|
@ -32,11 +37,6 @@ load(
|
|||
"generate_objc_srcs",
|
||||
)
|
||||
load("//bazel:grpc_build_system.bzl", "grpc_objc_library")
|
||||
load("@build_bazel_rules_apple//apple:ios.bzl", "ios_unit_test")
|
||||
load(
|
||||
"@build_bazel_rules_apple//apple/testing/default_runner:ios_test_runner.bzl",
|
||||
"ios_test_runner",
|
||||
)
|
||||
|
||||
# The default device type for ios objc unit tests
|
||||
IOS_UNIT_TEST_DEVICE_TYPE = "iPhone 11"
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
load("@build_bazel_rules_apple//apple:macos.bzl", "macos_unit_test")
|
||||
load("@build_bazel_rules_apple//apple:resources.bzl", "apple_resource_bundle")
|
||||
load("@build_bazel_rules_apple//apple:tvos.bzl", "tvos_application", "tvos_unit_test")
|
||||
load("//bazel:grpc_build_system.bzl", "grpc_sh_test")
|
||||
load(
|
||||
"//src/objective-c:grpc_objc_internal_library.bzl",
|
||||
|
|
@ -22,9 +25,6 @@ load(
|
|||
"local_objc_grpc_library",
|
||||
"proto_library_objc_wrapper",
|
||||
)
|
||||
load("@build_bazel_rules_apple//apple:resources.bzl", "apple_resource_bundle")
|
||||
load("@build_bazel_rules_apple//apple:macos.bzl", "macos_unit_test")
|
||||
load("@build_bazel_rules_apple//apple:tvos.bzl", "tvos_application", "tvos_unit_test")
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
load("//bazel:python_rules.bzl", "py_grpc_library", "py_proto_library")
|
||||
load("@rules_proto//proto:defs.bzl", "proto_library")
|
||||
load("//bazel:grpc_build_system.bzl", "grpc_package", "grpc_proto_library")
|
||||
load("//bazel:python_rules.bzl", "py_grpc_library", "py_proto_library")
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
load("//bazel:python_rules.bzl", "py_grpc_library", "py_proto_library")
|
||||
load("//bazel:grpc_build_system.bzl", "grpc_package", "grpc_proto_library")
|
||||
load("//bazel:python_rules.bzl", "py_grpc_library", "py_proto_library")
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
load("@com_github_grpc_grpc//bazel:python_rules.bzl", "py_grpc_library", "py_proto_library")
|
||||
|
||||
# Copyright 2021 The gRPC Authors
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
|
|
@ -12,7 +14,6 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
load("@rules_proto//proto:defs.bzl", "proto_library")
|
||||
load("@com_github_grpc_grpc//bazel:python_rules.bzl", "py_grpc_library", "py_proto_library")
|
||||
|
||||
proto_library(
|
||||
name = "unary_stream_benchmark_proto",
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
load("//bazel:grpc_build_system.bzl", "grpc_cc_test", "grpc_package")
|
||||
load("//bazel:custom_exec_properties.bzl", "LARGE_MACHINE")
|
||||
load("//bazel:grpc_build_system.bzl", "grpc_cc_test", "grpc_package")
|
||||
load("//test/core/util:grpc_fuzzer.bzl", "grpc_proto_fuzzer")
|
||||
|
||||
licenses(["notice"])
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_package")
|
||||
load("//bazel:custom_exec_properties.bzl", "LARGE_MACHINE")
|
||||
load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_package")
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
load("//bazel:custom_exec_properties.bzl", "LARGE_MACHINE")
|
||||
load("//bazel:grpc_build_system.bzl", "grpc_cc_test", "grpc_package")
|
||||
load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer", "grpc_proto_fuzzer")
|
||||
load("//bazel:custom_exec_properties.bzl", "LARGE_MACHINE")
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
|
|
|
|||
|
|
@ -364,7 +364,6 @@ grpc_cc_test(
|
|||
tags = [
|
||||
"cpp_end2end_test",
|
||||
"no_test_ios",
|
||||
"surface_registered_method_lookup",
|
||||
],
|
||||
deps = [
|
||||
":end2end_test_lib",
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ grpc_cc_library(
|
|||
name = "xds_server",
|
||||
srcs = ["xds_server.cc"],
|
||||
hdrs = ["xds_server.h"],
|
||||
visibility = ["@grpc:xds_end2end_test_utils"],
|
||||
deps = [
|
||||
"//:gpr",
|
||||
"//:grpc",
|
||||
|
|
@ -45,6 +46,7 @@ grpc_cc_library(
|
|||
name = "xds_utils",
|
||||
srcs = ["xds_utils.cc"],
|
||||
hdrs = ["xds_utils.h"],
|
||||
visibility = ["@grpc:xds_end2end_test_utils"],
|
||||
deps = [
|
||||
":xds_server",
|
||||
"//src/proto/grpc/testing/xds/v3:cluster_proto",
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@ class MetadataExchangeTest
|
|||
: public OpenTelemetryPluginEnd2EndTest,
|
||||
public ::testing::WithParamInterface<TestScenario> {
|
||||
protected:
|
||||
void Init(absl::flat_hash_set<absl::string_view> metric_names,
|
||||
void Init(const std::vector<absl::string_view>& metric_names,
|
||||
bool enable_client_side_injector = true,
|
||||
std::map<std::string, std::string> labels_to_inject = {}) {
|
||||
const char* kBootstrap =
|
||||
|
|
@ -178,7 +178,7 @@ class MetadataExchangeTest
|
|||
}
|
||||
OpenTelemetryPluginEnd2EndTest::Init(std::move(
|
||||
Options()
|
||||
.set_metric_names(std::move(metric_names))
|
||||
.set_metric_names(metric_names)
|
||||
.add_plugin_option(std::make_unique<MeshLabelsPluginOption>(
|
||||
GetParam().GetTestResource().GetAttributes()))
|
||||
.set_labels_to_inject(std::move(labels_to_inject))
|
||||
|
|
|
|||
|
|
@ -1353,6 +1353,24 @@ TEST_F(OpenTelemetryPluginNPCMetricsTest,
|
|||
HistogramResultEq(kSum, kMin, kMax, kCount))))));
|
||||
}
|
||||
|
||||
TEST(OpenTelemetryPluginMetricsEnablingDisablingTest, TestEnableDisableAPIs) {
|
||||
grpc::internal::OpenTelemetryPluginBuilderImpl builder;
|
||||
// First disable all metrics
|
||||
builder.DisableAllMetrics();
|
||||
EXPECT_TRUE(builder.TestOnlyEnabledMetrics().empty());
|
||||
// Add in a few metrics
|
||||
builder.EnableMetrics(
|
||||
{"grpc.test.metric_1", "grpc.test.metric_2", "grpc.test.metric_3"});
|
||||
EXPECT_THAT(
|
||||
builder.TestOnlyEnabledMetrics(),
|
||||
::testing::UnorderedElementsAre(
|
||||
"grpc.test.metric_1", "grpc.test.metric_2", "grpc.test.metric_3"));
|
||||
// Now remove a few metrics
|
||||
builder.DisableMetrics({"grpc.test.metric_1", "grpc.test.metric_2"});
|
||||
EXPECT_THAT(builder.TestOnlyEnabledMetrics(),
|
||||
::testing::UnorderedElementsAre("grpc.test.metric_3"));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace testing
|
||||
} // namespace grpc
|
||||
|
|
|
|||
|
|
@ -199,9 +199,7 @@ OpenTelemetryPluginEnd2EndTest::BuildAndRegisterOpenTelemetryPlugin(
|
|||
std::make_shared<grpc::testing::MockMetricReader>();
|
||||
meter_provider->AddMetricReader(reader);
|
||||
ot_builder.DisableAllMetrics();
|
||||
for (const auto& metric_name : options.metric_names) {
|
||||
ot_builder.EnableMetric(metric_name);
|
||||
}
|
||||
ot_builder.EnableMetrics(options.metric_names);
|
||||
if (options.use_meter_provider) {
|
||||
auto meter_provider =
|
||||
std::make_shared<opentelemetry::sdk::metrics::MeterProvider>();
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ class OpenTelemetryPluginEnd2EndTest : public ::testing::Test {
|
|||
protected:
|
||||
struct Options {
|
||||
public:
|
||||
Options& set_metric_names(absl::flat_hash_set<absl::string_view> names) {
|
||||
Options& set_metric_names(std::vector<absl::string_view> names) {
|
||||
metric_names = std::move(names);
|
||||
return *this;
|
||||
}
|
||||
|
|
@ -119,7 +119,7 @@ class OpenTelemetryPluginEnd2EndTest : public ::testing::Test {
|
|||
return *this;
|
||||
}
|
||||
|
||||
absl::flat_hash_set<absl::string_view> metric_names;
|
||||
std::vector<absl::string_view> metric_names;
|
||||
// TODO(yashykt): opentelemetry::sdk::resource::Resource doesn't have a copy
|
||||
// assignment operator so wrapping it in a unique_ptr till it is fixed.
|
||||
std::unique_ptr<opentelemetry::sdk::resource::Resource> resource =
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
load("//bazel:custom_exec_properties.bzl", "LARGE_MACHINE")
|
||||
load("//bazel:grpc_build_system.bzl", "grpc_cc_binary", "grpc_cc_library", "grpc_cc_test", "grpc_package", "grpc_py_binary")
|
||||
load("//test/cpp/qps:qps_benchmark_script.bzl", "json_run_localhost_batch", "qps_json_driver_batch")
|
||||
load("//bazel:custom_exec_properties.bzl", "LARGE_MACHINE")
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
|
|
|
|||
|
|
@ -26,8 +26,8 @@
|
|||
"""Script to run qps benchmark."""
|
||||
|
||||
load("//bazel:grpc_build_system.bzl", "grpc_cc_test")
|
||||
load("//test/cpp/qps:qps_json_driver_scenarios.bzl", "QPS_JSON_DRIVER_SCENARIOS")
|
||||
load("//test/cpp/qps:json_run_localhost_scenarios.bzl", "JSON_RUN_LOCALHOST_SCENARIOS")
|
||||
load("//test/cpp/qps:qps_json_driver_scenarios.bzl", "QPS_JSON_DRIVER_SCENARIOS")
|
||||
|
||||
def add_suffix(name):
|
||||
# NOTE(https://github.com/grpc/grpc/issues/24178): Add the suffix to the name
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@
|
|||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
|
||||
load(":address_sorting.bzl", "address_sorting_cc_library")
|
||||
|
||||
package(
|
||||
default_visibility = ["//visibility:public"],
|
||||
features = [
|
||||
|
|
@ -36,8 +38,6 @@ package(
|
|||
],
|
||||
)
|
||||
|
||||
load(":address_sorting.bzl", "address_sorting_cc_library")
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
exports_files(["LICENSE"])
|
||||
|
|
|
|||
Loading…
Reference in New Issue