diff --git a/bazel/experiments.bzl b/bazel/experiments.bzl
index 627fb695b3ac2..a72bc4ddd874c 100644
--- a/bazel/experiments.bzl
+++ b/bazel/experiments.bzl
@@ -23,6 +23,7 @@ EXPERIMENT_ENABLES = {
"event_engine_application_callbacks": "event_engine_application_callbacks",
"event_engine_client": "event_engine_client",
"event_engine_dns": "event_engine_dns",
+ "event_engine_dns_non_client_channel": "event_engine_dns_non_client_channel",
"event_engine_listener": "event_engine_listener",
"free_large_allocator": "free_large_allocator",
"local_connector_secure": "local_connector_secure",
@@ -39,13 +40,13 @@ EXPERIMENT_ENABLES = {
"time_caching_in_party": "time_caching_in_party",
"trace_record_callops": "trace_record_callops",
"unconstrained_max_quota_buffer_size": "unconstrained_max_quota_buffer_size",
- "work_serializer_clears_time_cache": "work_serializer_clears_time_cache",
"work_serializer_dispatch": "work_serializer_dispatch",
}
EXPERIMENT_POLLERS = [
"event_engine_client",
"event_engine_dns",
+ "event_engine_dns_non_client_channel",
"event_engine_listener",
]
@@ -55,6 +56,7 @@ EXPERIMENTS = {
},
"off": {
"core_end2end_test": [
+ "event_engine_dns_non_client_channel",
"local_connector_secure",
"server_listener",
],
@@ -108,6 +110,7 @@ EXPERIMENTS = {
},
"off": {
"core_end2end_test": [
+ "event_engine_dns_non_client_channel",
"local_connector_secure",
"server_listener",
],
@@ -145,7 +148,7 @@ EXPERIMENTS = {
},
"off": {
"core_end2end_test": [
- "event_engine_client",
+ "event_engine_dns_non_client_channel",
"local_connector_secure",
"server_listener",
],
@@ -153,9 +156,6 @@ EXPERIMENTS = {
"tcp_frame_size_tuning",
"tcp_rcv_lowat",
],
- "event_engine_client_test": [
- "event_engine_client",
- ],
"flow_control_test": [
"multiping",
"tcp_frame_size_tuning",
@@ -174,6 +174,7 @@ EXPERIMENTS = {
"event_engine_dns",
],
"core_end2end_test": [
+ "event_engine_client",
"event_engine_listener",
"work_serializer_dispatch",
],
@@ -183,6 +184,9 @@ EXPERIMENTS = {
"cpp_lb_end2end_test": [
"pick_first_new",
],
+ "event_engine_client_test": [
+ "event_engine_client",
+ ],
"event_engine_listener_test": [
"event_engine_listener",
],
diff --git a/bazel/grpc_build_system.bzl b/bazel/grpc_build_system.bzl
index 50bd830ef21b3..a90113e2f2959 100644
--- a/bazel/grpc_build_system.bzl
+++ b/bazel/grpc_build_system.bzl
@@ -725,7 +725,7 @@ def grpc_package(name, visibility = "private", features = []):
features: The features to enable.
"""
if visibility == "tests":
- visibility = ["//test:__subpackages__"]
+ visibility = ["//test:__subpackages__", "//src/proto/grpc/testing:__subpackages__"]
elif visibility == "public":
visibility = ["//visibility:public"]
elif visibility == "private":
diff --git a/bazel/grpc_python_deps.bzl b/bazel/grpc_python_deps.bzl
index 44eca11f6719b..dbfff526a1114 100644
--- a/bazel/grpc_python_deps.bzl
+++ b/bazel/grpc_python_deps.bzl
@@ -38,9 +38,9 @@ def grpc_python_deps():
http_archive(
name = "cython",
build_file = "@com_github_grpc_grpc//third_party:cython.BUILD",
- sha256 = "2ec7d66d23d6da2328fb24f5c1bec6c63a59ec2e91027766ab904f417e1078aa",
- strip_prefix = "cython-3.0.11",
+ sha256 = "a2da56cc22be823acf49741b9aa3aa116d4f07fa8e8b35a3cb08b8447b37c607",
+ strip_prefix = "cython-0.29.35",
urls = [
- "https://github.com/cython/cython/archive/3.0.11.tar.gz",
+ "https://github.com/cython/cython/archive/0.29.35.tar.gz",
],
)
diff --git a/build_autogenerated.yaml b/build_autogenerated.yaml
index 3ae9dd5577c48..785776254f851 100644
--- a/build_autogenerated.yaml
+++ b/build_autogenerated.yaml
@@ -7481,6 +7481,7 @@ targets:
- name: cancel_after_invoke_test
gtest: true
build: test
+ run: false
language: c++
headers:
- src/core/ext/transport/chaotic_good/chaotic_good_transport.h
@@ -7858,6 +7859,7 @@ targets:
- name: cancel_with_status_test
gtest: true
build: test
+ run: false
language: c++
headers:
- src/core/ext/transport/chaotic_good/chaotic_good_transport.h
diff --git a/examples/android/binder/java/io/grpc/binder/cpp/README.md b/examples/android/binder/java/io/grpc/binder/cpp/README.md
deleted file mode 100644
index 8a9ba6ec26f7f..0000000000000
--- a/examples/android/binder/java/io/grpc/binder/cpp/README.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# gRPC-core BinderTransport example apps
-
-## Build Instruction
-
-1. Install Android SDK and NDK. Only NDK version >= 25 is supported. We tested against SDK Platform `33` and NDK `26.2.11394342`.
-2. Make sure Bazel is at least `7.0`. Use `export OVERRIDE_BAZEL_VERSION=7.3.1` to selected a supported version listed in `bazel/supported_versions.txt` if necessary.
-3. Point environment variables to install locations of SDK and NDK
- ```
- export ANDROID_HOME=$HOME/android-sdk
- export ANDROID_NDK_HOME=$HOME/android-sdk/ndk/26.2.11394342
- ```
-4. To build a fat APK that supports `x86_64`, `armv7`, and `arm64`:
- ```
- bazel build \
- --extra_toolchains=@androidndk//:all \
- --android_platforms=//bazel/platforms/android:x86_64,//bazel/platforms/android:armeabi-v7a,//bazel/platforms/android:arm64-v8a \
- --copt=-Wno-unknown-warning-option \
- //examples/android/binder/java/io/grpc/binder/cpp/exampleserver:app \
- //examples/android/binder/java/io/grpc/binder/cpp/exampleclient:app
- ```
-5. `adb install
- bazel-bin/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/app.apk`
-6. `adb install
- bazel-bin/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/app.apk`
diff --git a/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/AndroidManifest.xml b/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/AndroidManifest.xml
deleted file mode 100644
index 8dea1553faf1c..0000000000000
--- a/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/BUILD b/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/BUILD
deleted file mode 100644
index 8b11ebb383a4b..0000000000000
--- a/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/BUILD
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright 2021 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.
-
-cc_library(
- name = "jni_lib",
- srcs = ["native.cc"],
- linkopts = [
- "-ldl",
- "-llog",
- "-lm",
- "-Wl,--no-undefined",
- ],
- deps = [
- "//:grpc++",
- "//examples/protos:helloworld_cc_grpc",
- ],
- alwayslink = True,
-)
-
-android_library(
- name = "activity",
- srcs = [
- "ButtonPressHandler.java",
- "MainActivity.java",
- ],
- manifest = "AndroidManifest.xml",
- resource_files = glob(["res/**"]),
- deps = [
- ":jni_lib",
- "@binder_transport_android_helper//io/grpc/binder/cpp:connection_helper",
- ],
-)
-
-android_binary(
- name = "app",
- manifest = "AndroidManifest.xml",
- deps = [
- ":activity",
- ],
-)
diff --git a/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/ButtonPressHandler.java b/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/ButtonPressHandler.java
deleted file mode 100644
index ed9d11a404bd9..0000000000000
--- a/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/ButtonPressHandler.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package io.grpc.binder.cpp.exampleclient;
-
-import android.app.Application;
-
-public class ButtonPressHandler {
- static {
- System.loadLibrary("app");
- }
-
- public native String native_entry(Application application);
-
- public String onPressed(Application application) {
- return native_entry(application);
- }
-}
diff --git a/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/MainActivity.java b/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/MainActivity.java
deleted file mode 100644
index 3cbf70d1e651f..0000000000000
--- a/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/MainActivity.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package io.grpc.binder.cpp.exampleclient;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.util.Log;
-import android.widget.Button;
-import android.widget.TextView;
-
-/** Main class for the example app. */
-public class MainActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Log.v("Example", "hello, world");
-
- setContentView(R.layout.activity_main);
-
- Button clickMeButton = findViewById(R.id.clickMeButton);
- TextView exampleTextView = findViewById(R.id.exampleTextView);
-
- ButtonPressHandler h = new ButtonPressHandler();
-
- clickMeButton.setOnClickListener(
- v -> exampleTextView.setText(h.onPressed(getApplication())));
- }
-}
diff --git a/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/native.cc b/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/native.cc
deleted file mode 100644
index 3cb8637eb6988..0000000000000
--- a/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/native.cc
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2021 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.
-
-#include
-#include
-#include
-#include
-
-#include "examples/protos/helloworld.grpc.pb.h"
-#include "examples/protos/helloworld.pb.h"
-
-extern "C" JNIEXPORT jstring JNICALL
-Java_io_grpc_binder_cpp_exampleclient_ButtonPressHandler_native_1entry(
- JNIEnv* env, jobject /*this*/, jobject application) {
- // Lower the gRPC logging level, here it is just for demo and debugging
- // purpose.
- setenv("GRPC_VERBOSITY", "INFO", true);
- if (grpc::experimental::InitializeBinderChannelJavaClass(env)) {
- __android_log_print(ANDROID_LOG_INFO, "DemoClient",
- "InitializeBinderChannelJavaClass succeed");
- } else {
- __android_log_print(ANDROID_LOG_INFO, "DemoClient",
- "InitializeBinderChannelJavaClass failed");
- }
- static bool first = true;
- static std::shared_ptr channel;
- if (first) {
- first = false;
- JavaVM* jvm;
- {
- jint result = env->GetJavaVM(&jvm);
- assert(result == 0);
- }
- grpc::ChannelArguments ch_args;
- // This is not required since "grpc.io.action.BIND" is already the default.
- ch_args.SetString("grpc.binder.custom_android_intent_action_name",
- "grpc.io.action.BIND");
- channel = grpc::experimental::CreateCustomBinderChannel(
- env, application, "io.grpc.binder.cpp.exampleserver",
- "io.grpc.binder.cpp.exampleserver.ExportedEndpointService",
- std::make_shared<
- grpc::experimental::binder::SameSignatureSecurityPolicy>(
- jvm, application),
- ch_args);
- return env->NewStringUTF("Clicked 1 time, channel created");
- } else {
- auto stub = helloworld::Greeter::NewStub(channel);
- grpc::ClientContext context;
- helloworld::HelloRequest request;
- helloworld::HelloReply response;
- request.set_name("BinderTransportClient");
- grpc::Status status = stub->SayHello(&context, request, &response);
- if (status.ok()) {
- return env->NewStringUTF(response.message().c_str());
- }
- return env->NewStringUTF(
- std::string("Clicked more than 1 time. Status not ok " +
- std::to_string(status.error_code()))
- .c_str());
- }
-}
diff --git a/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/res/layout/activity_main.xml b/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/res/layout/activity_main.xml
deleted file mode 100644
index e866d8df89472..0000000000000
--- a/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/res/layout/activity_main.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
diff --git a/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/res/values/strings.xml b/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/res/values/strings.xml
deleted file mode 100644
index 7593624fa8428..0000000000000
--- a/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/res/values/strings.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- Run example
- 🤔
-
diff --git a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/AndroidManifest.xml b/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/AndroidManifest.xml
deleted file mode 100644
index fe2cd2e7d9504..0000000000000
--- a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/AndroidManifest.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/AndroidManifest_endpoint.xml b/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/AndroidManifest_endpoint.xml
deleted file mode 100644
index a9c9d5c4f68ea..0000000000000
--- a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/AndroidManifest_endpoint.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
diff --git a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/BUILD b/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/BUILD
deleted file mode 100644
index b4e88ebc90ac1..0000000000000
--- a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/BUILD
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright 2021 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.
-
-cc_library(
- name = "jni_lib",
- srcs = ["native.cc"],
- linkopts = [
- "-ldl",
- "-llog",
- "-lm",
- "-Wl,--no-undefined",
- ],
- deps = [
- "//:grpc++",
- "//examples/protos:helloworld_cc_grpc",
- ],
- alwayslink = True,
-)
-
-android_library(
- name = "activity",
- srcs = [
- "ButtonPressHandler.java",
- "MainActivity.java",
- ],
- manifest = "AndroidManifest.xml",
- resource_files = glob(["res/**"]),
- deps = [
- ":endpoint",
- ":jni_lib",
- ],
-)
-
-android_library(
- name = "endpoint",
- srcs = ["ExportedEndpointService.java"],
- exports_manifest = True,
- manifest = "AndroidManifest_endpoint.xml",
- deps = [
- "@binder_transport_android_helper//io/grpc/binder/cpp:connection_helper",
- ],
-)
-
-android_binary(
- name = "app",
- manifest = "AndroidManifest.xml",
- deps = [
- ":activity",
- ],
-)
diff --git a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/ButtonPressHandler.java b/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/ButtonPressHandler.java
deleted file mode 100644
index 34d38ccf58a43..0000000000000
--- a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/ButtonPressHandler.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package io.grpc.binder.cpp.exampleserver;
-
-import android.app.Application;
-
-public class ButtonPressHandler {
- static {
- System.loadLibrary("app");
- }
-
- public String onPressed(Application application) {
- return "Server Button Pressed";
- }
-}
diff --git a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/ExportedEndpointService.java b/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/ExportedEndpointService.java
deleted file mode 100644
index 0ca908e78fd6c..0000000000000
--- a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/ExportedEndpointService.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package io.grpc.binder.cpp.exampleserver;
-
-import android.app.Service;
-import android.content.Intent;
-import android.os.IBinder;
-import android.content.Context;
-import io.grpc.binder.cpp.GrpcCppServerBuilder;
-
-/** Exposes gRPC services running in the main process */
-public final class ExportedEndpointService extends Service {
- static {
- System.loadLibrary("app");
- }
-
- public ExportedEndpointService() {
- init_grpc_server(this);
- }
-
- @Override
- public IBinder onBind(Intent intent) {
- // The argument should match the URI passed into grpc::ServerBuilder::AddListeningPort
- return GrpcCppServerBuilder.GetEndpointBinder("binder:example.service");
- }
-
- public native void init_grpc_server(Context context);
-}
diff --git a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/MainActivity.java b/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/MainActivity.java
deleted file mode 100644
index d252e5f2bd3bb..0000000000000
--- a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/MainActivity.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package io.grpc.binder.cpp.exampleserver;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.util.Log;
-import android.widget.Button;
-import android.widget.TextView;
-import io.grpc.binder.cpp.exampleserver.R;
-
-/** Main class for the example app. */
-public class MainActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Log.v("Example", "hello, world");
-
- setContentView(R.layout.activity_main);
-
- Button clickMeButton = findViewById(R.id.clickMeButton);
- TextView exampleTextView = findViewById(R.id.exampleTextView);
-
- ButtonPressHandler h = new ButtonPressHandler();
-
- clickMeButton.setOnClickListener(
- v -> exampleTextView.setText(h.onPressed(getApplication())));
- }
-}
diff --git a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/native.cc b/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/native.cc
deleted file mode 100644
index 0f220c1066c3d..0000000000000
--- a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/native.cc
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2021 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.
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include "examples/protos/helloworld.grpc.pb.h"
-#include "examples/protos/helloworld.pb.h"
-
-namespace {
-class GreeterService : public helloworld::Greeter::Service {
- public:
- grpc::Status SayHello(grpc::ServerContext*,
- const helloworld::HelloRequest* request,
- helloworld::HelloReply* response) override {
- __android_log_print(ANDROID_LOG_INFO, "DemoServer", "Line number %d",
- __LINE__);
- __android_log_print(ANDROID_LOG_INFO, "DemoServer", "Got hello request: %s",
- request->name().c_str());
- response->set_message("Hi, " + request->name());
- return grpc::Status::OK;
- }
-};
-
-} // namespace
-
-extern "C" JNIEXPORT void JNICALL
-Java_io_grpc_binder_cpp_exampleserver_ExportedEndpointService_init_1grpc_1server(
- JNIEnv* env, jobject /*this*/, jobject context) {
- // Lower the gRPC logging level, here it is just for demo and debugging
- // purpose.
- setenv("GRPC_VERBOSITY", "INFO", true);
- __android_log_print(ANDROID_LOG_INFO, "DemoServer", "Line number %d",
- __LINE__);
- static std::unique_ptr server = nullptr;
-
- if (server != nullptr) {
- // Already initiated
- return;
- }
-
- if (grpc::experimental::InitializeBinderChannelJavaClass(env)) {
- __android_log_print(ANDROID_LOG_INFO, "DemoServer",
- "InitializeBinderChannelJavaClass succeed");
- } else {
- __android_log_print(ANDROID_LOG_INFO, "DemoServer",
- "InitializeBinderChannelJavaClass failed");
- }
-
- static GreeterService service;
- grpc::ServerBuilder server_builder;
- server_builder.RegisterService(&service);
-
- JavaVM* jvm;
- {
- jint result = env->GetJavaVM(&jvm);
- assert(result == 0);
- }
- server_builder.AddListeningPort(
- "binder:example.service",
- grpc::experimental::BinderServerCredentials(
- std::make_shared<
- grpc::experimental::binder::SameSignatureSecurityPolicy>(
- jvm, context)));
-
- server = server_builder.BuildAndStart();
-}
diff --git a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/res/layout/activity_main.xml b/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/res/layout/activity_main.xml
deleted file mode 100644
index e866d8df89472..0000000000000
--- a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/res/layout/activity_main.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
diff --git a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/res/values/strings.xml b/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/res/values/strings.xml
deleted file mode 100644
index 7593624fa8428..0000000000000
--- a/examples/android/binder/java/io/grpc/binder/cpp/exampleserver/res/values/strings.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- Run example
- 🤔
-
diff --git a/examples/cpp/unix_abstract_sockets/README.md b/examples/cpp/unix_abstract_sockets/README.md
index 482a4a64273b2..c4eb59bdd14d8 100644
--- a/examples/cpp/unix_abstract_sockets/README.md
+++ b/examples/cpp/unix_abstract_sockets/README.md
@@ -3,7 +3,7 @@ gRPC Unix Abstract Socket Example
This example shows how to use gRPC with Unix domain sockets in the abstract namespace.
gRPC uses the [`unix-abstract:abstract_path`](https://github.com/grpc/grpc/blob/c6844099218b147b0e374843e0a26745adc61ddb/doc/naming.md?plain=1#L44-L50) URI scheme to support this.
-In this example, an socket with an embedded null character `grpc%00abstract` is created.
+In this example, a socket with an embedded null character `grpc%00abstract` is created.
## Build and run the example
diff --git a/examples/cpp/xds/README.md b/examples/cpp/xds/README.md
index 6d28838cab17f..a0b0f2661515a 100644
--- a/examples/cpp/xds/README.md
+++ b/examples/cpp/xds/README.md
@@ -6,7 +6,7 @@ This xDS example builds on the [Hello World Example](https://github.com/grpc/grp
The client takes two command-line arguments -
* target - By default, the client tries to connect to the xDS "xds:///helloworld:50051" and gRPC would use xDS to resolve this target and connect to the server backend. This can be overridden to change the target.
-* secure - Bool value, defaults to true. When this is set, [XdsCredentials](https://github.com/grpc/proposal/blob/master/A29-xds-tls-security.md) will be used with a fallback on `InsecureChannelCredentials`. If unset, `InsecureChannelCredentials` will be used.
+* xds-creds - Bool value, defaults to true. When this is set, [XdsCredentials](https://github.com/grpc/proposal/blob/master/A29-xds-tls-security.md) will be used with a fallback on `InsecureChannelCredentials`. If unset, `InsecureChannelCredentials` will be used.
The server takes three command-line arguments -
* port - Port on which the Hello World service is run. Defaults to 50051.
diff --git a/examples/cpp/xds/xds_greeter_client.cc b/examples/cpp/xds/xds_greeter_client.cc
index d60e3f17d81ab..5a6728873b88c 100644
--- a/examples/cpp/xds/xds_greeter_client.cc
+++ b/examples/cpp/xds/xds_greeter_client.cc
@@ -34,7 +34,7 @@
#endif
ABSL_FLAG(std::string, target, "xds:///helloworld:50051", "Target string");
-ABSL_FLAG(bool, secure, true, "Secure mode");
+ABSL_FLAG(bool, xds_creds, true, "Secure mode");
using grpc::Channel;
using grpc::ClientContext;
@@ -98,7 +98,7 @@ int main(int argc, char** argv) {
absl::ParseCommandLine(argc, argv);
GreeterClient greeter(grpc::CreateChannel(
absl::GetFlag(FLAGS_target),
- absl::GetFlag(FLAGS_secure)
+ absl::GetFlag(FLAGS_xds_creds)
? grpc::XdsCredentials(grpc::InsecureChannelCredentials())
: grpc::InsecureChannelCredentials()));
std::string user("world");
diff --git a/src/core/BUILD b/src/core/BUILD
index 5f6adbeb89819..a3e790fb9f18c 100644
--- a/src/core/BUILD
+++ b/src/core/BUILD
@@ -2371,9 +2371,11 @@ grpc_cc_library(
hdrs = ["lib/event_engine/utils.h"],
external_deps = [
"absl/log:check",
+ "absl/status:statusor",
"absl/strings",
],
deps = [
+ "notification",
"time",
"//:event_engine_base_hdrs",
"//:gpr_platform",
@@ -7647,8 +7649,11 @@ grpc_cc_library(
"connection_quota",
"error",
"error_utils",
+ "event_engine_common",
"event_engine_extensions",
"event_engine_query_extensions",
+ "event_engine_tcp_socket_utils",
+ "event_engine_utils",
"grpc_insecure_credentials",
"handshaker_registry",
"iomgr_fwd",
diff --git a/src/core/ext/transport/chaotic_good/server_transport.cc b/src/core/ext/transport/chaotic_good/server_transport.cc
index b166d79380fda..b28f99cda92f6 100644
--- a/src/core/ext/transport/chaotic_good/server_transport.cc
+++ b/src/core/ext/transport/chaotic_good/server_transport.cc
@@ -397,6 +397,7 @@ void ChaoticGoodServerTransport::AbortWithError() {
// Close all the available pipes.
outgoing_frames_.MarkClosed();
ReleasableMutexLock lock(&mu_);
+ aborted_with_error_ = true;
StreamMap stream_map = std::move(stream_map_);
stream_map_.clear();
state_tracker_.SetState(GRPC_CHANNEL_SHUTDOWN,
@@ -439,6 +440,9 @@ absl::Status ChaoticGoodServerTransport::NewStream(
GRPC_TRACE_LOG(chaotic_good, INFO)
<< "CHAOTIC_GOOD " << this << " NewStream " << stream_id;
MutexLock lock(&mu_);
+ if (aborted_with_error_) {
+ return absl::UnavailableError("Transport closed");
+ }
auto it = stream_map_.find(stream_id);
if (it != stream_map_.end()) {
return absl::InternalError("Stream already exists");
diff --git a/src/core/ext/transport/chaotic_good/server_transport.h b/src/core/ext/transport/chaotic_good/server_transport.h
index 49fd5ae015fdb..9148e5dca8be3 100644
--- a/src/core/ext/transport/chaotic_good/server_transport.h
+++ b/src/core/ext/transport/chaotic_good/server_transport.h
@@ -143,6 +143,7 @@ class ChaoticGoodServerTransport final : public ServerTransport {
Mutex mu_;
// Map of stream incoming server frames, key is stream_id.
StreamMap stream_map_ ABSL_GUARDED_BY(mu_);
+ bool aborted_with_error_ ABSL_GUARDED_BY(mu_) = false;
uint32_t last_seen_new_stream_id_ = 0;
RefCountedPtr party_;
ConnectivityStateTracker state_tracker_ ABSL_GUARDED_BY(mu_){
diff --git a/src/core/ext/transport/chttp2/server/chttp2_server.cc b/src/core/ext/transport/chttp2/server/chttp2_server.cc
index ed7fb191614f6..b391ed3e5d0bf 100644
--- a/src/core/ext/transport/chttp2/server/chttp2_server.cc
+++ b/src/core/ext/transport/chttp2/server/chttp2_server.cc
@@ -59,6 +59,9 @@
#include "src/core/lib/event_engine/channel_args_endpoint_config.h"
#include "src/core/lib/event_engine/extensions/supports_fd.h"
#include "src/core/lib/event_engine/query_extensions.h"
+#include "src/core/lib/event_engine/resolved_address_internal.h"
+#include "src/core/lib/event_engine/tcp_socket_utils.h"
+#include "src/core/lib/event_engine/utils.h"
#include "src/core/lib/iomgr/closure.h"
#include "src/core/lib/iomgr/endpoint.h"
#include "src/core/lib/iomgr/event_engine_shims/endpoint.h"
@@ -123,7 +126,8 @@ Timestamp GetConnectionDeadline(const ChannelArgs& args) {
class Chttp2ServerListener : public Server::ListenerInterface {
public:
- static grpc_error_handle Create(Server* server, grpc_resolved_address* addr,
+ static grpc_error_handle Create(Server* server,
+ const EventEngine::ResolvedAddress& addr,
const ChannelArgs& args, int* port_num);
static grpc_error_handle CreateWithAcceptor(Server* server, const char* name,
@@ -704,10 +708,9 @@ void Chttp2ServerListener::ActiveConnection::OnDrainGraceTimeExpiry() {
// Chttp2ServerListener
//
-grpc_error_handle Chttp2ServerListener::Create(Server* server,
- grpc_resolved_address* addr,
- const ChannelArgs& args,
- int* port_num) {
+grpc_error_handle Chttp2ServerListener::Create(
+ Server* server, const EventEngine::ResolvedAddress& addr,
+ const ChannelArgs& args, int* port_num) {
// Create Chttp2ServerListener.
OrphanablePtr listener =
MakeOrphanable(server, args,
@@ -719,18 +722,24 @@ grpc_error_handle Chttp2ServerListener::Create(Server* server,
&listener->tcp_server_shutdown_complete_, ChannelArgsEndpointConfig(args),
OnAccept, listener.get(), &listener->tcp_server_);
if (!error.ok()) return error;
+ // TODO(yijiem): remove this conversion when we remove all
+ // grpc_resolved_address usages.
+ grpc_resolved_address iomgr_addr =
+ grpc_event_engine::experimental::CreateGRPCResolvedAddress(addr);
if (listener->config_fetcher_ != nullptr) {
- listener->resolved_address_ = *addr;
+ listener->resolved_address_ = iomgr_addr;
// TODO(yashykt): Consider binding so as to be able to return the port
// number.
} else {
- error = grpc_tcp_server_add_port(listener->tcp_server_, addr, port_num);
+ error =
+ grpc_tcp_server_add_port(listener->tcp_server_, &iomgr_addr, port_num);
if (!error.ok()) return error;
}
// Create channelz node.
if (args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
.value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
- auto string_address = grpc_sockaddr_to_uri(addr);
+ auto string_address =
+ grpc_event_engine::experimental::ResolvedAddressToString(addr);
if (!string_address.ok()) {
return GRPC_ERROR_CREATE(string_address.status().ToString());
}
@@ -962,7 +971,8 @@ void Chttp2ServerListener::Orphan() {
// New ChttpServerListener used if experiment "server_listener" is enabled
class NewChttp2ServerListener : public Server::ListenerInterface {
public:
- static grpc_error_handle Create(Server* server, grpc_resolved_address* addr,
+ static grpc_error_handle Create(Server* server,
+ EventEngine::ResolvedAddress& addr,
const ChannelArgs& args, int* port_num);
static grpc_error_handle CreateWithAcceptor(Server* server, const char* name,
@@ -1376,10 +1386,9 @@ void NewChttp2ServerListener::NewActiveConnection::
// NewChttp2ServerListener
//
-grpc_error_handle NewChttp2ServerListener::Create(Server* server,
- grpc_resolved_address* addr,
- const ChannelArgs& args,
- int* port_num) {
+grpc_error_handle NewChttp2ServerListener::Create(
+ Server* server, EventEngine::ResolvedAddress& addr, const ChannelArgs& args,
+ int* port_num) {
// Create NewChttp2ServerListener.
OrphanablePtr listener =
MakeOrphanable(server, args);
@@ -1390,22 +1399,28 @@ grpc_error_handle NewChttp2ServerListener::Create(Server* server,
&listener->tcp_server_shutdown_complete_, ChannelArgsEndpointConfig(args),
OnAccept, listener.get(), &listener->tcp_server_);
if (!error.ok()) return error;
+ // TODO(yijiem): remove this conversion when we remove all
+ // grpc_resolved_address usages.
+ grpc_resolved_address iomgr_addr =
+ grpc_event_engine::experimental::CreateGRPCResolvedAddress(addr);
if (server->config_fetcher() != nullptr) {
// TODO(yashykt): Consider binding so as to be able to return the port
// number.
- listener->resolved_address_ = *addr;
+ listener->resolved_address_ = iomgr_addr;
{
MutexLock lock(&listener->mu_);
listener->add_port_on_start_ = true;
}
} else {
- error = grpc_tcp_server_add_port(listener->tcp_server_, addr, port_num);
+ error =
+ grpc_tcp_server_add_port(listener->tcp_server_, &iomgr_addr, port_num);
if (!error.ok()) return error;
}
// Create channelz node.
if (args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
.value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
- auto string_address = grpc_sockaddr_to_uri(addr);
+ auto string_address =
+ grpc_event_engine::experimental::ResolvedAddressToString(addr);
if (!string_address.ok()) {
return GRPC_ERROR_CREATE(string_address.status().ToString());
}
@@ -1592,41 +1607,56 @@ grpc_error_handle Chttp2ServerAddPort(Server* server, const char* addr,
}
}
*port_num = -1;
- absl::StatusOr> resolved_or;
+ absl::StatusOr> results =
+ std::vector();
std::vector error_list;
std::string parsed_addr = URI::PercentDecode(addr);
absl::string_view parsed_addr_unprefixed{parsed_addr};
// Using lambda to avoid use of goto.
grpc_error_handle error = [&]() {
grpc_error_handle error;
- if (absl::ConsumePrefix(&parsed_addr_unprefixed, kUnixUriPrefix)) {
- resolved_or = grpc_resolve_unix_domain_address(parsed_addr_unprefixed);
- } else if (absl::ConsumePrefix(&parsed_addr_unprefixed,
- kUnixAbstractUriPrefix)) {
- resolved_or =
- grpc_resolve_unix_abstract_domain_address(parsed_addr_unprefixed);
- } else if (absl::ConsumePrefix(&parsed_addr_unprefixed, kVSockUriPrefix)) {
- resolved_or = grpc_resolve_vsock_address(parsed_addr_unprefixed);
+ if (absl::ConsumePrefix(&parsed_addr_unprefixed, kUnixUriPrefix) ||
+ absl::ConsumePrefix(&parsed_addr_unprefixed, kUnixAbstractUriPrefix) ||
+ absl::ConsumePrefix(&parsed_addr_unprefixed, kVSockUriPrefix)) {
+ absl::StatusOr result =
+ grpc_event_engine::experimental::URIToResolvedAddress(parsed_addr);
+ GRPC_RETURN_IF_ERROR(result.status());
+ results->push_back(*result);
} else {
- resolved_or =
- GetDNSResolver()->LookupHostnameBlocking(parsed_addr, "https");
- }
- if (!resolved_or.ok()) {
- return absl_status_to_grpc_error(resolved_or.status());
+ if (IsEventEngineDnsNonClientChannelEnabled()) {
+ absl::StatusOr> ee_resolver =
+ args.GetObjectRef()->GetDNSResolver(
+ EventEngine::DNSResolver::ResolverOptions());
+ GRPC_RETURN_IF_ERROR(ee_resolver.status());
+ results = grpc_event_engine::experimental::LookupHostnameBlocking(
+ ee_resolver->get(), parsed_addr, "https");
+ } else {
+ // TODO(yijiem): Remove this after event_engine_dns_non_client_channel
+ // is fully enabled.
+ absl::StatusOr> iomgr_results =
+ GetDNSResolver()->LookupHostnameBlocking(parsed_addr, "https");
+ GRPC_RETURN_IF_ERROR(iomgr_results.status());
+ for (const auto& addr : *iomgr_results) {
+ results->push_back(
+ grpc_event_engine::experimental::CreateResolvedAddress(addr));
+ }
+ }
}
+ GRPC_RETURN_IF_ERROR(results.status());
// Create a listener for each resolved address.
- for (auto& addr : *resolved_or) {
+ for (EventEngine::ResolvedAddress& addr : *results) {
// If address has a wildcard port (0), use the same port as a previous
// listener.
- if (*port_num != -1 && grpc_sockaddr_get_port(&addr) == 0) {
- grpc_sockaddr_set_port(&addr, *port_num);
+ if (*port_num != -1 &&
+ grpc_event_engine::experimental::ResolvedAddressGetPort(addr) == 0) {
+ grpc_event_engine::experimental::ResolvedAddressSetPort(addr,
+ *port_num);
}
int port_temp = -1;
if (IsServerListenerEnabled()) {
- error =
- NewChttp2ServerListener::Create(server, &addr, args, &port_temp);
+ error = NewChttp2ServerListener::Create(server, addr, args, &port_temp);
} else {
- error = Chttp2ServerListener::Create(server, &addr, args, &port_temp);
+ error = Chttp2ServerListener::Create(server, addr, args, &port_temp);
}
if (!error.ok()) {
error_list.push_back(error);
@@ -1638,17 +1668,17 @@ grpc_error_handle Chttp2ServerAddPort(Server* server, const char* addr,
}
}
}
- if (error_list.size() == resolved_or->size()) {
+ if (error_list.size() == results->size()) {
std::string msg = absl::StrFormat(
"No address added out of total %" PRIuPTR " resolved for '%s'",
- resolved_or->size(), addr);
+ results->size(), addr);
return GRPC_ERROR_CREATE_REFERENCING(msg.c_str(), error_list.data(),
error_list.size());
} else if (!error_list.empty()) {
- std::string msg = absl::StrFormat(
- "Only %" PRIuPTR " addresses added out of total %" PRIuPTR
- " resolved",
- resolved_or->size() - error_list.size(), resolved_or->size());
+ std::string msg =
+ absl::StrFormat("Only %" PRIuPTR
+ " addresses added out of total %" PRIuPTR " resolved",
+ results->size() - error_list.size(), results->size());
error = GRPC_ERROR_CREATE_REFERENCING(msg.c_str(), error_list.data(),
error_list.size());
LOG(INFO) << "WARNING: " << StatusToString(error);
diff --git a/src/core/lib/event_engine/extensions/supports_fd.h b/src/core/lib/event_engine/extensions/supports_fd.h
index c7a1bfdcd4fcb..070bce175de2b 100644
--- a/src/core/lib/event_engine/extensions/supports_fd.h
+++ b/src/core/lib/event_engine/extensions/supports_fd.h
@@ -119,6 +119,23 @@ class EventEngineSupportsFdExtension {
virtual std::unique_ptr CreateEndpointFromFd(
int fd, const EndpointConfig& config) = 0;
+ /// Creates an EventEngine::Endpoint from a file descriptor that is configured
+ /// and bound locally but not yet connected to a remote peer. Returns a
+ /// connection handle to cancel the connection attempt if needed. Created
+ /// endpoint will be returned through `on_connect` callback.
+ /// \a fd - The socket file descriptor.
+ /// \a on_connect - The callback to invoke once fd is connected to peer.
+ /// \a addr - The remote peer to connect to. This should be the mapped peer
+ /// address returned when creating a new socket.
+ /// \a config - Additional configuration to be applied to the endpoint.
+ /// \a memory_allocator - The endpoint may use the provided memory allocator
+ /// to track memory allocations.
+ /// \a timeout - The timeout to use for the connection attempt.
+ virtual EventEngine::ConnectionHandle CreateEndpointFromUnconnectedFd(
+ int fd, EventEngine::OnConnectCallback on_connect,
+ const EventEngine::ResolvedAddress& addr, const EndpointConfig& config,
+ MemoryAllocator memory_allocator, EventEngine::Duration timeout) = 0;
+
/// Called when the posix listener has accepted a new client connection.
/// \a listener_fd - The listening socket fd that accepted the new client
/// connection.
diff --git a/src/core/lib/event_engine/posix_engine/posix_engine.cc b/src/core/lib/event_engine/posix_engine/posix_engine.cc
index f2275975b0d37..1c7f6df10b1b9 100644
--- a/src/core/lib/event_engine/posix_engine/posix_engine.cc
+++ b/src/core/lib/event_engine/posix_engine/posix_engine.cc
@@ -238,14 +238,16 @@ void AsyncConnect::OnWritable(absl::Status status)
}
}
-EventEngine::ConnectionHandle PosixEventEngine::ConnectInternal(
- PosixSocketWrapper sock, OnConnectCallback on_connect, ResolvedAddress addr,
- MemoryAllocator&& allocator, const PosixTcpOptions& options,
- Duration timeout) {
+EventEngine::ConnectionHandle
+PosixEventEngine::CreateEndpointFromUnconnectedFdInternal(
+ int fd, EventEngine::OnConnectCallback on_connect,
+ const EventEngine::ResolvedAddress& addr,
+ const PosixTcpOptions& tcp_options, MemoryAllocator memory_allocator,
+ EventEngine::Duration timeout) {
int err;
int connect_errno;
do {
- err = connect(sock.Fd(), addr.address(), addr.size());
+ err = connect(fd, addr.address(), addr.size());
} while (err < 0 && errno == EINTR);
connect_errno = (err < 0) ? errno : 0;
@@ -261,16 +263,15 @@ EventEngine::ConnectionHandle PosixEventEngine::ConnectInternal(
std::string name = absl::StrCat("tcp-client:", addr_uri.value());
PosixEventPoller* poller = poller_manager_->Poller();
EventHandle* handle =
- poller->CreateHandle(sock.Fd(), name, poller->CanTrackErrors());
+ poller->CreateHandle(fd, name, poller->CanTrackErrors());
if (connect_errno == 0) {
- // Connection already succeded. Return 0 to discourage any cancellation
+ // Connection already succeeded. Return 0 to discourage any cancellation
// attempts.
Run([on_connect = std::move(on_connect),
- ep = CreatePosixEndpoint(handle, nullptr, shared_from_this(),
- std::move(allocator), options)]() mutable {
- on_connect(std::move(ep));
- });
+ ep = CreatePosixEndpoint(
+ handle, nullptr, shared_from_this(), std::move(memory_allocator),
+ tcp_options)]() mutable { on_connect(std::move(ep)); });
return EventEngine::ConnectionHandle::kInvalid;
}
if (connect_errno != EWOULDBLOCK && connect_errno != EINPROGRESS) {
@@ -288,9 +289,10 @@ EventEngine::ConnectionHandle PosixEventEngine::ConnectInternal(
// Connection is still in progress.
int64_t connection_id =
last_connection_id_.fetch_add(1, std::memory_order_acq_rel);
- AsyncConnect* ac = new AsyncConnect(
- std::move(on_connect), shared_from_this(), executor_.get(), handle,
- std::move(allocator), options, addr_uri.value(), connection_id);
+ AsyncConnect* ac =
+ new AsyncConnect(std::move(on_connect), shared_from_this(),
+ executor_.get(), handle, std::move(memory_allocator),
+ tcp_options, addr_uri.value(), connection_id);
int shard_number = connection_id % connection_shards_.size();
struct ConnectionShard* shard = &connection_shards_[shard_number];
{
@@ -635,14 +637,29 @@ EventEngine::ConnectionHandle PosixEventEngine::Connect(
status = socket.status()]() mutable { on_connect(status); });
return EventEngine::ConnectionHandle::kInvalid;
}
- return ConnectInternal((*socket).sock, std::move(on_connect),
- (*socket).mapped_target_addr,
- std::move(memory_allocator), options, timeout);
+ return CreateEndpointFromUnconnectedFdInternal(
+ (*socket).sock.Fd(), std::move(on_connect), (*socket).mapped_target_addr,
+ options, std::move(memory_allocator), timeout);
#else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
grpc_core::Crash("EventEngine::Connect is not supported on this platform");
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
}
+EventEngine::ConnectionHandle PosixEventEngine::CreateEndpointFromUnconnectedFd(
+ int fd, EventEngine::OnConnectCallback on_connect,
+ const EventEngine::ResolvedAddress& addr, const EndpointConfig& config,
+ MemoryAllocator memory_allocator, EventEngine::Duration timeout) {
+#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
+ return CreateEndpointFromUnconnectedFdInternal(
+ fd, std::move(on_connect), addr, TcpOptionsFromEndpointConfig(config),
+ std::move(memory_allocator), timeout);
+#else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
+ grpc_core::Crash(
+ "EventEngine::CreateEndpointFromUnconnectedFd is not supported on this "
+ "platform");
+#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
+}
+
std::unique_ptr
PosixEventEngine::CreatePosixEndpointFromFd(int fd,
const EndpointConfig& config,
diff --git a/src/core/lib/event_engine/posix_engine/posix_engine.h b/src/core/lib/event_engine/posix_engine/posix_engine.h
index 82be0bdd0e5a2..63a142a11f281 100644
--- a/src/core/lib/event_engine/posix_engine/posix_engine.h
+++ b/src/core/lib/event_engine/posix_engine/posix_engine.h
@@ -174,6 +174,11 @@ class PosixEventEngine final : public PosixEventEngineWithFdSupport,
std::unique_ptr CreateEndpointFromFd(
int fd, const EndpointConfig& config) override;
+ ConnectionHandle CreateEndpointFromUnconnectedFd(
+ int fd, EventEngine::OnConnectCallback on_connect,
+ const EventEngine::ResolvedAddress& addr, const EndpointConfig& config,
+ MemoryAllocator memory_allocator, EventEngine::Duration timeout) override;
+
absl::StatusOr> CreateListener(
Listener::AcceptCallback on_accept,
absl::AnyInvocable on_shutdown,
@@ -235,12 +240,10 @@ class PosixEventEngine final : public PosixEventEngineWithFdSupport,
static void PollerWorkInternal(
std::shared_ptr poller_manager);
- ConnectionHandle ConnectInternal(
- grpc_event_engine::experimental::PosixSocketWrapper sock,
- OnConnectCallback on_connect, ResolvedAddress addr,
- MemoryAllocator&& allocator,
- const grpc_event_engine::experimental::PosixTcpOptions& options,
- Duration timeout);
+ ConnectionHandle CreateEndpointFromUnconnectedFdInternal(
+ int fd, EventEngine::OnConnectCallback on_connect,
+ const EventEngine::ResolvedAddress& addr, const PosixTcpOptions& options,
+ MemoryAllocator memory_allocator, EventEngine::Duration timeout);
void OnConnectFinishInternal(int connection_handle);
diff --git a/src/core/lib/event_engine/resolved_address.cc b/src/core/lib/event_engine/resolved_address.cc
index 1a41663bedd57..2672923f8c214 100644
--- a/src/core/lib/event_engine/resolved_address.cc
+++ b/src/core/lib/event_engine/resolved_address.cc
@@ -48,6 +48,9 @@ EventEngine::ResolvedAddress CreateResolvedAddress(
grpc_resolved_address CreateGRPCResolvedAddress(
const EventEngine::ResolvedAddress& ra) {
+ static_assert(
+ GRPC_MAX_SOCKADDR_SIZE == EventEngine::ResolvedAddress::MAX_SIZE_BYTES,
+ "size should match");
grpc_resolved_address grpc_addr;
memset(&grpc_addr, 0, sizeof(grpc_resolved_address));
memcpy(grpc_addr.addr, ra.address(), ra.size());
diff --git a/src/core/lib/event_engine/utils.cc b/src/core/lib/event_engine/utils.cc
index f2a202315cea8..ad4b44a287e1f 100644
--- a/src/core/lib/event_engine/utils.cc
+++ b/src/core/lib/event_engine/utils.cc
@@ -20,6 +20,7 @@
#include
#include "absl/strings/str_cat.h"
+#include "src/core/util/notification.h"
#include "src/core/util/time.h"
namespace grpc_event_engine {
@@ -38,5 +39,20 @@ grpc_core::Timestamp ToTimestamp(grpc_core::Timestamp now,
grpc_core::Duration::Milliseconds(1);
}
+absl::StatusOr>
+LookupHostnameBlocking(EventEngine::DNSResolver* dns_resolver,
+ absl::string_view name, absl::string_view default_port) {
+ absl::StatusOr> results;
+ grpc_core::Notification done;
+ dns_resolver->LookupHostname(
+ [&](absl::StatusOr> addresses) {
+ results = std::move(addresses);
+ done.Notify();
+ },
+ name, default_port);
+ done.WaitForNotification();
+ return results;
+}
+
} // namespace experimental
} // namespace grpc_event_engine
diff --git a/src/core/lib/event_engine/utils.h b/src/core/lib/event_engine/utils.h
index 45675ee8d8884..0e15d69b4958f 100644
--- a/src/core/lib/event_engine/utils.h
+++ b/src/core/lib/event_engine/utils.h
@@ -19,7 +19,10 @@
#include
#include
+#include
+#include "absl/status/statusor.h"
+#include "absl/strings/string_view.h"
#include "src/core/util/time.h"
namespace grpc_event_engine {
@@ -36,6 +39,10 @@ std::string HandleToString(const Handle& handle) {
grpc_core::Timestamp ToTimestamp(grpc_core::Timestamp now,
EventEngine::Duration delta);
+absl::StatusOr>
+LookupHostnameBlocking(EventEngine::DNSResolver* dns_resolver,
+ absl::string_view name, absl::string_view default_port);
+
} // namespace experimental
} // namespace grpc_event_engine
diff --git a/src/core/lib/experiments/experiments.cc b/src/core/lib/experiments/experiments.cc
index ea0c74c022a3f..b6549e799a514 100644
--- a/src/core/lib/experiments/experiments.cc
+++ b/src/core/lib/experiments/experiments.cc
@@ -14,470 +14,257 @@
// Auto generated by tools/codegen/core/gen_experiments.py
-#include "src/core/lib/experiments/experiments.h"
-
#include
+#include "src/core/lib/experiments/experiments.h"
+
#ifndef GRPC_EXPERIMENTS_ARE_FINAL
#if defined(GRPC_CFSTREAM)
namespace {
-const char* const description_call_tracer_in_transport =
- "Transport directly passes byte counts to CallTracer.";
+const char* const description_call_tracer_in_transport = "Transport directly passes byte counts to CallTracer.";
const char* const additional_constraints_call_tracer_in_transport = "{}";
-const char* const description_canary_client_privacy =
- "If set, canary client privacy";
+const char* const description_canary_client_privacy = "If set, canary client privacy";
const char* const additional_constraints_canary_client_privacy = "{}";
const char* const description_client_privacy = "If set, client privacy";
const char* const additional_constraints_client_privacy = "{}";
-const char* const description_event_engine_application_callbacks =
- "Run application callbacks in EventEngine threads, instead of on the "
- "thread-local ApplicationCallbackExecCtx";
-const char* const additional_constraints_event_engine_application_callbacks =
- "{}";
-const char* const description_event_engine_client =
- "Use EventEngine clients instead of iomgr's grpc_tcp_client";
+const char* const description_event_engine_application_callbacks = "Run application callbacks in EventEngine threads, instead of on the thread-local ApplicationCallbackExecCtx";
+const char* const additional_constraints_event_engine_application_callbacks = "{}";
+const char* const description_event_engine_client = "Use EventEngine clients instead of iomgr's grpc_tcp_client";
const char* const additional_constraints_event_engine_client = "{}";
-const char* const description_event_engine_dns =
- "If set, use EventEngine DNSResolver for client channel resolution";
+const char* const description_event_engine_dns = "If set, use EventEngine DNSResolver for client channel resolution";
const char* const additional_constraints_event_engine_dns = "{}";
-const char* const description_event_engine_listener =
- "Use EventEngine listeners instead of iomgr's grpc_tcp_server";
+const char* const description_event_engine_dns_non_client_channel = "If set, use EventEngine DNSResolver in other places besides client channel.";
+const char* const additional_constraints_event_engine_dns_non_client_channel = "{}";
+const char* const description_event_engine_listener = "Use EventEngine listeners instead of iomgr's grpc_tcp_server";
const char* const additional_constraints_event_engine_listener = "{}";
-const char* const description_free_large_allocator =
- "If set, return all free bytes from a \042big\042 allocator";
+const char* const description_free_large_allocator = "If set, return all free bytes from a \042big\042 allocator";
const char* const additional_constraints_free_large_allocator = "{}";
-const char* const description_local_connector_secure =
- "Local security connector uses TSI_SECURITY_NONE for LOCAL_TCP "
- "connections.";
+const char* const description_local_connector_secure = "Local security connector uses TSI_SECURITY_NONE for LOCAL_TCP connections.";
const char* const additional_constraints_local_connector_secure = "{}";
-const char* const description_max_pings_wo_data_throttle =
- "Experiment to throttle pings to a period of 1 min when "
- "GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA limit has reached (instead of "
- "completely blocking).";
+const char* const description_max_pings_wo_data_throttle = "Experiment to throttle pings to a period of 1 min when GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA limit has reached (instead of completely blocking).";
const char* const additional_constraints_max_pings_wo_data_throttle = "{}";
-const char* const description_monitoring_experiment =
- "Placeholder experiment to prove/disprove our monitoring is working";
+const char* const description_monitoring_experiment = "Placeholder experiment to prove/disprove our monitoring is working";
const char* const additional_constraints_monitoring_experiment = "{}";
-const char* const description_multiping =
- "Allow more than one ping to be in flight at a time by default.";
+const char* const description_multiping = "Allow more than one ping to be in flight at a time by default.";
const char* const additional_constraints_multiping = "{}";
-const char* const description_pick_first_new =
- "New pick_first impl with memory reduction.";
+const char* const description_pick_first_new = "New pick_first impl with memory reduction.";
const char* const additional_constraints_pick_first_new = "{}";
-const char* const description_promise_based_inproc_transport =
- "Use promises for the in-process 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 char* const description_schedule_cancellation_over_write =
- "Allow cancellation op to be scheduled over a write";
-const char* const additional_constraints_schedule_cancellation_over_write =
- "{}";
-const char* const description_server_listener =
- "If set, the new server listener classes are used.";
+const char* const description_schedule_cancellation_over_write = "Allow cancellation op to be scheduled over a write";
+const char* const additional_constraints_schedule_cancellation_over_write = "{}";
+const char* const description_server_listener = "If set, the new server listener classes are used.";
const char* const additional_constraints_server_listener = "{}";
const char* const description_server_privacy = "If set, server privacy";
const char* const additional_constraints_server_privacy = "{}";
-const char* const description_tcp_frame_size_tuning =
- "If set, enables TCP to use RPC size estimation made by higher layers. TCP "
- "would not indicate completion of a read operation until a specified "
- "number of bytes have been read over the socket. Buffers are also "
- "allocated according to estimated RPC sizes.";
+const char* const description_tcp_frame_size_tuning = "If set, enables TCP to use RPC size estimation made by higher layers. TCP would not indicate completion of a read operation until a specified number of bytes have been read over the socket. Buffers are also allocated according to estimated RPC sizes.";
const char* const additional_constraints_tcp_frame_size_tuning = "{}";
-const char* const description_tcp_rcv_lowat =
- "Use SO_RCVLOWAT to avoid wakeups on the read path.";
+const char* const description_tcp_rcv_lowat = "Use SO_RCVLOWAT to avoid wakeups on the read path.";
const char* const additional_constraints_tcp_rcv_lowat = "{}";
-const char* const description_time_caching_in_party =
- "Disable time caching in exec_ctx, and enable it only in a single party "
- "execution.";
+const char* const description_time_caching_in_party = "Disable time caching in exec_ctx, and enable it only in a single party execution.";
const char* const additional_constraints_time_caching_in_party = "{}";
-const char* const description_trace_record_callops =
- "Enables tracing of call batch initiation and completion.";
+const char* const description_trace_record_callops = "Enables tracing of call batch initiation and completion.";
const char* const additional_constraints_trace_record_callops = "{}";
-const char* const description_unconstrained_max_quota_buffer_size =
- "Discard the cap on the max free pool size for one memory allocator";
-const char* const additional_constraints_unconstrained_max_quota_buffer_size =
- "{}";
-const char* const description_work_serializer_clears_time_cache =
- "Have the work serializer clear the time cache when it dispatches work.";
-const char* const additional_constraints_work_serializer_clears_time_cache =
- "{}";
-const char* const description_work_serializer_dispatch =
- "Have the work serializer dispatch work to event engine for every "
- "callback, instead of running things inline in the first thread that "
- "successfully enqueues work.";
+const char* const description_unconstrained_max_quota_buffer_size = "Discard the cap on the max free pool size for one memory allocator";
+const char* const additional_constraints_unconstrained_max_quota_buffer_size = "{}";
+const char* const description_work_serializer_dispatch = "Have the work serializer dispatch work to event engine for every callback, instead of running things inline in the first thread that successfully enqueues work.";
const char* const additional_constraints_work_serializer_dispatch = "{}";
-} // namespace
+}
namespace grpc_core {
const ExperimentMetadata g_experiment_metadata[] = {
- {"call_tracer_in_transport", description_call_tracer_in_transport,
- additional_constraints_call_tracer_in_transport, nullptr, 0, true, true},
- {"canary_client_privacy", description_canary_client_privacy,
- additional_constraints_canary_client_privacy, nullptr, 0, false, false},
- {"client_privacy", description_client_privacy,
- additional_constraints_client_privacy, nullptr, 0, false, false},
- {"event_engine_application_callbacks",
- description_event_engine_application_callbacks,
- additional_constraints_event_engine_application_callbacks, nullptr, 0,
- true, true},
- {"event_engine_client", description_event_engine_client,
- additional_constraints_event_engine_client, nullptr, 0, false, true},
- {"event_engine_dns", description_event_engine_dns,
- additional_constraints_event_engine_dns, nullptr, 0, false, false},
- {"event_engine_listener", description_event_engine_listener,
- additional_constraints_event_engine_listener, nullptr, 0, false, true},
- {"free_large_allocator", description_free_large_allocator,
- additional_constraints_free_large_allocator, nullptr, 0, false, true},
- {"local_connector_secure", description_local_connector_secure,
- additional_constraints_local_connector_secure, nullptr, 0, false, true},
- {"max_pings_wo_data_throttle", description_max_pings_wo_data_throttle,
- additional_constraints_max_pings_wo_data_throttle, nullptr, 0, false,
- true},
- {"monitoring_experiment", description_monitoring_experiment,
- additional_constraints_monitoring_experiment, nullptr, 0, true, true},
- {"multiping", description_multiping, additional_constraints_multiping,
- nullptr, 0, false, true},
- {"pick_first_new", description_pick_first_new,
- additional_constraints_pick_first_new, nullptr, 0, true, true},
- {"promise_based_inproc_transport",
- description_promise_based_inproc_transport,
- additional_constraints_promise_based_inproc_transport, nullptr, 0, false,
- false},
- {"schedule_cancellation_over_write",
- description_schedule_cancellation_over_write,
- additional_constraints_schedule_cancellation_over_write, nullptr, 0, false,
- true},
- {"server_listener", description_server_listener,
- additional_constraints_server_listener, nullptr, 0, false, true},
- {"server_privacy", description_server_privacy,
- additional_constraints_server_privacy, nullptr, 0, false, false},
- {"tcp_frame_size_tuning", description_tcp_frame_size_tuning,
- additional_constraints_tcp_frame_size_tuning, nullptr, 0, false, true},
- {"tcp_rcv_lowat", description_tcp_rcv_lowat,
- additional_constraints_tcp_rcv_lowat, nullptr, 0, false, true},
- {"time_caching_in_party", description_time_caching_in_party,
- additional_constraints_time_caching_in_party, nullptr, 0, true, true},
- {"trace_record_callops", description_trace_record_callops,
- additional_constraints_trace_record_callops, nullptr, 0, true, true},
- {"unconstrained_max_quota_buffer_size",
- description_unconstrained_max_quota_buffer_size,
- additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0,
- false, true},
- {"work_serializer_clears_time_cache",
- description_work_serializer_clears_time_cache,
- additional_constraints_work_serializer_clears_time_cache, nullptr, 0, true,
- true},
- {"work_serializer_dispatch", description_work_serializer_dispatch,
- additional_constraints_work_serializer_dispatch, nullptr, 0, false, true},
+ {"call_tracer_in_transport", description_call_tracer_in_transport, additional_constraints_call_tracer_in_transport, nullptr, 0, true, true},
+ {"canary_client_privacy", description_canary_client_privacy, additional_constraints_canary_client_privacy, nullptr, 0, false, false},
+ {"client_privacy", description_client_privacy, additional_constraints_client_privacy, nullptr, 0, false, false},
+ {"event_engine_application_callbacks", description_event_engine_application_callbacks, additional_constraints_event_engine_application_callbacks, nullptr, 0, true, true},
+ {"event_engine_client", description_event_engine_client, additional_constraints_event_engine_client, nullptr, 0, false, true},
+ {"event_engine_dns", description_event_engine_dns, additional_constraints_event_engine_dns, nullptr, 0, false, false},
+ {"event_engine_dns_non_client_channel", description_event_engine_dns_non_client_channel, additional_constraints_event_engine_dns_non_client_channel, nullptr, 0, false, false},
+ {"event_engine_listener", description_event_engine_listener, additional_constraints_event_engine_listener, nullptr, 0, false, true},
+ {"free_large_allocator", description_free_large_allocator, additional_constraints_free_large_allocator, nullptr, 0, false, true},
+ {"local_connector_secure", description_local_connector_secure, additional_constraints_local_connector_secure, nullptr, 0, false, true},
+ {"max_pings_wo_data_throttle", description_max_pings_wo_data_throttle, additional_constraints_max_pings_wo_data_throttle, nullptr, 0, false, true},
+ {"monitoring_experiment", description_monitoring_experiment, additional_constraints_monitoring_experiment, nullptr, 0, true, true},
+ {"multiping", description_multiping, additional_constraints_multiping, nullptr, 0, false, true},
+ {"pick_first_new", description_pick_first_new, additional_constraints_pick_first_new, nullptr, 0, true, true},
+ {"promise_based_inproc_transport", description_promise_based_inproc_transport, additional_constraints_promise_based_inproc_transport, nullptr, 0, false, false},
+ {"schedule_cancellation_over_write", description_schedule_cancellation_over_write, additional_constraints_schedule_cancellation_over_write, nullptr, 0, false, true},
+ {"server_listener", description_server_listener, additional_constraints_server_listener, nullptr, 0, false, true},
+ {"server_privacy", description_server_privacy, additional_constraints_server_privacy, nullptr, 0, false, false},
+ {"tcp_frame_size_tuning", description_tcp_frame_size_tuning, additional_constraints_tcp_frame_size_tuning, nullptr, 0, false, true},
+ {"tcp_rcv_lowat", description_tcp_rcv_lowat, additional_constraints_tcp_rcv_lowat, nullptr, 0, false, true},
+ {"time_caching_in_party", description_time_caching_in_party, additional_constraints_time_caching_in_party, nullptr, 0, true, true},
+ {"trace_record_callops", description_trace_record_callops, additional_constraints_trace_record_callops, nullptr, 0, true, true},
+ {"unconstrained_max_quota_buffer_size", description_unconstrained_max_quota_buffer_size, additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0, false, true},
+ {"work_serializer_dispatch", description_work_serializer_dispatch, additional_constraints_work_serializer_dispatch, nullptr, 0, false, true},
};
} // namespace grpc_core
#elif defined(GPR_WINDOWS)
namespace {
-const char* const description_call_tracer_in_transport =
- "Transport directly passes byte counts to CallTracer.";
+const char* const description_call_tracer_in_transport = "Transport directly passes byte counts to CallTracer.";
const char* const additional_constraints_call_tracer_in_transport = "{}";
-const char* const description_canary_client_privacy =
- "If set, canary client privacy";
+const char* const description_canary_client_privacy = "If set, canary client privacy";
const char* const additional_constraints_canary_client_privacy = "{}";
const char* const description_client_privacy = "If set, client privacy";
const char* const additional_constraints_client_privacy = "{}";
-const char* const description_event_engine_application_callbacks =
- "Run application callbacks in EventEngine threads, instead of on the "
- "thread-local ApplicationCallbackExecCtx";
-const char* const additional_constraints_event_engine_application_callbacks =
- "{}";
-const char* const description_event_engine_client =
- "Use EventEngine clients instead of iomgr's grpc_tcp_client";
+const char* const description_event_engine_application_callbacks = "Run application callbacks in EventEngine threads, instead of on the thread-local ApplicationCallbackExecCtx";
+const char* const additional_constraints_event_engine_application_callbacks = "{}";
+const char* const description_event_engine_client = "Use EventEngine clients instead of iomgr's grpc_tcp_client";
const char* const additional_constraints_event_engine_client = "{}";
-const char* const description_event_engine_dns =
- "If set, use EventEngine DNSResolver for client channel resolution";
+const char* const description_event_engine_dns = "If set, use EventEngine DNSResolver for client channel resolution";
const char* const additional_constraints_event_engine_dns = "{}";
-const char* const description_event_engine_listener =
- "Use EventEngine listeners instead of iomgr's grpc_tcp_server";
+const char* const description_event_engine_dns_non_client_channel = "If set, use EventEngine DNSResolver in other places besides client channel.";
+const char* const additional_constraints_event_engine_dns_non_client_channel = "{}";
+const char* const description_event_engine_listener = "Use EventEngine listeners instead of iomgr's grpc_tcp_server";
const char* const additional_constraints_event_engine_listener = "{}";
-const char* const description_free_large_allocator =
- "If set, return all free bytes from a \042big\042 allocator";
+const char* const description_free_large_allocator = "If set, return all free bytes from a \042big\042 allocator";
const char* const additional_constraints_free_large_allocator = "{}";
-const char* const description_local_connector_secure =
- "Local security connector uses TSI_SECURITY_NONE for LOCAL_TCP "
- "connections.";
+const char* const description_local_connector_secure = "Local security connector uses TSI_SECURITY_NONE for LOCAL_TCP connections.";
const char* const additional_constraints_local_connector_secure = "{}";
-const char* const description_max_pings_wo_data_throttle =
- "Experiment to throttle pings to a period of 1 min when "
- "GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA limit has reached (instead of "
- "completely blocking).";
+const char* const description_max_pings_wo_data_throttle = "Experiment to throttle pings to a period of 1 min when GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA limit has reached (instead of completely blocking).";
const char* const additional_constraints_max_pings_wo_data_throttle = "{}";
-const char* const description_monitoring_experiment =
- "Placeholder experiment to prove/disprove our monitoring is working";
+const char* const description_monitoring_experiment = "Placeholder experiment to prove/disprove our monitoring is working";
const char* const additional_constraints_monitoring_experiment = "{}";
-const char* const description_multiping =
- "Allow more than one ping to be in flight at a time by default.";
+const char* const description_multiping = "Allow more than one ping to be in flight at a time by default.";
const char* const additional_constraints_multiping = "{}";
-const char* const description_pick_first_new =
- "New pick_first impl with memory reduction.";
+const char* const description_pick_first_new = "New pick_first impl with memory reduction.";
const char* const additional_constraints_pick_first_new = "{}";
-const char* const description_promise_based_inproc_transport =
- "Use promises for the in-process 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 char* const description_schedule_cancellation_over_write =
- "Allow cancellation op to be scheduled over a write";
-const char* const additional_constraints_schedule_cancellation_over_write =
- "{}";
-const char* const description_server_listener =
- "If set, the new server listener classes are used.";
+const char* const description_schedule_cancellation_over_write = "Allow cancellation op to be scheduled over a write";
+const char* const additional_constraints_schedule_cancellation_over_write = "{}";
+const char* const description_server_listener = "If set, the new server listener classes are used.";
const char* const additional_constraints_server_listener = "{}";
const char* const description_server_privacy = "If set, server privacy";
const char* const additional_constraints_server_privacy = "{}";
-const char* const description_tcp_frame_size_tuning =
- "If set, enables TCP to use RPC size estimation made by higher layers. TCP "
- "would not indicate completion of a read operation until a specified "
- "number of bytes have been read over the socket. Buffers are also "
- "allocated according to estimated RPC sizes.";
+const char* const description_tcp_frame_size_tuning = "If set, enables TCP to use RPC size estimation made by higher layers. TCP would not indicate completion of a read operation until a specified number of bytes have been read over the socket. Buffers are also allocated according to estimated RPC sizes.";
const char* const additional_constraints_tcp_frame_size_tuning = "{}";
-const char* const description_tcp_rcv_lowat =
- "Use SO_RCVLOWAT to avoid wakeups on the read path.";
+const char* const description_tcp_rcv_lowat = "Use SO_RCVLOWAT to avoid wakeups on the read path.";
const char* const additional_constraints_tcp_rcv_lowat = "{}";
-const char* const description_time_caching_in_party =
- "Disable time caching in exec_ctx, and enable it only in a single party "
- "execution.";
+const char* const description_time_caching_in_party = "Disable time caching in exec_ctx, and enable it only in a single party execution.";
const char* const additional_constraints_time_caching_in_party = "{}";
-const char* const description_trace_record_callops =
- "Enables tracing of call batch initiation and completion.";
+const char* const description_trace_record_callops = "Enables tracing of call batch initiation and completion.";
const char* const additional_constraints_trace_record_callops = "{}";
-const char* const description_unconstrained_max_quota_buffer_size =
- "Discard the cap on the max free pool size for one memory allocator";
-const char* const additional_constraints_unconstrained_max_quota_buffer_size =
- "{}";
-const char* const description_work_serializer_clears_time_cache =
- "Have the work serializer clear the time cache when it dispatches work.";
-const char* const additional_constraints_work_serializer_clears_time_cache =
- "{}";
-const char* const description_work_serializer_dispatch =
- "Have the work serializer dispatch work to event engine for every "
- "callback, instead of running things inline in the first thread that "
- "successfully enqueues work.";
+const char* const description_unconstrained_max_quota_buffer_size = "Discard the cap on the max free pool size for one memory allocator";
+const char* const additional_constraints_unconstrained_max_quota_buffer_size = "{}";
+const char* const description_work_serializer_dispatch = "Have the work serializer dispatch work to event engine for every callback, instead of running things inline in the first thread that successfully enqueues work.";
const char* const additional_constraints_work_serializer_dispatch = "{}";
-} // namespace
+}
namespace grpc_core {
const ExperimentMetadata g_experiment_metadata[] = {
- {"call_tracer_in_transport", description_call_tracer_in_transport,
- additional_constraints_call_tracer_in_transport, nullptr, 0, true, true},
- {"canary_client_privacy", description_canary_client_privacy,
- additional_constraints_canary_client_privacy, nullptr, 0, false, false},
- {"client_privacy", description_client_privacy,
- additional_constraints_client_privacy, nullptr, 0, false, false},
- {"event_engine_application_callbacks",
- description_event_engine_application_callbacks,
- additional_constraints_event_engine_application_callbacks, nullptr, 0,
- true, true},
- {"event_engine_client", description_event_engine_client,
- additional_constraints_event_engine_client, nullptr, 0, true, true},
- {"event_engine_dns", description_event_engine_dns,
- additional_constraints_event_engine_dns, nullptr, 0, true, false},
- {"event_engine_listener", description_event_engine_listener,
- additional_constraints_event_engine_listener, nullptr, 0, true, true},
- {"free_large_allocator", description_free_large_allocator,
- additional_constraints_free_large_allocator, nullptr, 0, false, true},
- {"local_connector_secure", description_local_connector_secure,
- additional_constraints_local_connector_secure, nullptr, 0, false, true},
- {"max_pings_wo_data_throttle", description_max_pings_wo_data_throttle,
- additional_constraints_max_pings_wo_data_throttle, nullptr, 0, false,
- true},
- {"monitoring_experiment", description_monitoring_experiment,
- additional_constraints_monitoring_experiment, nullptr, 0, true, true},
- {"multiping", description_multiping, additional_constraints_multiping,
- nullptr, 0, false, true},
- {"pick_first_new", description_pick_first_new,
- additional_constraints_pick_first_new, nullptr, 0, true, true},
- {"promise_based_inproc_transport",
- description_promise_based_inproc_transport,
- additional_constraints_promise_based_inproc_transport, nullptr, 0, false,
- false},
- {"schedule_cancellation_over_write",
- description_schedule_cancellation_over_write,
- additional_constraints_schedule_cancellation_over_write, nullptr, 0, false,
- true},
- {"server_listener", description_server_listener,
- additional_constraints_server_listener, nullptr, 0, false, true},
- {"server_privacy", description_server_privacy,
- additional_constraints_server_privacy, nullptr, 0, false, false},
- {"tcp_frame_size_tuning", description_tcp_frame_size_tuning,
- additional_constraints_tcp_frame_size_tuning, nullptr, 0, false, true},
- {"tcp_rcv_lowat", description_tcp_rcv_lowat,
- additional_constraints_tcp_rcv_lowat, nullptr, 0, false, true},
- {"time_caching_in_party", description_time_caching_in_party,
- additional_constraints_time_caching_in_party, nullptr, 0, true, true},
- {"trace_record_callops", description_trace_record_callops,
- additional_constraints_trace_record_callops, nullptr, 0, true, true},
- {"unconstrained_max_quota_buffer_size",
- description_unconstrained_max_quota_buffer_size,
- additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0,
- false, true},
- {"work_serializer_clears_time_cache",
- description_work_serializer_clears_time_cache,
- additional_constraints_work_serializer_clears_time_cache, nullptr, 0, true,
- true},
- {"work_serializer_dispatch", description_work_serializer_dispatch,
- additional_constraints_work_serializer_dispatch, nullptr, 0, false, true},
+ {"call_tracer_in_transport", description_call_tracer_in_transport, additional_constraints_call_tracer_in_transport, nullptr, 0, true, true},
+ {"canary_client_privacy", description_canary_client_privacy, additional_constraints_canary_client_privacy, nullptr, 0, false, false},
+ {"client_privacy", description_client_privacy, additional_constraints_client_privacy, nullptr, 0, false, false},
+ {"event_engine_application_callbacks", description_event_engine_application_callbacks, additional_constraints_event_engine_application_callbacks, nullptr, 0, true, true},
+ {"event_engine_client", description_event_engine_client, additional_constraints_event_engine_client, nullptr, 0, true, true},
+ {"event_engine_dns", description_event_engine_dns, additional_constraints_event_engine_dns, nullptr, 0, true, false},
+ {"event_engine_dns_non_client_channel", description_event_engine_dns_non_client_channel, additional_constraints_event_engine_dns_non_client_channel, nullptr, 0, false, false},
+ {"event_engine_listener", description_event_engine_listener, additional_constraints_event_engine_listener, nullptr, 0, true, true},
+ {"free_large_allocator", description_free_large_allocator, additional_constraints_free_large_allocator, nullptr, 0, false, true},
+ {"local_connector_secure", description_local_connector_secure, additional_constraints_local_connector_secure, nullptr, 0, false, true},
+ {"max_pings_wo_data_throttle", description_max_pings_wo_data_throttle, additional_constraints_max_pings_wo_data_throttle, nullptr, 0, false, true},
+ {"monitoring_experiment", description_monitoring_experiment, additional_constraints_monitoring_experiment, nullptr, 0, true, true},
+ {"multiping", description_multiping, additional_constraints_multiping, nullptr, 0, false, true},
+ {"pick_first_new", description_pick_first_new, additional_constraints_pick_first_new, nullptr, 0, true, true},
+ {"promise_based_inproc_transport", description_promise_based_inproc_transport, additional_constraints_promise_based_inproc_transport, nullptr, 0, false, false},
+ {"schedule_cancellation_over_write", description_schedule_cancellation_over_write, additional_constraints_schedule_cancellation_over_write, nullptr, 0, false, true},
+ {"server_listener", description_server_listener, additional_constraints_server_listener, nullptr, 0, false, true},
+ {"server_privacy", description_server_privacy, additional_constraints_server_privacy, nullptr, 0, false, false},
+ {"tcp_frame_size_tuning", description_tcp_frame_size_tuning, additional_constraints_tcp_frame_size_tuning, nullptr, 0, false, true},
+ {"tcp_rcv_lowat", description_tcp_rcv_lowat, additional_constraints_tcp_rcv_lowat, nullptr, 0, false, true},
+ {"time_caching_in_party", description_time_caching_in_party, additional_constraints_time_caching_in_party, nullptr, 0, true, true},
+ {"trace_record_callops", description_trace_record_callops, additional_constraints_trace_record_callops, nullptr, 0, true, true},
+ {"unconstrained_max_quota_buffer_size", description_unconstrained_max_quota_buffer_size, additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0, false, true},
+ {"work_serializer_dispatch", description_work_serializer_dispatch, additional_constraints_work_serializer_dispatch, nullptr, 0, false, true},
};
} // namespace grpc_core
#else
namespace {
-const char* const description_call_tracer_in_transport =
- "Transport directly passes byte counts to CallTracer.";
+const char* const description_call_tracer_in_transport = "Transport directly passes byte counts to CallTracer.";
const char* const additional_constraints_call_tracer_in_transport = "{}";
-const char* const description_canary_client_privacy =
- "If set, canary client privacy";
+const char* const description_canary_client_privacy = "If set, canary client privacy";
const char* const additional_constraints_canary_client_privacy = "{}";
const char* const description_client_privacy = "If set, client privacy";
const char* const additional_constraints_client_privacy = "{}";
-const char* const description_event_engine_application_callbacks =
- "Run application callbacks in EventEngine threads, instead of on the "
- "thread-local ApplicationCallbackExecCtx";
-const char* const additional_constraints_event_engine_application_callbacks =
- "{}";
-const char* const description_event_engine_client =
- "Use EventEngine clients instead of iomgr's grpc_tcp_client";
+const char* const description_event_engine_application_callbacks = "Run application callbacks in EventEngine threads, instead of on the thread-local ApplicationCallbackExecCtx";
+const char* const additional_constraints_event_engine_application_callbacks = "{}";
+const char* const description_event_engine_client = "Use EventEngine clients instead of iomgr's grpc_tcp_client";
const char* const additional_constraints_event_engine_client = "{}";
-const char* const description_event_engine_dns =
- "If set, use EventEngine DNSResolver for client channel resolution";
+const char* const description_event_engine_dns = "If set, use EventEngine DNSResolver for client channel resolution";
const char* const additional_constraints_event_engine_dns = "{}";
-const char* const description_event_engine_listener =
- "Use EventEngine listeners instead of iomgr's grpc_tcp_server";
+const char* const description_event_engine_dns_non_client_channel = "If set, use EventEngine DNSResolver in other places besides client channel.";
+const char* const additional_constraints_event_engine_dns_non_client_channel = "{}";
+const char* const description_event_engine_listener = "Use EventEngine listeners instead of iomgr's grpc_tcp_server";
const char* const additional_constraints_event_engine_listener = "{}";
-const char* const description_free_large_allocator =
- "If set, return all free bytes from a \042big\042 allocator";
+const char* const description_free_large_allocator = "If set, return all free bytes from a \042big\042 allocator";
const char* const additional_constraints_free_large_allocator = "{}";
-const char* const description_local_connector_secure =
- "Local security connector uses TSI_SECURITY_NONE for LOCAL_TCP "
- "connections.";
+const char* const description_local_connector_secure = "Local security connector uses TSI_SECURITY_NONE for LOCAL_TCP connections.";
const char* const additional_constraints_local_connector_secure = "{}";
-const char* const description_max_pings_wo_data_throttle =
- "Experiment to throttle pings to a period of 1 min when "
- "GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA limit has reached (instead of "
- "completely blocking).";
+const char* const description_max_pings_wo_data_throttle = "Experiment to throttle pings to a period of 1 min when GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA limit has reached (instead of completely blocking).";
const char* const additional_constraints_max_pings_wo_data_throttle = "{}";
-const char* const description_monitoring_experiment =
- "Placeholder experiment to prove/disprove our monitoring is working";
+const char* const description_monitoring_experiment = "Placeholder experiment to prove/disprove our monitoring is working";
const char* const additional_constraints_monitoring_experiment = "{}";
-const char* const description_multiping =
- "Allow more than one ping to be in flight at a time by default.";
+const char* const description_multiping = "Allow more than one ping to be in flight at a time by default.";
const char* const additional_constraints_multiping = "{}";
-const char* const description_pick_first_new =
- "New pick_first impl with memory reduction.";
+const char* const description_pick_first_new = "New pick_first impl with memory reduction.";
const char* const additional_constraints_pick_first_new = "{}";
-const char* const description_promise_based_inproc_transport =
- "Use promises for the in-process 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 char* const description_schedule_cancellation_over_write =
- "Allow cancellation op to be scheduled over a write";
-const char* const additional_constraints_schedule_cancellation_over_write =
- "{}";
-const char* const description_server_listener =
- "If set, the new server listener classes are used.";
+const char* const description_schedule_cancellation_over_write = "Allow cancellation op to be scheduled over a write";
+const char* const additional_constraints_schedule_cancellation_over_write = "{}";
+const char* const description_server_listener = "If set, the new server listener classes are used.";
const char* const additional_constraints_server_listener = "{}";
const char* const description_server_privacy = "If set, server privacy";
const char* const additional_constraints_server_privacy = "{}";
-const char* const description_tcp_frame_size_tuning =
- "If set, enables TCP to use RPC size estimation made by higher layers. TCP "
- "would not indicate completion of a read operation until a specified "
- "number of bytes have been read over the socket. Buffers are also "
- "allocated according to estimated RPC sizes.";
+const char* const description_tcp_frame_size_tuning = "If set, enables TCP to use RPC size estimation made by higher layers. TCP would not indicate completion of a read operation until a specified number of bytes have been read over the socket. Buffers are also allocated according to estimated RPC sizes.";
const char* const additional_constraints_tcp_frame_size_tuning = "{}";
-const char* const description_tcp_rcv_lowat =
- "Use SO_RCVLOWAT to avoid wakeups on the read path.";
+const char* const description_tcp_rcv_lowat = "Use SO_RCVLOWAT to avoid wakeups on the read path.";
const char* const additional_constraints_tcp_rcv_lowat = "{}";
-const char* const description_time_caching_in_party =
- "Disable time caching in exec_ctx, and enable it only in a single party "
- "execution.";
+const char* const description_time_caching_in_party = "Disable time caching in exec_ctx, and enable it only in a single party execution.";
const char* const additional_constraints_time_caching_in_party = "{}";
-const char* const description_trace_record_callops =
- "Enables tracing of call batch initiation and completion.";
+const char* const description_trace_record_callops = "Enables tracing of call batch initiation and completion.";
const char* const additional_constraints_trace_record_callops = "{}";
-const char* const description_unconstrained_max_quota_buffer_size =
- "Discard the cap on the max free pool size for one memory allocator";
-const char* const additional_constraints_unconstrained_max_quota_buffer_size =
- "{}";
-const char* const description_work_serializer_clears_time_cache =
- "Have the work serializer clear the time cache when it dispatches work.";
-const char* const additional_constraints_work_serializer_clears_time_cache =
- "{}";
-const char* const description_work_serializer_dispatch =
- "Have the work serializer dispatch work to event engine for every "
- "callback, instead of running things inline in the first thread that "
- "successfully enqueues work.";
+const char* const description_unconstrained_max_quota_buffer_size = "Discard the cap on the max free pool size for one memory allocator";
+const char* const additional_constraints_unconstrained_max_quota_buffer_size = "{}";
+const char* const description_work_serializer_dispatch = "Have the work serializer dispatch work to event engine for every callback, instead of running things inline in the first thread that successfully enqueues work.";
const char* const additional_constraints_work_serializer_dispatch = "{}";
-} // namespace
+}
namespace grpc_core {
const ExperimentMetadata g_experiment_metadata[] = {
- {"call_tracer_in_transport", description_call_tracer_in_transport,
- additional_constraints_call_tracer_in_transport, nullptr, 0, true, true},
- {"canary_client_privacy", description_canary_client_privacy,
- additional_constraints_canary_client_privacy, nullptr, 0, false, false},
- {"client_privacy", description_client_privacy,
- additional_constraints_client_privacy, nullptr, 0, false, false},
- {"event_engine_application_callbacks",
- description_event_engine_application_callbacks,
- additional_constraints_event_engine_application_callbacks, nullptr, 0,
- true, true},
- {"event_engine_client", description_event_engine_client,
- additional_constraints_event_engine_client, nullptr, 0, false, true},
- {"event_engine_dns", description_event_engine_dns,
- additional_constraints_event_engine_dns, nullptr, 0, true, false},
- {"event_engine_listener", description_event_engine_listener,
- additional_constraints_event_engine_listener, nullptr, 0, true, true},
- {"free_large_allocator", description_free_large_allocator,
- additional_constraints_free_large_allocator, nullptr, 0, false, true},
- {"local_connector_secure", description_local_connector_secure,
- additional_constraints_local_connector_secure, nullptr, 0, false, true},
- {"max_pings_wo_data_throttle", description_max_pings_wo_data_throttle,
- additional_constraints_max_pings_wo_data_throttle, nullptr, 0, false,
- true},
- {"monitoring_experiment", description_monitoring_experiment,
- additional_constraints_monitoring_experiment, nullptr, 0, true, true},
- {"multiping", description_multiping, additional_constraints_multiping,
- nullptr, 0, false, true},
- {"pick_first_new", description_pick_first_new,
- additional_constraints_pick_first_new, nullptr, 0, true, true},
- {"promise_based_inproc_transport",
- description_promise_based_inproc_transport,
- additional_constraints_promise_based_inproc_transport, nullptr, 0, false,
- false},
- {"schedule_cancellation_over_write",
- description_schedule_cancellation_over_write,
- additional_constraints_schedule_cancellation_over_write, nullptr, 0, false,
- true},
- {"server_listener", description_server_listener,
- additional_constraints_server_listener, nullptr, 0, false, true},
- {"server_privacy", description_server_privacy,
- additional_constraints_server_privacy, nullptr, 0, false, false},
- {"tcp_frame_size_tuning", description_tcp_frame_size_tuning,
- additional_constraints_tcp_frame_size_tuning, nullptr, 0, false, true},
- {"tcp_rcv_lowat", description_tcp_rcv_lowat,
- additional_constraints_tcp_rcv_lowat, nullptr, 0, false, true},
- {"time_caching_in_party", description_time_caching_in_party,
- additional_constraints_time_caching_in_party, nullptr, 0, true, true},
- {"trace_record_callops", description_trace_record_callops,
- additional_constraints_trace_record_callops, nullptr, 0, true, true},
- {"unconstrained_max_quota_buffer_size",
- description_unconstrained_max_quota_buffer_size,
- additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0,
- false, true},
- {"work_serializer_clears_time_cache",
- description_work_serializer_clears_time_cache,
- additional_constraints_work_serializer_clears_time_cache, nullptr, 0, true,
- true},
- {"work_serializer_dispatch", description_work_serializer_dispatch,
- additional_constraints_work_serializer_dispatch, nullptr, 0, true, true},
+ {"call_tracer_in_transport", description_call_tracer_in_transport, additional_constraints_call_tracer_in_transport, nullptr, 0, true, true},
+ {"canary_client_privacy", description_canary_client_privacy, additional_constraints_canary_client_privacy, nullptr, 0, false, false},
+ {"client_privacy", description_client_privacy, additional_constraints_client_privacy, nullptr, 0, false, false},
+ {"event_engine_application_callbacks", description_event_engine_application_callbacks, additional_constraints_event_engine_application_callbacks, nullptr, 0, true, true},
+ {"event_engine_client", description_event_engine_client, additional_constraints_event_engine_client, nullptr, 0, true, true},
+ {"event_engine_dns", description_event_engine_dns, additional_constraints_event_engine_dns, nullptr, 0, true, false},
+ {"event_engine_dns_non_client_channel", description_event_engine_dns_non_client_channel, additional_constraints_event_engine_dns_non_client_channel, nullptr, 0, false, false},
+ {"event_engine_listener", description_event_engine_listener, additional_constraints_event_engine_listener, nullptr, 0, true, true},
+ {"free_large_allocator", description_free_large_allocator, additional_constraints_free_large_allocator, nullptr, 0, false, true},
+ {"local_connector_secure", description_local_connector_secure, additional_constraints_local_connector_secure, nullptr, 0, false, true},
+ {"max_pings_wo_data_throttle", description_max_pings_wo_data_throttle, additional_constraints_max_pings_wo_data_throttle, nullptr, 0, false, true},
+ {"monitoring_experiment", description_monitoring_experiment, additional_constraints_monitoring_experiment, nullptr, 0, true, true},
+ {"multiping", description_multiping, additional_constraints_multiping, nullptr, 0, false, true},
+ {"pick_first_new", description_pick_first_new, additional_constraints_pick_first_new, nullptr, 0, true, true},
+ {"promise_based_inproc_transport", description_promise_based_inproc_transport, additional_constraints_promise_based_inproc_transport, nullptr, 0, false, false},
+ {"schedule_cancellation_over_write", description_schedule_cancellation_over_write, additional_constraints_schedule_cancellation_over_write, nullptr, 0, false, true},
+ {"server_listener", description_server_listener, additional_constraints_server_listener, nullptr, 0, false, true},
+ {"server_privacy", description_server_privacy, additional_constraints_server_privacy, nullptr, 0, false, false},
+ {"tcp_frame_size_tuning", description_tcp_frame_size_tuning, additional_constraints_tcp_frame_size_tuning, nullptr, 0, false, true},
+ {"tcp_rcv_lowat", description_tcp_rcv_lowat, additional_constraints_tcp_rcv_lowat, nullptr, 0, false, true},
+ {"time_caching_in_party", description_time_caching_in_party, additional_constraints_time_caching_in_party, nullptr, 0, true, true},
+ {"trace_record_callops", description_trace_record_callops, additional_constraints_trace_record_callops, nullptr, 0, true, true},
+ {"unconstrained_max_quota_buffer_size", description_unconstrained_max_quota_buffer_size, additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0, false, true},
+ {"work_serializer_dispatch", description_work_serializer_dispatch, additional_constraints_work_serializer_dispatch, nullptr, 0, true, true},
};
} // namespace grpc_core
diff --git a/src/core/lib/experiments/experiments.h b/src/core/lib/experiments/experiments.h
index 623693f56903b..30baf701ee744 100644
--- a/src/core/lib/experiments/experiments.h
+++ b/src/core/lib/experiments/experiments.h
@@ -65,6 +65,7 @@ inline bool IsClientPrivacyEnabled() { return false; }
inline bool IsEventEngineApplicationCallbacksEnabled() { return true; }
inline bool IsEventEngineClientEnabled() { return false; }
inline bool IsEventEngineDnsEnabled() { return false; }
+inline bool IsEventEngineDnsNonClientChannelEnabled() { return false; }
inline bool IsEventEngineListenerEnabled() { return false; }
inline bool IsFreeLargeAllocatorEnabled() { return false; }
inline bool IsLocalConnectorSecureEnabled() { return false; }
@@ -85,8 +86,6 @@ inline bool IsTimeCachingInPartyEnabled() { return true; }
#define GRPC_EXPERIMENT_IS_INCLUDED_TRACE_RECORD_CALLOPS
inline bool IsTraceRecordCallopsEnabled() { return true; }
inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { return false; }
-#define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_CLEARS_TIME_CACHE
-inline bool IsWorkSerializerClearsTimeCacheEnabled() { return true; }
inline bool IsWorkSerializerDispatchEnabled() { return false; }
#elif defined(GPR_WINDOWS)
@@ -100,6 +99,7 @@ inline bool IsEventEngineApplicationCallbacksEnabled() { return true; }
inline bool IsEventEngineClientEnabled() { return true; }
#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS
inline bool IsEventEngineDnsEnabled() { return true; }
+inline bool IsEventEngineDnsNonClientChannelEnabled() { return false; }
#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER
inline bool IsEventEngineListenerEnabled() { return true; }
inline bool IsFreeLargeAllocatorEnabled() { return false; }
@@ -121,8 +121,6 @@ inline bool IsTimeCachingInPartyEnabled() { return true; }
#define GRPC_EXPERIMENT_IS_INCLUDED_TRACE_RECORD_CALLOPS
inline bool IsTraceRecordCallopsEnabled() { return true; }
inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { return false; }
-#define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_CLEARS_TIME_CACHE
-inline bool IsWorkSerializerClearsTimeCacheEnabled() { return true; }
inline bool IsWorkSerializerDispatchEnabled() { return false; }
#else
@@ -132,9 +130,11 @@ inline bool IsCanaryClientPrivacyEnabled() { return false; }
inline bool IsClientPrivacyEnabled() { return false; }
#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_APPLICATION_CALLBACKS
inline bool IsEventEngineApplicationCallbacksEnabled() { return true; }
-inline bool IsEventEngineClientEnabled() { return false; }
+#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CLIENT
+inline bool IsEventEngineClientEnabled() { return true; }
#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS
inline bool IsEventEngineDnsEnabled() { return true; }
+inline bool IsEventEngineDnsNonClientChannelEnabled() { return false; }
#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER
inline bool IsEventEngineListenerEnabled() { return true; }
inline bool IsFreeLargeAllocatorEnabled() { return false; }
@@ -156,8 +156,6 @@ inline bool IsTimeCachingInPartyEnabled() { return true; }
#define GRPC_EXPERIMENT_IS_INCLUDED_TRACE_RECORD_CALLOPS
inline bool IsTraceRecordCallopsEnabled() { return true; }
inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { return false; }
-#define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_CLEARS_TIME_CACHE
-inline bool IsWorkSerializerClearsTimeCacheEnabled() { return true; }
#define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_DISPATCH
inline bool IsWorkSerializerDispatchEnabled() { return true; }
#endif
@@ -170,6 +168,7 @@ enum ExperimentIds {
kExperimentIdEventEngineApplicationCallbacks,
kExperimentIdEventEngineClient,
kExperimentIdEventEngineDns,
+ kExperimentIdEventEngineDnsNonClientChannel,
kExperimentIdEventEngineListener,
kExperimentIdFreeLargeAllocator,
kExperimentIdLocalConnectorSecure,
@@ -186,106 +185,57 @@ enum ExperimentIds {
kExperimentIdTimeCachingInParty,
kExperimentIdTraceRecordCallops,
kExperimentIdUnconstrainedMaxQuotaBufferSize,
- kExperimentIdWorkSerializerClearsTimeCache,
kExperimentIdWorkSerializerDispatch,
kNumExperiments
};
#define GRPC_EXPERIMENT_IS_INCLUDED_CALL_TRACER_IN_TRANSPORT
-inline bool IsCallTracerInTransportEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsCallTracerInTransportEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_CANARY_CLIENT_PRIVACY
-inline bool IsCanaryClientPrivacyEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsCanaryClientPrivacyEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_CLIENT_PRIVACY
-inline bool IsClientPrivacyEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsClientPrivacyEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_APPLICATION_CALLBACKS
-inline bool IsEventEngineApplicationCallbacksEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsEventEngineApplicationCallbacksEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CLIENT
-inline bool IsEventEngineClientEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsEventEngineClientEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS
-inline bool IsEventEngineDnsEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsEventEngineDnsEnabled() { return IsExperimentEnabled(); }
+#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS_NON_CLIENT_CHANNEL
+inline bool IsEventEngineDnsNonClientChannelEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER
-inline bool IsEventEngineListenerEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsEventEngineListenerEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_FREE_LARGE_ALLOCATOR
-inline bool IsFreeLargeAllocatorEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsFreeLargeAllocatorEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_LOCAL_CONNECTOR_SECURE
-inline bool IsLocalConnectorSecureEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsLocalConnectorSecureEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_MAX_PINGS_WO_DATA_THROTTLE
-inline bool IsMaxPingsWoDataThrottleEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsMaxPingsWoDataThrottleEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_MONITORING_EXPERIMENT
-inline bool IsMonitoringExperimentEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsMonitoringExperimentEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_MULTIPING
-inline bool IsMultipingEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsMultipingEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_PICK_FIRST_NEW
-inline bool IsPickFirstNewEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsPickFirstNewEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_INPROC_TRANSPORT
-inline bool IsPromiseBasedInprocTransportEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsPromiseBasedInprocTransportEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_SCHEDULE_CANCELLATION_OVER_WRITE
-inline bool IsScheduleCancellationOverWriteEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsScheduleCancellationOverWriteEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_SERVER_LISTENER
-inline bool IsServerListenerEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsServerListenerEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_SERVER_PRIVACY
-inline bool IsServerPrivacyEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsServerPrivacyEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_TCP_FRAME_SIZE_TUNING
-inline bool IsTcpFrameSizeTuningEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsTcpFrameSizeTuningEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_TCP_RCV_LOWAT
-inline bool IsTcpRcvLowatEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsTcpRcvLowatEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_TIME_CACHING_IN_PARTY
-inline bool IsTimeCachingInPartyEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsTimeCachingInPartyEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_TRACE_RECORD_CALLOPS
-inline bool IsTraceRecordCallopsEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsTraceRecordCallopsEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_UNCONSTRAINED_MAX_QUOTA_BUFFER_SIZE
-inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() {
- return IsExperimentEnabled();
-}
-#define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_CLEARS_TIME_CACHE
-inline bool IsWorkSerializerClearsTimeCacheEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { return IsExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_DISPATCH
-inline bool IsWorkSerializerDispatchEnabled() {
- return IsExperimentEnabled();
-}
+inline bool IsWorkSerializerDispatchEnabled() { return IsExperimentEnabled(); }
extern const ExperimentMetadata g_experiment_metadata[kNumExperiments];
diff --git a/src/core/lib/experiments/experiments.yaml b/src/core/lib/experiments/experiments.yaml
index c70d0c2875871..2d34c77f8a95b 100644
--- a/src/core/lib/experiments/experiments.yaml
+++ b/src/core/lib/experiments/experiments.yaml
@@ -77,6 +77,14 @@
test_tags: ["cancel_ares_query_test", "resolver_component_tests_runner_invoker"]
allow_in_fuzzing_config: false
uses_polling: true
+- name: event_engine_dns_non_client_channel
+ description:
+ If set, use EventEngine DNSResolver in other places besides client channel.
+ expiry: 2025/03/01
+ owner: yijiem@google.com
+ test_tags: ["core_end2end_test"]
+ allow_in_fuzzing_config: false
+ uses_polling: true
- name: event_engine_listener
description: Use EventEngine listeners instead of iomgr's grpc_tcp_server
expiry: 2025/03/01
@@ -109,7 +117,7 @@
- name: multiping
description:
Allow more than one ping to be in flight at a time by default.
- expiry: 2024/09/15
+ expiry: 2025/03/03
owner: ctiller@google.com
test_tags: [flow_control_test]
- name: pick_first_new
@@ -120,7 +128,7 @@
- name: promise_based_inproc_transport
description:
Use promises for the in-process transport.
- expiry: 2024/09/15
+ expiry: 2025/03/03
owner: ctiller@google.com
test_tags: []
allow_in_fuzzing_config: false # experiment currently crashes if enabled
@@ -168,15 +176,9 @@
test_tags: []
- name: unconstrained_max_quota_buffer_size
description: Discard the cap on the max free pool size for one memory allocator
- expiry: 2024/09/09
+ expiry: 2025/03/03
owner: ctiller@google.com
test_tags: [resource_quota_test]
-- name: work_serializer_clears_time_cache
- description:
- Have the work serializer clear the time cache when it dispatches work.
- expiry: 2024/10/01
- owner: ctiller@google.com
- test_tags: []
- name: work_serializer_dispatch
description:
Have the work serializer dispatch work to event engine for every callback,
diff --git a/src/core/lib/experiments/rollouts.yaml b/src/core/lib/experiments/rollouts.yaml
index a41c5094fc281..c73120d9f63d5 100644
--- a/src/core/lib/experiments/rollouts.yaml
+++ b/src/core/lib/experiments/rollouts.yaml
@@ -59,7 +59,7 @@
default:
# not tested on iOS at all
ios: broken
- posix: false
+ posix: true
windows: true
- name: event_engine_dns
default:
diff --git a/src/core/lib/transport/call_filters.h b/src/core/lib/transport/call_filters.h
index 3dabd20e2f63a..bbdfa4a2fed7f 100644
--- a/src/core/lib/transport/call_filters.h
+++ b/src/core/lib/transport/call_filters.h
@@ -400,6 +400,28 @@ struct AddOpImpl
+struct AddOpImpl {
+ static void Add(FilterType* channel_data, size_t call_offset, Layout& to) {
+ to.Add(0, 0,
+ Operator{
+ channel_data,
+ call_offset,
+ [](void*, void* call_data, void*, T value) -> Poll> {
+ (static_cast(call_data)->*impl)(
+ *value);
+ return ResultOr{std::move(value), nullptr};
+ },
+ nullptr,
+ nullptr,
+ });
+ }
+};
+
// void $INTERCEPTOR_NAME($VALUE_TYPE&, FilterType*)
template InvalidateNow();
- }
CallbackWrapper* cb_wrapper = nullptr;
bool empty_unused;
while ((cb_wrapper = reinterpret_cast(
diff --git a/src/cpp/README.md b/src/cpp/README.md
index a999068fb75fe..45eb3a43301d6 100755
--- a/src/cpp/README.md
+++ b/src/cpp/README.md
@@ -18,7 +18,7 @@ Therefore, gRPC supports several major build systems, which should satisfy most
them.
.
-* Best Effort: We do not have continous integration tests for these, but we are
+* Best Effort: We do not have continuous integration tests for these, but we are
fairly confident that gRPC C++ would work on them. We will make our best
effort to support them, and we welcome patches for such platforms, but we
might need to declare bankruptcy on some issues.
diff --git a/src/cpp/ext/filters/census/server_call_tracer.cc b/src/cpp/ext/filters/census/server_call_tracer.cc
index bb6fb57f793a8..7e60733c80e08 100644
--- a/src/cpp/ext/filters/census/server_call_tracer.cc
+++ b/src/cpp/ext/filters/census/server_call_tracer.cc
@@ -194,7 +194,7 @@ class OpenCensusServerCallTracer : public grpc_core::ServerCallTracer {
absl::Duration elapsed_time_;
uint64_t recv_message_count_;
uint64_t sent_message_count_;
- // Buffer needed for grpc_slice to reference it when adding metatdata to
+ // Buffer needed for grpc_slice to reference it when adding metadata to
// response.
char stats_buf_[kMaxServerStatsLen];
// TODO(roth, ctiller): Won't need atomic here once chttp2 is migrated
diff --git a/src/cpp/ext/gcp/observability_config.cc b/src/cpp/ext/gcp/observability_config.cc
index 64246249f01d2..0c04ba912afc5 100644
--- a/src/cpp/ext/gcp/observability_config.cc
+++ b/src/cpp/ext/gcp/observability_config.cc
@@ -75,7 +75,7 @@ absl::StatusOr GetGcpObservabilityConfigContents() {
// Tries to get the GCP Project ID from environment variables, or returns an
// empty string if not found.
std::string GetProjectIdFromGcpEnvVar() {
- // First check GCP_PROEJCT
+ // First check GCP_PROJECT
absl::optional project_id = grpc_core::GetEnv("GCP_PROJECT");
if (project_id.has_value() && !project_id->empty()) {
return project_id.value();
diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc
index 49cb31dcb48d2..2d30879de66d5 100644
--- a/src/cpp/server/server_cc.cc
+++ b/src/cpp/server/server_cc.cc
@@ -530,7 +530,7 @@ class Server::SyncRequest final : public grpc::internal::CompletionQueueTag {
grpc::internal::InterceptorBatchMethodsImpl interceptor_methods_;
// ServerContextWrapper allows ManualConstructor while using a private
- // contructor of ServerContext via this friend class.
+ // constructor of ServerContext via this friend class.
struct ServerContextWrapper {
ServerContext ctx;
diff --git a/src/cpp/thread_manager/thread_manager.h b/src/cpp/thread_manager/thread_manager.h
index 2c201bc60980c..b42c0b5bb52d2 100644
--- a/src/cpp/thread_manager/thread_manager.h
+++ b/src/cpp/thread_manager/thread_manager.h
@@ -42,10 +42,10 @@ class ThreadManager {
// "Polls" for new work.
// If the return value is WORK_FOUND:
- // - The implementaion of PollForWork() MAY set some opaque identifier to
+ // - The implementation of PollForWork() MAY set some opaque identifier to
// (identify the work item found) via the '*tag' parameter
- // - The implementaion MUST set the value of 'ok' to 'true' or 'false'. A
- // value of 'false' indicates some implemenation specific error (that is
+ // - The implementation MUST set the value of 'ok' to 'true' or 'false'. A
+ // value of 'false' indicates some implementation specific error (that is
// neither SHUTDOWN nor TIMEOUT)
// - ThreadManager does not interpret the values of 'tag' and 'ok'
// - ThreadManager WILL call DoWork() and pass '*tag' and 'ok' as input to
diff --git a/src/proto/grpc/testing/xds/v3/BUILD b/src/proto/grpc/testing/xds/v3/BUILD
index 15b8e0796c0a9..cc04d3d20fa8b 100644
--- a/src/proto/grpc/testing/xds/v3/BUILD
+++ b/src/proto/grpc/testing/xds/v3/BUILD
@@ -23,7 +23,7 @@ exports_files([
grpc_package(
name = "xds_v3",
- visibility = "public",
+ visibility = "tests",
)
grpc_proto_library(
@@ -331,6 +331,8 @@ grpc_proto_library(
srcs = [
"csds.proto",
],
+ # Needs to be visible to //:grpcpp_csds
+ visibility = ["//:__subpackages__"],
well_known_protos = True,
deps = [
"base_proto",
diff --git a/templates/test/cpp/naming/resolver_component_tests_defs.include b/templates/test/cpp/naming/resolver_component_tests_defs.include
index 019686b2b641d..3132395002646 100644
--- a/templates/test/cpp/naming/resolver_component_tests_defs.include
+++ b/templates/test/cpp/naming/resolver_component_tests_defs.include
@@ -92,7 +92,7 @@ def wait_until_dns_server_is_up(args,
dns_server_subprocess.kill()
dns_server_subprocess.wait()
test_runner_log(('Failed to reach DNS server over TCP and/or UDP. '
- 'Exitting without running tests.'))
+ 'Exiting without running tests.'))
test_runner_log('======= DNS server stdout '
'(merged stdout and stderr) =============')
with open(dns_server_subprocess_output, 'r') as l:
diff --git a/templates/tools/dockerfile/test/binder_transport_apk/Dockerfile.template b/templates/tools/dockerfile/test/binder_transport_apk/Dockerfile.template
deleted file mode 100644
index 5601967cd7ce0..0000000000000
--- a/templates/tools/dockerfile/test/binder_transport_apk/Dockerfile.template
+++ /dev/null
@@ -1,49 +0,0 @@
-%YAML 1.2
---- |
- # Copyright 2021 The 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.
-
- <%include file="../../oss_fuzz_base.include"/>
- <%include file="../../bazel.include"/>
-
- #========================
- # Java
- RUN apt-get install -y openjdk-21-jdk
-
- #========================
- # Android SDK/NDK installation
- ENV ANDROID_SDK_VERSION 11076708
- ENV ANDROID_NDK_VERSION 26.2.11394342
-
- ENV SDK_ROOT /opt/android-sdk
-
- RUN mkdir -p $SDK_ROOT
- RUN cd $SDK_ROOT && \
- wget -O cmd.zip https://dl.google.com/android/repository/commandlinetools-linux-${'${ANDROID_SDK_VERSION}'}_latest.zip && \
- unzip -q cmd.zip && \
- rm cmd.zip
-
- RUN yes | $SDK_ROOT/cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT --licenses # accept all licenses
-
- # This is not required but desirable to reduce the time to download and the chance of download failure.
- RUN mkdir -p ~/.android && touch ~/.android/repositories.cfg
-
- RUN $SDK_ROOT/cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT "ndk;$ANDROID_NDK_VERSION" "platforms;android-33" "build-tools;34.0.0"
-
- # Set environment variables for Bazel rules
- ENV ANDROID_HOME $SDK_ROOT
- ENV ANDROID_NDK_HOME $SDK_ROOT/ndk/$ANDROID_NDK_VERSION
-
- # Define the default command.
- CMD ["bash"]
diff --git a/test/core/end2end/BUILD b/test/core/end2end/BUILD
index 51032c0b1e2d2..debaf2ef38cd3 100644
--- a/test/core/end2end/BUILD
+++ b/test/core/end2end/BUILD
@@ -312,6 +312,7 @@ grpc_core_end2end_test(
grpc_core_end2end_test(
name = "cancel_after_invoke",
+ flaky = True,
shard_count = 50,
)
@@ -324,7 +325,10 @@ grpc_core_end2end_test(name = "cancel_before_invoke")
grpc_core_end2end_test(name = "cancel_in_a_vacuum")
-grpc_core_end2end_test(name = "cancel_with_status")
+grpc_core_end2end_test(
+ name = "cancel_with_status",
+ flaky = True,
+)
grpc_core_end2end_test(name = "channelz")
diff --git a/test/core/end2end/grpc_core_end2end_test.bzl b/test/core/end2end/grpc_core_end2end_test.bzl
index 9c7c5611ba33e..7a61f289fd224 100644
--- a/test/core/end2end/grpc_core_end2end_test.bzl
+++ b/test/core/end2end/grpc_core_end2end_test.bzl
@@ -25,13 +25,14 @@ END2END_TEST_DATA = [
"//src/core/tsi/test_creds:server1.pem",
]
-def grpc_core_end2end_test(name, shard_count = 10, tags = []):
+def grpc_core_end2end_test(name, shard_count = 10, tags = [], flaky = False):
"""Generate one core end2end test
Args:
name: name of the test, must correspond to a "test/name.cc" file
shard_count: per bazel
tags: per bazel
+ flaky: per bazel
"""
if len(name) > 60:
@@ -112,6 +113,7 @@ def grpc_core_end2end_test(name, shard_count = 10, tags = []):
"%s_library" % name,
],
tags = ["core_end2end_test", "thready_tsan"] + tags,
+ flaky = flaky,
)
grpc_proto_fuzzer(
diff --git a/test/core/event_engine/windows/iocp_test.cc b/test/core/event_engine/windows/iocp_test.cc
index 9e798ff7e212e..2eaaccdc49474 100644
--- a/test/core/event_engine/windows/iocp_test.cc
+++ b/test/core/event_engine/windows/iocp_test.cc
@@ -250,16 +250,6 @@ TEST_F(IOCPTest, KickThenShutdownCasusesNextWorkerToBeKicked) {
thread_pool->Quiesce();
}
-TEST_F(IOCPTest, CrashOnWatchingAClosedSocket) {
- auto thread_pool = grpc_event_engine::experimental::MakeThreadPool(8);
- IOCP iocp(thread_pool.get());
- SOCKET sockpair[2];
- CreateSockpair(sockpair, iocp.GetDefaultSocketFlags());
- closesocket(sockpair[0]);
- ASSERT_DEATH({ auto wrapped_client_socket = iocp.Watch(sockpair[0]); }, "");
- thread_pool->Quiesce();
-}
-
TEST_F(IOCPTest, StressTestThousandsOfSockets) {
// Start 10 threads, each with their own IOCP
// On each thread, create 50 socket pairs (100 sockets) and have them exchange
diff --git a/test/core/experiments/experiments_test.cc b/test/core/experiments/experiments_test.cc
index 2964104c3dd41..50e40d4af701e 100644
--- a/test/core/experiments/experiments_test.cc
+++ b/test/core/experiments/experiments_test.cc
@@ -14,80 +14,103 @@
// Auto generated by tools/codegen/core/gen_experiments.py
-#include "test/core/experiments/fixtures/experiments.h"
#include
+#include "test/core/experiments/fixtures/experiments.h"
+
#include
#include "gtest/gtest.h"
+
#include "src/core/lib/experiments/config.h"
#ifndef GRPC_EXPERIMENTS_ARE_FINAL
#if defined(GRPC_CFSTREAM)
-bool GetExperimentTestExperiment1ExpectedValue() { return false; }
+bool GetExperimentTestExperiment1ExpectedValue() {
+return false;
+}
-bool GetExperimentTestExperiment2ExpectedValue() { return true; }
+bool GetExperimentTestExperiment2ExpectedValue() {
+return true;
+}
bool GetExperimentTestExperiment3ExpectedValue() {
+
#ifdef NDEBUG
- return false;
+return false;
#else
- return true;
+return true;
#endif
+
}
-bool GetExperimentTestExperiment4ExpectedValue() { return true; }
+bool GetExperimentTestExperiment4ExpectedValue() {
+return true;
+}
#elif defined(GPR_WINDOWS)
-bool GetExperimentTestExperiment1ExpectedValue() { return false; }
+bool GetExperimentTestExperiment1ExpectedValue() {
+return false;
+}
-bool GetExperimentTestExperiment2ExpectedValue() { return false; }
+bool GetExperimentTestExperiment2ExpectedValue() {
+return false;
+}
bool GetExperimentTestExperiment3ExpectedValue() {
#ifdef NDEBUG
- return false;
+return false;
#else
- return true;
+return true;
#endif
+
}
-bool GetExperimentTestExperiment4ExpectedValue() { return true; }
+bool GetExperimentTestExperiment4ExpectedValue() {
+return true;
+}
#else
bool GetExperimentTestExperiment1ExpectedValue() {
#ifdef NDEBUG
- return false;
+return false;
#else
- return true;
+return true;
#endif
+
}
bool GetExperimentTestExperiment2ExpectedValue() {
#ifdef NDEBUG
- return false;
+return false;
#else
- return true;
+return true;
#endif
+
}
bool GetExperimentTestExperiment3ExpectedValue() {
#ifdef NDEBUG
- return false;
+return false;
#else
- return true;
+return true;
#endif
+
}
-bool GetExperimentTestExperiment4ExpectedValue() { return false; }
+bool GetExperimentTestExperiment4ExpectedValue() {
+return false;
+}
#endif
TEST(ExperimentsTest, CheckExperimentValuesTest) {
+
ASSERT_EQ(grpc_core::IsTestExperiment1Enabled(),
GetExperimentTestExperiment1ExpectedValue());
@@ -99,13 +122,15 @@ TEST(ExperimentsTest, CheckExperimentValuesTest) {
ASSERT_EQ(grpc_core::IsTestExperiment4Enabled(),
GetExperimentTestExperiment4ExpectedValue());
+
}
-#endif // GRPC_EXPERIMENTS_ARE_FINAL
+#endif // GRPC_EXPERIMENTS_ARE_FINAL
int main(int argc, char** argv) {
testing::InitGoogleTest(&argc, argv);
grpc_core::LoadTestOnlyExperimentsFromMetadata(
- grpc_core::g_test_experiment_metadata, grpc_core::kNumTestExperiments);
+ grpc_core::g_test_experiment_metadata, grpc_core::kNumTestExperiments);
return RUN_ALL_TESTS();
}
+
diff --git a/test/core/experiments/fixtures/experiments.cc b/test/core/experiments/fixtures/experiments.cc
index 8352ffb7ee432..259e1441ad2f9 100644
--- a/test/core/experiments/fixtures/experiments.cc
+++ b/test/core/experiments/fixtures/experiments.cc
@@ -14,10 +14,10 @@
// Auto generated by tools/codegen/core/gen_experiments.py
-#include "test/core/experiments/fixtures/experiments.h"
-
#include
+#include "test/core/experiments/fixtures/experiments.h"
+
#ifndef GRPC_EXPERIMENTS_ARE_FINAL
#if defined(GRPC_CFSTREAM)
@@ -35,20 +35,15 @@ const bool kDefaultForDebugOnly = false;
#else
const bool kDefaultForDebugOnly = true;
#endif
-} // namespace
+}
namespace grpc_core {
const ExperimentMetadata g_test_experiment_metadata[] = {
- {"test_experiment_1", description_test_experiment_1,
- additional_constraints_test_experiment_1, nullptr, 0, false, true},
- {"test_experiment_2", description_test_experiment_2,
- additional_constraints_test_experiment_2, nullptr, 0, true, true},
- {"test_experiment_3", description_test_experiment_3,
- additional_constraints_test_experiment_3, nullptr, 0, kDefaultForDebugOnly,
- true},
- {"test_experiment_4", description_test_experiment_4,
- additional_constraints_test_experiment_4, nullptr, 0, true, true},
+ {"test_experiment_1", description_test_experiment_1, additional_constraints_test_experiment_1, nullptr, 0, false, true},
+ {"test_experiment_2", description_test_experiment_2, additional_constraints_test_experiment_2, nullptr, 0, true, true},
+ {"test_experiment_3", description_test_experiment_3, additional_constraints_test_experiment_3, nullptr, 0, kDefaultForDebugOnly, true},
+ {"test_experiment_4", description_test_experiment_4, additional_constraints_test_experiment_4, nullptr, 0, true, true},
};
} // namespace grpc_core
@@ -68,20 +63,15 @@ const bool kDefaultForDebugOnly = false;
#else
const bool kDefaultForDebugOnly = true;
#endif
-} // namespace
+}
namespace grpc_core {
const ExperimentMetadata g_test_experiment_metadata[] = {
- {"test_experiment_1", description_test_experiment_1,
- additional_constraints_test_experiment_1, nullptr, 0, false, true},
- {"test_experiment_2", description_test_experiment_2,
- additional_constraints_test_experiment_2, nullptr, 0, false, true},
- {"test_experiment_3", description_test_experiment_3,
- additional_constraints_test_experiment_3, nullptr, 0, kDefaultForDebugOnly,
- true},
- {"test_experiment_4", description_test_experiment_4,
- additional_constraints_test_experiment_4, nullptr, 0, true, true},
+ {"test_experiment_1", description_test_experiment_1, additional_constraints_test_experiment_1, nullptr, 0, false, true},
+ {"test_experiment_2", description_test_experiment_2, additional_constraints_test_experiment_2, nullptr, 0, false, true},
+ {"test_experiment_3", description_test_experiment_3, additional_constraints_test_experiment_3, nullptr, 0, kDefaultForDebugOnly, true},
+ {"test_experiment_4", description_test_experiment_4, additional_constraints_test_experiment_4, nullptr, 0, true, true},
};
} // namespace grpc_core
@@ -101,22 +91,15 @@ const bool kDefaultForDebugOnly = false;
#else
const bool kDefaultForDebugOnly = true;
#endif
-} // namespace
+}
namespace grpc_core {
const ExperimentMetadata g_test_experiment_metadata[] = {
- {"test_experiment_1", description_test_experiment_1,
- additional_constraints_test_experiment_1, nullptr, 0, kDefaultForDebugOnly,
- true},
- {"test_experiment_2", description_test_experiment_2,
- additional_constraints_test_experiment_2, nullptr, 0, kDefaultForDebugOnly,
- true},
- {"test_experiment_3", description_test_experiment_3,
- additional_constraints_test_experiment_3, nullptr, 0, kDefaultForDebugOnly,
- true},
- {"test_experiment_4", description_test_experiment_4,
- additional_constraints_test_experiment_4, nullptr, 0, false, true},
+ {"test_experiment_1", description_test_experiment_1, additional_constraints_test_experiment_1, nullptr, 0, kDefaultForDebugOnly, true},
+ {"test_experiment_2", description_test_experiment_2, additional_constraints_test_experiment_2, nullptr, 0, kDefaultForDebugOnly, true},
+ {"test_experiment_3", description_test_experiment_3, additional_constraints_test_experiment_3, nullptr, 0, kDefaultForDebugOnly, true},
+ {"test_experiment_4", description_test_experiment_4, additional_constraints_test_experiment_4, nullptr, 0, false, true},
};
} // namespace grpc_core
diff --git a/test/core/experiments/fixtures/experiments.h b/test/core/experiments/fixtures/experiments.h
index 4d7df0b806417..c154226712c22 100644
--- a/test/core/experiments/fixtures/experiments.h
+++ b/test/core/experiments/fixtures/experiments.h
@@ -63,13 +63,13 @@ inline bool IsTestExperiment2Enabled() { return true; }
#ifndef NDEBUG
#define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_3
#endif
-inline bool IsTestExperiment3Enabled() {
+inline bool IsTestExperiment3Enabled() {
#ifdef NDEBUG
- return false;
+return false;
#else
- return true;
+return true;
#endif
-}
+ }
#define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_4
inline bool IsTestExperiment4Enabled() { return true; }
@@ -79,13 +79,13 @@ inline bool IsTestExperiment2Enabled() { return false; }
#ifndef NDEBUG
#define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_3
#endif
-inline bool IsTestExperiment3Enabled() {
+inline bool IsTestExperiment3Enabled() {
#ifdef NDEBUG
- return false;
+return false;
#else
- return true;
+return true;
#endif
-}
+ }
#define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_4
inline bool IsTestExperiment4Enabled() { return true; }
@@ -93,33 +93,33 @@ inline bool IsTestExperiment4Enabled() { return true; }
#ifndef NDEBUG
#define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_1
#endif
-inline bool IsTestExperiment1Enabled() {
+inline bool IsTestExperiment1Enabled() {
#ifdef NDEBUG
- return false;
+return false;
#else
- return true;
+return true;
#endif
-}
+ }
#ifndef NDEBUG
#define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_2
#endif
-inline bool IsTestExperiment2Enabled() {
+inline bool IsTestExperiment2Enabled() {
#ifdef NDEBUG
- return false;
+return false;
#else
- return true;
+return true;
#endif
-}
+ }
#ifndef NDEBUG
#define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_3
#endif
-inline bool IsTestExperiment3Enabled() {
+inline bool IsTestExperiment3Enabled() {
#ifdef NDEBUG
- return false;
+return false;
#else
- return true;
+return true;
#endif
-}
+ }
inline bool IsTestExperiment4Enabled() { return false; }
#endif
@@ -132,21 +132,13 @@ enum ExperimentIds {
kNumTestExperiments
};
#define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_1
-inline bool IsTestExperiment1Enabled() {
- return IsTestExperimentEnabled();
-}
+inline bool IsTestExperiment1Enabled() { return IsTestExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_2
-inline bool IsTestExperiment2Enabled() {
- return IsTestExperimentEnabled();
-}
+inline bool IsTestExperiment2Enabled() { return IsTestExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_3
-inline bool IsTestExperiment3Enabled() {
- return IsTestExperimentEnabled();
-}
+inline bool IsTestExperiment3Enabled() { return IsTestExperimentEnabled(); }
#define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_4
-inline bool IsTestExperiment4Enabled() {
- return IsTestExperimentEnabled();
-}
+inline bool IsTestExperiment4Enabled() { return IsTestExperimentEnabled(); }
extern const ExperimentMetadata g_test_experiment_metadata[kNumTestExperiments];
diff --git a/test/cpp/README-iOS.md b/test/cpp/README-iOS.md
index 188b66ed1e113..95fb3ca074fa8 100644
--- a/test/cpp/README-iOS.md
+++ b/test/cpp/README-iOS.md
@@ -5,7 +5,7 @@ However, it's ok to call `::testing::InitGoogleTest` in `main`, as `GTMGoogleTes
`grpc::testing::TestEnvironment` can also be called from `main`, as it does some test initialization (install crash handler, seed RNG) that's not strictly required to run testcases on iOS.
-## Porting exising C++ tests to run on iOS
+## Porting existing C++ tests to run on iOS
Please follow these guidelines when porting tests to run on iOS:
diff --git a/test/cpp/cocoapods/Podfile b/test/cpp/cocoapods/Podfile
index 5a2abc4a1a427..273a0157ed0de 100644
--- a/test/cpp/cocoapods/Podfile
+++ b/test/cpp/cocoapods/Podfile
@@ -25,7 +25,7 @@ post_install do |installer|
# CocoaPods creates duplicated library targets of gRPC-Core when the test targets include
# non-default subspecs of gRPC-Core. All of these library targets start with prefix 'gRPC-Core'
- # and require the same error suppresion.
+ # and require the same error suppression.
if target.name.start_with?('gRPC-Core')
target.build_configurations.each do |config|
# TODO(zyc): Remove this setting after the issue is resolved
diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc
index 22b46c08f14aa..d964042f37a26 100644
--- a/test/cpp/end2end/async_end2end_test.cc
+++ b/test/cpp/end2end/async_end2end_test.cc
@@ -234,7 +234,7 @@ bool plugin_has_sync_methods(std::unique_ptr& plugin) {
}
// This class disables the server builder plugins that may add sync services to
-// the server. If there are sync services, UnimplementedRpc test will triger
+// the server. If there are sync services, UnimplementedRpc test will trigger
// the sync unknown rpc routine on the server side, rather than the async one
// that needs to be tested here.
class ServerBuilderSyncPluginDisabler : public grpc::ServerBuilderOption {
@@ -322,7 +322,7 @@ class AsyncEnd2endTest : public ::testing::TestWithParam {
}
cq_ = builder.AddCompletionQueue();
- // TODO(zyc): make a test option to choose wheather sync plugins should be
+ // TODO(zyc): make a test option to choose whether sync plugins should be
// deleted
std::unique_ptr sync_plugin_disabler(
new ServerBuilderSyncPluginDisabler());
diff --git a/test/cpp/end2end/cfstream_test.cc b/test/cpp/end2end/cfstream_test.cc
index cba2e4f7ddd2f..35b8b3304a97e 100644
--- a/test/cpp/end2end/cfstream_test.cc
+++ b/test/cpp/end2end/cfstream_test.cc
@@ -312,7 +312,7 @@ std::vector CreateTestScenarios() {
INSTANTIATE_TEST_SUITE_P(CFStreamTest, CFStreamTest,
::testing::ValuesIn(CreateTestScenarios()));
-// gRPC should automatically detech network flaps (without enabling keepalives)
+// gRPC should automatically detect network flaps (without enabling keepalives)
// when CFStream is enabled
TEST_P(CFStreamTest, NetworkTransition) {
auto channel = BuildChannel();
diff --git a/test/cpp/end2end/channelz_service_test.cc b/test/cpp/end2end/channelz_service_test.cc
index 34a8983190400..62839f425f42a 100644
--- a/test/cpp/end2end/channelz_service_test.cc
+++ b/test/cpp/end2end/channelz_service_test.cc
@@ -216,7 +216,7 @@ class ChannelzServerTest : public ::testing::TestWithParam {
backends_.clear();
proxy_service_.reset();
// Ensure all pending callbacks are handled before finishing the test
- // to ensure hygene between test cases.
+ // to ensure hygiene between test cases.
// (requires any grpc-object-holding values be cleared out first).
grpc_event_engine::experimental::WaitForSingleOwner(
grpc_event_engine::experimental::GetDefaultEventEngine());
diff --git a/test/cpp/end2end/client_callback_end2end_test.cc b/test/cpp/end2end/client_callback_end2end_test.cc
index 1df284f3b6681..f209314be2205 100644
--- a/test/cpp/end2end/client_callback_end2end_test.cc
+++ b/test/cpp/end2end/client_callback_end2end_test.cc
@@ -1055,7 +1055,7 @@ TEST_P(ClientCallbackEnd2endTest, ResponseStreamServerCancelDuring) {
}
}
-// Server to cancel after writing all the respones to the stream but before
+// Server to cancel after writing all the responses to the stream but before
// returning to the client
TEST_P(ClientCallbackEnd2endTest, ResponseStreamServerCancelAfter) {
ResetStub();
diff --git a/test/cpp/end2end/client_lb_end2end_test.cc b/test/cpp/end2end/client_lb_end2end_test.cc
index a72c77b319f1e..1ea1041e1afdd 100644
--- a/test/cpp/end2end/client_lb_end2end_test.cc
+++ b/test/cpp/end2end/client_lb_end2end_test.cc
@@ -1021,7 +1021,7 @@ TEST_F(PickFirstTest, BackOffMinReconnect) {
const grpc_core::Duration waited =
grpc_core::Duration::FromTimespec(gpr_time_sub(t1, t0));
VLOG(2) << "Waited " << waited.millis() << " milliseconds";
- // We should have waited at least kMinReconnectBackOffMs. We substract one to
+ // We should have waited at least kMinReconnectBackOffMs. We subtract one to
// account for test and precision accuracy drift.
EXPECT_GE(waited.millis(),
(kMinReconnectBackOffMs * grpc_test_slowdown_factor()) - 1);
diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc
index 818a643b08950..88829e477ff1f 100644
--- a/test/cpp/end2end/end2end_test.cc
+++ b/test/cpp/end2end/end2end_test.cc
@@ -786,7 +786,7 @@ TEST_P(End2endServerTryCancelTest, ResponseStreamServerCancelDuring) {
TestResponseStreamServerCancel(CANCEL_DURING_PROCESSING);
}
-// Server to cancel after writing all the respones to the stream but before
+// Server to cancel after writing all the responses to the stream but before
// returning to the client
TEST_P(End2endServerTryCancelTest, ResponseStreamServerCancelAfter) {
TestResponseStreamServerCancel(CANCEL_AFTER_PROCESSING);
diff --git a/test/cpp/end2end/orca_service_end2end_test.cc b/test/cpp/end2end/orca_service_end2end_test.cc
index 5bc12964b20fb..6c219f57c10a5 100644
--- a/test/cpp/end2end/orca_service_end2end_test.cc
+++ b/test/cpp/end2end/orca_service_end2end_test.cc
@@ -76,6 +76,7 @@ class OrcaServiceEnd2endTest : public ::testing::Test {
grpc_core::Duration::Milliseconds(750) *
grpc_test_slowdown_factor();
auto elapsed = now - *last_response_time_;
+ LOG(INFO) << "received ORCA response after " << elapsed;
EXPECT_GE(elapsed, requested_interval_ - fudge_factor)
<< elapsed.ToString();
EXPECT_LE(elapsed, requested_interval_ + fudge_factor)
diff --git a/test/cpp/end2end/proto_server_reflection_test.cc b/test/cpp/end2end/proto_server_reflection_test.cc
index 1b4f8d9bd070d..6b5aa6fa18356 100644
--- a/test/cpp/end2end/proto_server_reflection_test.cc
+++ b/test/cpp/end2end/proto_server_reflection_test.cc
@@ -147,7 +147,7 @@ TEST_F(ProtoServerReflectionTest, CheckResponseWithLocalDescriptorPool) {
std::vector services;
desc_db_->GetServices(&services);
- // The service list has at least one service (reflection servcie).
+ // The service list has at least one service (reflection service).
EXPECT_TRUE(!services.empty());
for (auto it = services.begin(); it != services.end(); ++it) {
diff --git a/test/cpp/end2end/xds/xds_end2end_test.cc b/test/cpp/end2end/xds/xds_end2end_test.cc
index 428a88c5edc00..05fad509a0f2a 100644
--- a/test/cpp/end2end/xds/xds_end2end_test.cc
+++ b/test/cpp/end2end/xds/xds_end2end_test.cc
@@ -3507,6 +3507,9 @@ int main(int argc, char** argv) {
// updates from all the subchannels's FDs.
grpc_core::ConfigVars::Overrides overrides;
overrides.client_channel_backup_poll_interval_ms = 1;
+ overrides.trace =
+ "call,channel,client_channel,client_channel_call,client_channel_lb_call,"
+ "handshaker";
grpc_core::ConfigVars::SetOverrides(overrides);
#if TARGET_OS_IPHONE
// Workaround Apple CFStream bug
diff --git a/test/cpp/end2end/xds/xds_outlier_detection_end2end_test.cc b/test/cpp/end2end/xds/xds_outlier_detection_end2end_test.cc
index 1c99747b18dc0..9390f430c04ed 100644
--- a/test/cpp/end2end/xds/xds_outlier_detection_end2end_test.cc
+++ b/test/cpp/end2end/xds/xds_outlier_detection_end2end_test.cc
@@ -185,7 +185,7 @@ TEST_P(OutlierDetectionTest, SuccessRateMaxPercent) {
EXPECT_LE(absl::Now(), deadline);
if (absl::Now() >= deadline) break;
}
- // 1 backend should be ejected, trafficed picked up by another backend.
+ // 1 backend should be ejected, traffic picked up by another backend.
// No other backend should be ejected.
ResetBackendCounters();
CheckRpcSendOk(DEBUG_LOCATION, 100, rpc_options);
@@ -599,7 +599,7 @@ TEST_P(OutlierDetectionTest, FailurePercentageMaxPercentage) {
EXPECT_LE(absl::Now(), deadline);
if (absl::Now() >= deadline) break;
}
- // 1 backend should be ejected, trafficed picked up by another backend.
+ // 1 backend should be ejected, traffic picked up by another backend.
// No other backend should be ejected.
ResetBackendCounters();
CheckRpcSendOk(DEBUG_LOCATION, 100, rpc_options);
diff --git a/test/cpp/end2end/xds/xds_server.h b/test/cpp/end2end/xds/xds_server.h
index 5ba992abc597f..def8cefc1590f 100644
--- a/test/cpp/end2end/xds/xds_server.h
+++ b/test/cpp/end2end/xds/xds_server.h
@@ -131,9 +131,9 @@ class AdsServiceImpl
// Sets a callback to be invoked on request messages with respoonse_nonce
// set. The callback is passed the resource type and version.
void SetCheckVersionCallback(
- std::function check_version_callack) {
+ std::function check_version_callback) {
grpc_core::MutexLock lock(&ads_mu_);
- check_version_callack_ = std::move(check_version_callack);
+ check_version_callback_ = std::move(check_version_callback);
}
// Get the list of response state for each resource type.
@@ -368,9 +368,9 @@ class AdsServiceImpl
CHECK(absl::SimpleAtoi(request.version_info(),
&client_resource_type_version));
}
- if (check_version_callack_ != nullptr) {
- check_version_callack_(request.type_url(),
- client_resource_type_version);
+ if (check_version_callback_ != nullptr) {
+ check_version_callback_(request.type_url(),
+ client_resource_type_version);
}
} else {
int client_nonce;
@@ -586,7 +586,7 @@ class AdsServiceImpl
resource_type_response_state_ ABSL_GUARDED_BY(ads_mu_);
std::set resource_types_to_ignore_
ABSL_GUARDED_BY(ads_mu_);
- std::function check_version_callack_
+ std::function check_version_callback_
ABSL_GUARDED_BY(ads_mu_);
// An instance data member containing the current state of all resources.
// Note that an entry will exist whenever either of the following is true:
diff --git a/test/cpp/ext/filters/logging/library.h b/test/cpp/ext/filters/logging/library.h
index bffa8a18fe71e..fcb918660c1c6 100644
--- a/test/cpp/ext/filters/logging/library.h
+++ b/test/cpp/ext/filters/logging/library.h
@@ -83,12 +83,18 @@ class TestLoggingSink : public grpc_core::LoggingSink {
}
// Waits for \a duration till we have \a num_entries in the log.
- void WaitForNumEntries(size_t num_entries, absl::Duration duration) {
+ bool WaitForNumEntries(size_t num_entries, absl::Duration duration) {
absl::Time deadline = absl::Now() + duration * grpc_test_slowdown_factor();
grpc_core::MutexLock lock(&mu_);
while (entries_.size() != num_entries) {
- cv_.WaitWithDeadline(&mu_, deadline);
+ if (cv_.WaitWithDeadline(&mu_, deadline)) {
+ LOG(ERROR) << "\nDeadline expired while waiting on logging "
+ "entries\nExpected number: "
+ << num_entries << "\nActual number: " << entries_.size();
+ return false;
+ }
}
+ return true;
}
private:
diff --git a/test/cpp/ext/filters/logging/logging_test.cc b/test/cpp/ext/filters/logging/logging_test.cc
index e94c5c5889e90..e1ffd6941aca5 100644
--- a/test/cpp/ext/filters/logging/logging_test.cc
+++ b/test/cpp/ext/filters/logging/logging_test.cc
@@ -62,7 +62,7 @@ TEST_F(LoggingTest, SimpleRpc) {
context.AddMetadata("key", "value");
grpc::Status status = stub_->Echo(&context, request, &response);
EXPECT_TRUE(status.ok());
- g_test_logging_sink->WaitForNumEntries(12, absl::Seconds(5));
+ ASSERT_TRUE(g_test_logging_sink->WaitForNumEntries(12, absl::Seconds(5)));
EXPECT_THAT(
g_test_logging_sink->entries(),
::testing::UnorderedElementsAre(
@@ -246,7 +246,7 @@ TEST_F(LoggingTest, SimpleRpcNoMetadata) {
grpc::ClientContext context;
grpc::Status status = stub_->Echo(&context, request, &response);
EXPECT_TRUE(status.ok());
- g_test_logging_sink->WaitForNumEntries(12, absl::Seconds(5));
+ ASSERT_TRUE(g_test_logging_sink->WaitForNumEntries(12, absl::Seconds(5)));
EXPECT_THAT(
g_test_logging_sink->entries(),
::testing::UnorderedElementsAre(
@@ -447,7 +447,7 @@ TEST_F(LoggingTest, MetadataTruncated) {
context.AddMetadata("key-2", "value-2");
grpc::Status status = stub_->Echo(&context, request, &response);
EXPECT_TRUE(status.ok());
- g_test_logging_sink->WaitForNumEntries(12, absl::Seconds(5));
+ ASSERT_TRUE(g_test_logging_sink->WaitForNumEntries(12, absl::Seconds(5)));
EXPECT_THAT(
g_test_logging_sink->entries(),
::testing::UnorderedElementsAre(
@@ -630,7 +630,7 @@ TEST_F(LoggingTest, PayloadTruncated) {
grpc::ClientContext context;
grpc::Status status = stub_->Echo(&context, request, &response);
EXPECT_TRUE(status.ok());
- g_test_logging_sink->WaitForNumEntries(12, absl::Seconds(5));
+ ASSERT_TRUE(g_test_logging_sink->WaitForNumEntries(12, absl::Seconds(5)));
EXPECT_THAT(
g_test_logging_sink->entries(),
::testing::UnorderedElementsAre(
@@ -861,7 +861,7 @@ TEST_F(LoggingTest, ServerCancelsRpc) {
EXPECT_EQ(status.error_code(), 25);
EXPECT_EQ(status.error_message(), "error message");
EXPECT_EQ(status.error_details(), "binary error details");
- g_test_logging_sink->WaitForNumEntries(9, absl::Seconds(5));
+ ASSERT_TRUE(g_test_logging_sink->WaitForNumEntries(9, absl::Seconds(5)));
EXPECT_THAT(
g_test_logging_sink->entries(),
::testing::UnorderedElementsAre(
diff --git a/test/cpp/interop/interop_client.h b/test/cpp/interop/interop_client.h
index 2cf3fa81b1004..1abbb61668fc7 100644
--- a/test/cpp/interop/interop_client.h
+++ b/test/cpp/interop/interop_client.h
@@ -116,7 +116,7 @@ class InteropClient {
public:
typedef std::function()> ChannelCreationFunc;
// If new_stub_every_call = true, pointer to a new instance of
- // TestServce::Stub is returned by Get() everytime it is called
+ // TestService::Stub is returned by Get() everytime it is called
ServiceStub(ChannelCreationFunc channel_creation_func,
bool new_stub_every_call);
diff --git a/test/cpp/interop/istio_echo_server.cc b/test/cpp/interop/istio_echo_server.cc
index f661911f3e39b..61ec78a503398 100644
--- a/test/cpp/interop/istio_echo_server.cc
+++ b/test/cpp/interop/istio_echo_server.cc
@@ -151,11 +151,11 @@ void RunServer(const std::set& grpc_ports, const std::set& xds_ports,
int main(int argc, char** argv) {
// Preprocess argv, for two things:
- // 1. merge duplciate flags. So "--grpc=8080 --grpc=9090" becomes
+ // 1. merge duplicate flags. So "--grpc=8080 --grpc=9090" becomes
// "--grpc=8080,9090".
// 2. replace '-' to '_'. So "--istio-version=123" becomes
// "--istio_version=123".
- // 3. remove --version since that is specially interpretted by absl
+ // 3. remove --version since that is specially interpreted by absl
std::map> argv_dict;
for (int i = 0; i < argc; i++) {
std::string arg(argv[i]);
diff --git a/test/cpp/interop/metrics_client.cc b/test/cpp/interop/metrics_client.cc
index 06352eaed6b9c..1876f90cf981d 100644
--- a/test/cpp/interop/metrics_client.cc
+++ b/test/cpp/interop/metrics_client.cc
@@ -32,7 +32,7 @@
int kDeadlineSecs = 10;
ABSL_FLAG(std::string, metrics_server_address, "localhost:8081",
- "The metrics server addresses in the fomrat :");
+ "The metrics server addresses in the format :");
// TODO(Capstan): Consider using absl::Duration
ABSL_FLAG(int32_t, deadline_secs, kDeadlineSecs,
"The deadline (in seconds) for RCP call");
diff --git a/test/cpp/microbenchmarks/bm_event_engine_run.cc b/test/cpp/microbenchmarks/bm_event_engine_run.cc
index 752d9d440e9f3..418d88b9d327c 100644
--- a/test/cpp/microbenchmarks/bm_event_engine_run.cc
+++ b/test/cpp/microbenchmarks/bm_event_engine_run.cc
@@ -100,7 +100,7 @@ void BM_EventEngine_RunClosure(benchmark::State& state) {
int cb_count = state.range(0);
grpc_core::Notification* signal = new grpc_core::Notification();
std::atomic_int count{0};
- // Ignore leaks from this closure. For simplicty, this closure is not deleted
+ // Ignore leaks from this closure. For simplicity, this closure is not deleted
// because the closure may still be executing after the EventEngine is
// destroyed. This is because the default posix EventEngine's thread pool may
// get destroyed separately from the EventEngine.
diff --git a/test/cpp/microbenchmarks/fullstack_streaming_ping_pong.h b/test/cpp/microbenchmarks/fullstack_streaming_ping_pong.h
index fd2e0a001c620..4a18d7a1cecfe 100644
--- a/test/cpp/microbenchmarks/fullstack_streaming_ping_pong.h
+++ b/test/cpp/microbenchmarks/fullstack_streaming_ping_pong.h
@@ -42,7 +42,7 @@ static void* tag(intptr_t x) { return reinterpret_cast(x); }
// Repeatedly makes Streaming Bidi calls (exchanging a configurable number of
// messages in each call) in a loop on a single channel
//
-// First parmeter (i.e state.range(0)): Message size (in bytes) to use
+// First parameter (i.e state.range(0)): Message size (in bytes) to use
// Second parameter (i.e state.range(1)): Number of ping pong messages.
// Note: One ping-pong means two messages (one from client to server and
// the other from server to client):
@@ -138,7 +138,7 @@ static void BM_StreamingPingPong(benchmark::State& state) {
}
// Repeatedly sends ping pong messages in a single streaming Bidi call in a loop
-// First parmeter (i.e state.range(0)): Message size (in bytes) to use
+// First parameter (i.e state.range(0)): Message size (in bytes) to use
template
static void BM_StreamingPingPongMsgs(benchmark::State& state) {
const int msg_size = state.range(0);
@@ -229,7 +229,7 @@ static void BM_StreamingPingPongMsgs(benchmark::State& state) {
// sendmsg syscalls for streaming by coalescing 1. initial metadata with first
// message; 2. final streaming message with trailing metadata.
//
-// First parmeter (i.e state.range(0)): Message size (in bytes) to use
+// First parameter (i.e state.range(0)): Message size (in bytes) to use
// Second parameter (i.e state.range(1)): Number of ping pong messages.
// Note: One ping-pong means two messages (one from client to server and
// the other from server to client):
diff --git a/test/cpp/naming/resolver_component_tests_runner.py b/test/cpp/naming/resolver_component_tests_runner.py
index f6a32a646c4c7..ad36616dea0da 100755
--- a/test/cpp/naming/resolver_component_tests_runner.py
+++ b/test/cpp/naming/resolver_component_tests_runner.py
@@ -92,7 +92,7 @@ def wait_until_dns_server_is_up(args,
dns_server_subprocess.kill()
dns_server_subprocess.wait()
test_runner_log(('Failed to reach DNS server over TCP and/or UDP. '
- 'Exitting without running tests.'))
+ 'Exiting without running tests.'))
test_runner_log('======= DNS server stdout '
'(merged stdout and stderr) =============')
with open(dns_server_subprocess_output, 'r') as l:
diff --git a/test/cpp/naming/resolver_component_tests_runner_invoker.cc b/test/cpp/naming/resolver_component_tests_runner_invoker.cc
index 4c095a7d4bf55..64d83864640c7 100644
--- a/test/cpp/naming/resolver_component_tests_runner_invoker.cc
+++ b/test/cpp/naming/resolver_component_tests_runner_invoker.cc
@@ -112,7 +112,7 @@ int main(int argc, char** argv) {
test_srcdir.value() +
absl::GetFlag(FLAGS_grpc_test_directory_relative_to_test_srcdir) +
std::string("/test/cpp/naming");
- // Invoke bazel's executeable links to the .sh and .py scripts (don't use
+ // Invoke bazel's executable links to the .sh and .py scripts (don't use
// the .sh and .py suffixes) to make
// sure that we're using bazel's test environment.
result = grpc::testing::InvokeResolverComponentTestsRunner(
diff --git a/test/cpp/naming/utils/dns_server.py b/test/cpp/naming/utils/dns_server.py
index f9c118df7a18e..a6692a63dbc97 100755
--- a/test/cpp/naming/utils/dns_server.py
+++ b/test/cpp/naming/utils/dns_server.py
@@ -154,7 +154,7 @@ def flush_stdout_loop():
sys.stdout.flush()
time.sleep(sleep_time)
num_timeouts_so_far += 1
- print("Process timeout reached, or cancelled. Exitting 0.")
+ print("Process timeout reached, or cancelled. Exiting 0.")
os.kill(os.getpid(), signal.SIGTERM)
diff --git a/test/cpp/naming/utils/health_check.py b/test/cpp/naming/utils/health_check.py
index e754571db30b4..b8d7c354027eb 100755
--- a/test/cpp/naming/utils/health_check.py
+++ b/test/cpp/naming/utils/health_check.py
@@ -86,7 +86,7 @@ def wait_until_dns_server_is_up(args):
test_runner_log(
(
"Failed to reach DNS server over TCP and/or UDP. "
- "Exitting without running tests."
+ "Exiting without running tests."
)
)
sys.exit(1)
diff --git a/test/cpp/qps/qps_json_driver.cc b/test/cpp/qps/qps_json_driver.cc
index 4614eacf663cd..1fce38a057593 100644
--- a/test/cpp/qps/qps_json_driver.cc
+++ b/test/cpp/qps/qps_json_driver.cc
@@ -103,8 +103,9 @@ ConstructPerWorkerCredentialTypesMap() {
}
size_t comma = next_entry.find(',');
if (comma == std::string::npos) {
- LOG(ERROR) << "Expectd --per_worker_credential_types to be a list of the "
- "form: 'addr1,cred_type1;addr2,cred_type2;...' into.";
+ LOG(ERROR)
+ << "Expected --per_worker_credential_types to be a list of the "
+ "form: 'addr1,cred_type1;addr2,cred_type2;...' into.";
abort();
}
std::string addr = next_entry.substr(0, comma);
diff --git a/test/cpp/server/load_reporter/load_data_store_test.cc b/test/cpp/server/load_reporter/load_data_store_test.cc
index 454a9b6a161e0..5e8a6027cc4f1 100644
--- a/test/cpp/server/load_reporter/load_data_store_test.cc
+++ b/test/cpp/server/load_reporter/load_data_store_test.cc
@@ -132,7 +132,7 @@ TEST_F(LoadDataStoreTest, ReassignOrphanStores) {
auto assigned_to_lb_id_4 =
load_data_store.GetAssignedStores(kHostname2, kLbId4);
// There is no active LB for the first host now. kLbId4 is active but
- // it's for the second host, so it wll NOT adopt the orphaned stores.
+ // it's for the second host, so it will NOT adopt the orphaned stores.
EXPECT_FALSE(PerBalancerStoresContains(load_data_store, assigned_to_lb_id_4,
kHostname1, kLbId1, kLoadKey1));
EXPECT_FALSE(PerBalancerStoresContains(load_data_store, assigned_to_lb_id_4,
@@ -187,16 +187,16 @@ TEST_F(LoadDataStoreTest, OrphanAssignmentIsSticky) {
// Close the assigned_lb_id, orphaned_lb_id will be re-assigned again.
load_data_store.ReportStreamClosed(kHostname1, assigned_lb_id);
active_lb_ids.erase(assigned_lb_id);
- size_t orphaned_lb_id_occurences = 0;
+ size_t orphaned_lb_id_occurrences = 0;
for (const auto& lb_id : active_lb_ids) {
if (PerBalancerStoresContains(
load_data_store,
load_data_store.GetAssignedStores(kHostname1, lb_id), kHostname1,
orphaned_lb_id, kLoadKey1)) {
- orphaned_lb_id_occurences++;
+ orphaned_lb_id_occurrences++;
}
}
- EXPECT_EQ(orphaned_lb_id_occurences, 1U);
+ EXPECT_EQ(orphaned_lb_id_occurrences, 1U);
}
TEST_F(LoadDataStoreTest, HostTemporarilyLoseAllStreams) {
diff --git a/test/cpp/util/cli_call.h b/test/cpp/util/cli_call.h
index bb13e5e809c4b..16d5acbb663fa 100644
--- a/test/cpp/util/cli_call.h
+++ b/test/cpp/util/cli_call.h
@@ -80,7 +80,7 @@ class CliCall final {
void WritesDoneAndWait();
// Thread-safe Read. Blockingly receive a generic response message. Notify
- // writes if they are finished when this read is waiting for a resposne.
+ // writes if they are finished when this read is waiting for a response.
bool ReadAndMaybeNotifyWrite(
std::string* response,
IncomingMetadataContainer* server_initial_metadata);
@@ -97,7 +97,7 @@ class CliCall final {
grpc::CompletionQueue cq_;
gpr_mu write_mu_;
gpr_cv write_cv_; // Protected by write_mu_;
- bool write_done_; // Portected by write_mu_;
+ bool write_done_; // Protected by write_mu_;
};
} // namespace testing
diff --git a/test/distrib/bazel/test_single_bazel_version.sh b/test/distrib/bazel/test_single_bazel_version.sh
index 24682d3568cac..48feef0d6b10a 100755
--- a/test/distrib/bazel/test_single_bazel_version.sh
+++ b/test/distrib/bazel/test_single_bazel_version.sh
@@ -66,9 +66,6 @@ EXCLUDED_TARGETS=(
"-//third_party/toolchains/rbe_windows_bazel_6.3.2_vs2019/..."
"-//third_party/toolchains:rbe_windows_default_toolchain_suite"
- # TODO(jtattermusch): add back once fixed
- "-//examples/android/binder/..."
-
# Exclude bazelified tests as they contain some bazel hackery
"-//tools/bazelify_tests/..."
)
diff --git a/test/distrib/cpp/run_distrib_test_cmake.bat b/test/distrib/cpp/run_distrib_test_cmake.bat
index ec8828e1fd731..7c38255222256 100644
--- a/test/distrib/cpp/run_distrib_test_cmake.bat
+++ b/test/distrib/cpp/run_distrib_test_cmake.bat
@@ -19,7 +19,7 @@ cd /d %~dp0\..\..\..
@rem is on PATH. To avoid picking up the older version protoc.exe, we change the path to something non-existent.
set PATH=%PATH:ProtoC=DontPickupProtoC%
-@rem Install into ./testinstall, but use absolute path and foward slashes
+@rem Install into ./testinstall, but use absolute path and forward slashes
set INSTALL_DIR=%cd:\=/%/testinstall
@rem Download OpenSSL-Win32 originally installed from https://slproweb.com/products/Win32OpenSSL.html
diff --git a/test/distrib/cpp/run_distrib_test_cmake_for_dll.bat b/test/distrib/cpp/run_distrib_test_cmake_for_dll.bat
index e4676c018a8b6..b68ac6bfa7d17 100644
--- a/test/distrib/cpp/run_distrib_test_cmake_for_dll.bat
+++ b/test/distrib/cpp/run_distrib_test_cmake_for_dll.bat
@@ -19,7 +19,7 @@ cd /d %~dp0\..\..\..
@rem is on PATH. To avoid picking up the older version protoc.exe, we change the path to something non-existent.
set PATH=%PATH:ProtoC=DontPickupProtoC%
-@rem Install into ./testinstall, but use absolute path and foward slashes
+@rem Install into ./testinstall, but use absolute path and forward slashes
set INSTALL_DIR=%cd:\=/%/testinstall
@rem Download OpenSSL-Win32 originally installed from https://slproweb.com/products/Win32OpenSSL.html
diff --git a/tools/bazelify_tests/dockerimage_current_versions.bzl b/tools/bazelify_tests/dockerimage_current_versions.bzl
index 541d9a7b9dc44..f60d37e5d5be2 100644
--- a/tools/bazelify_tests/dockerimage_current_versions.bzl
+++ b/tools/bazelify_tests/dockerimage_current_versions.bzl
@@ -90,7 +90,6 @@ DOCKERIMAGE_CURRENT_VERSIONS = {
"tools/dockerfile/test/android_ndk.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/android_ndk@sha256:e4fd2e0048c4ffd2a04e4a41154ee469ed61e058cb704ee95071f7a3bdad507a",
"tools/dockerfile/test/bazel.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/bazel@sha256:be25af8c0e5faf39a585e7ddd657c4fd66513e4eba0ee0c687109b19ed462518",
"tools/dockerfile/test/bazel_arm64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/bazel_arm64@sha256:ce026fedc059c74bade52f4b87c54907a3cf9abb22f6a584dba584e1925bbc42",
- "tools/dockerfile/test/binder_transport_apk.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/binder_transport_apk@sha256:5dddb0d70ee427c7ee20d2b4f9261579218dd6b208b74c2913e0e3c79b3166f7",
"tools/dockerfile/test/csharp_debian11_arm64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/csharp_debian11_arm64@sha256:4d4bc5f15e03f3d3d8fd889670ecde2c66a2e4d2dd9db80733c05c1d90c8a248",
"tools/dockerfile/test/csharp_debian11_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/csharp_debian11_x64@sha256:0763d919b17b4cfe5b65aff3bf911c04e9e4d46d11649858742033facd9f534f",
"tools/dockerfile/test/cxx_alpine_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/cxx_alpine_x64@sha256:10587bea5d163bf5c34c6157ebd1863d22863d9d38bbaf5135ffc6fbf2b73004",
diff --git a/tools/bazelify_tests/test/strict_tests.bzl b/tools/bazelify_tests/test/strict_tests.bzl
index 90d39ee65fbc1..086d591313b30 100644
--- a/tools/bazelify_tests/test/strict_tests.bzl
+++ b/tools/bazelify_tests/test/strict_tests.bzl
@@ -31,7 +31,7 @@ def generate_strict_tests(name = ""):
strict_warning_jobs = []
for source in [
- ":all //src/core/... //src/compiler/... //examples/... -//examples/android/binder/...",
+ ":all //src/core/... //src/compiler/... //examples/...",
"//test/... -//test/core/... -//test/cpp/...",
"//test/core/end2end/...",
"//test/core/... -//test/core/end2end/...",
diff --git a/tools/dockerfile/grpc_clang_format/clang_format_all_the_things.sh b/tools/dockerfile/grpc_clang_format/clang_format_all_the_things.sh
index ffd486b5f6a13..4541cfd27ff88 100755
--- a/tools/dockerfile/grpc_clang_format/clang_format_all_the_things.sh
+++ b/tools/dockerfile/grpc_clang_format/clang_format_all_the_things.sh
@@ -16,7 +16,7 @@
set -e
# directories to run against
-DIRS="examples/cpp examples/android/binder src/core src/cpp test/core test/cpp include src/compiler src/ruby src/objective-c tools/distrib/python src/python/grpcio_observability"
+DIRS="examples/cpp src/core src/cpp test/core test/cpp include src/compiler src/ruby src/objective-c tools/distrib/python src/python/grpcio_observability"
# file matching patterns to check
GLOB="*.h *.c *.cc *.m *.mm"
diff --git a/tools/dockerfile/test/binder_transport_apk.current_version b/tools/dockerfile/test/binder_transport_apk.current_version
deleted file mode 100644
index ebb3af308e6c9..0000000000000
--- a/tools/dockerfile/test/binder_transport_apk.current_version
+++ /dev/null
@@ -1 +0,0 @@
-us-docker.pkg.dev/grpc-testing/testing-images-public/binder_transport_apk:bbd5ccb5bcc5e63beccba6b3b2e8c907a8335731@sha256:5dddb0d70ee427c7ee20d2b4f9261579218dd6b208b74c2913e0e3c79b3166f7
\ No newline at end of file
diff --git a/tools/dockerfile/test/binder_transport_apk/Dockerfile b/tools/dockerfile/test/binder_transport_apk/Dockerfile
deleted file mode 100644
index 24d50cee4748f..0000000000000
--- a/tools/dockerfile/test/binder_transport_apk/Dockerfile
+++ /dev/null
@@ -1,87 +0,0 @@
-# Copyright 2021 The 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.
-
-# Pinned version of the base image is used to avoid regressions caused
-# by rebuilding of this docker image. To see available versions, you can run
-# "gcloud container images list-tags gcr.io/oss-fuzz-base/base-builder"
-# This base image is built on Mar 12, 2024
-FROM gcr.io/oss-fuzz-base/base-builder@sha256:c3581153788bc49f3634fec3cd36a5d6dfd26632c4afc157fb6faf8ce3af732e
-
-# -------------------------- WARNING --------------------------------------
-# If you are making changes to this file, consider changing
-# https://github.com/google/oss-fuzz/blob/master/projects/grpc/Dockerfile
-# accordingly.
-# -------------------------------------------------------------------------
-
-# Install basic packages
-RUN apt-get update && apt-get -y install \
- autoconf \
- build-essential \
- curl \
- libtool \
- make \
- vim \
- wget
-
-#========================
-# Bazel installation
-
-# Must be in sync with tools/bazel
-ENV BAZEL_VERSION 7.3.1
-
-# The correct bazel version is already preinstalled, no need to use //tools/bazel wrapper.
-ENV DISABLE_BAZEL_WRAPPER 1
-
-# Download the correct bazel version and make sure it's on path.
-RUN BAZEL_ARCH_SUFFIX="$(uname -m | sed s/aarch64/arm64/)" \
- && curl -sSL --fail -o /usr/local/bin/bazel "https://github.com/bazelbuild/bazel/releases/download/$BAZEL_VERSION/bazel-$BAZEL_VERSION-linux-$BAZEL_ARCH_SUFFIX" \
- && chmod a+x /usr/local/bin/bazel
-
-# Normally we would run "bazel --version" here to make sure bazel
-# was correctly installed, but we can't do that because
-# of # https://github.com/bazelbuild/bazel/issues/11379.
-# We want to keep the arm64 version of the image buildable
-# on x64 with use of qemu-user-static & binfmt emulation,
-# but the self-extraction is broken for bazel currently.
-# The binary will work correctly when run on real arm64
-# hardware, when qemu-user-static isn't getting into the way.
-
-
-#========================
-# Java
-RUN apt-get install -y openjdk-21-jdk
-
-#========================
-# Android SDK/NDK installation
-ENV ANDROID_SDK_VERSION 11076708
-ENV ANDROID_NDK_VERSION 26.2.11394342
-
-ENV SDK_ROOT /opt/android-sdk
-
-RUN mkdir -p $SDK_ROOT
-RUN cd $SDK_ROOT && wget -O cmd.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_VERSION}_latest.zip && unzip -q cmd.zip && rm cmd.zip
-
-RUN yes | $SDK_ROOT/cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT --licenses # accept all licenses
-
-# This is not required but desirable to reduce the time to download and the chance of download failure.
-RUN mkdir -p ~/.android && touch ~/.android/repositories.cfg
-
-RUN $SDK_ROOT/cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT "ndk;$ANDROID_NDK_VERSION" "platforms;android-33" "build-tools;34.0.0"
-
-# Set environment variables for Bazel rules
-ENV ANDROID_HOME $SDK_ROOT
-ENV ANDROID_NDK_HOME $SDK_ROOT/ndk/$ANDROID_NDK_VERSION
-
-# Define the default command.
-CMD ["bash"]
diff --git a/tools/internal_ci/linux/grpc_bazel_build_in_docker.sh b/tools/internal_ci/linux/grpc_bazel_build_in_docker.sh
index 8bc71cd464312..5ddc5a006ab5c 100755
--- a/tools/internal_ci/linux/grpc_bazel_build_in_docker.sh
+++ b/tools/internal_ci/linux/grpc_bazel_build_in_docker.sh
@@ -15,8 +15,6 @@
# Build all basic targets using the strict warning option which leverages the
# clang compiler to check if sources can pass a set of warning options.
-# For now //examples/android/binder/ are excluded because it needs Android
-# SDK/NDK to be installed to build
set -ex
diff --git a/tools/internal_ci/linux/grpc_binder_transport_apk.cfg b/tools/internal_ci/linux/grpc_binder_transport_apk.cfg
deleted file mode 100644
index 0021005e88f78..0000000000000
--- a/tools/internal_ci/linux/grpc_binder_transport_apk.cfg
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright 2021 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.
-
-# Config file for the internal CI (in protobuf text format)
-
-# Location of the continuous shell script in repository.
-build_file: "grpc/tools/internal_ci/linux/grpc_binder_transport_apk.sh"
-timeout_mins: 60
-action {
- define_artifacts {
- regex: "**/*sponge_log.*"
- regex: "github/grpc/reports/**"
- }
-}
-
-env_vars {
- key: "BAZEL_SCRIPT"
- value: "tools/internal_ci/linux/grpc_binder_transport_apk_build_in_docker.sh"
-}
diff --git a/tools/internal_ci/linux/grpc_binder_transport_apk.sh b/tools/internal_ci/linux/grpc_binder_transport_apk.sh
deleted file mode 100755
index 1a27fa2488311..0000000000000
--- a/tools/internal_ci/linux/grpc_binder_transport_apk.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env bash
-# Copyright 2021 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.
-
-set -ex
-
-# avoid slow finalization after the script has exited.
-source $(dirname $0)/../../../tools/internal_ci/helper_scripts/move_src_tree_and_respawn_itself_rc
-
-# change to grpc repo root
-cd $(dirname $0)/../../..
-
-source tools/internal_ci/helper_scripts/prepare_build_linux_rc
-
-export DOCKERFILE_DIR=tools/dockerfile/test/binder_transport_apk
-exec tools/run_tests/dockerize/build_and_run_docker.sh "${BAZEL_SCRIPT}"
diff --git a/tools/internal_ci/linux/grpc_binder_transport_apk_build_in_docker.sh b/tools/internal_ci/linux/grpc_binder_transport_apk_build_in_docker.sh
deleted file mode 100755
index 300cace3a37c0..0000000000000
--- a/tools/internal_ci/linux/grpc_binder_transport_apk_build_in_docker.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env bash
-# Copyright 2021 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.
-
-set -ex
-
-echo $ANDROID_HOME
-echo $ANDROID_NDK_HOME
-
-# Android platforms only works with Bazel >= 7.0
-export OVERRIDE_BAZEL_VERSION=7.3.1
-
-python3 tools/run_tests/python_utils/bazel_report_helper.py --report_path bazel_binder_example_app
-bazel_binder_example_app/bazel_wrapper \
- --bazelrc=tools/remote_build/include/test_locally_with_resultstore_results.bazelrc \
- build \
- --extra_toolchains=@androidndk//:all \
- --android_platforms=//bazel/platforms/android:x86_64,//bazel/platforms/android:armeabi-v7a,//bazel/platforms/android:arm64-v8a \
- //examples/android/binder/java/io/grpc/binder/cpp/exampleclient:app \
- //examples/android/binder/java/io/grpc/binder/cpp/exampleserver:app
-
-# Make sure the Java code that will be invoked by binder transport
-# implementation builds
-python3 tools/run_tests/python_utils/bazel_report_helper.py --report_path bazel_binder_connection_helper
-bazel_binder_connection_helper/bazel_wrapper \
- --bazelrc=tools/remote_build/include/test_locally_with_resultstore_results.bazelrc \
- build \
- --define=use_strict_warning=true \
- @binder_transport_android_helper//io/grpc/binder/cpp:connection_helper
diff --git a/tools/run_tests/generated/tests.json b/tools/run_tests/generated/tests.json
index 991313c58b519..815a4fc2b0e00 100644
--- a/tools/run_tests/generated/tests.json
+++ b/tools/run_tests/generated/tests.json
@@ -1515,30 +1515,6 @@
],
"uses_polling": true
},
- {
- "args": [],
- "benchmark": false,
- "ci_platforms": [
- "linux",
- "mac",
- "posix",
- "windows"
- ],
- "cpu_cost": 1.0,
- "exclude_configs": [],
- "exclude_iomgrs": [],
- "flaky": false,
- "gtest": true,
- "language": "c++",
- "name": "cancel_after_invoke_test",
- "platforms": [
- "linux",
- "mac",
- "posix",
- "windows"
- ],
- "uses_polling": true
- },
{
"args": [],
"benchmark": false,
@@ -1659,30 +1635,6 @@
],
"uses_polling": true
},
- {
- "args": [],
- "benchmark": false,
- "ci_platforms": [
- "linux",
- "mac",
- "posix",
- "windows"
- ],
- "cpu_cost": 1.0,
- "exclude_configs": [],
- "exclude_iomgrs": [],
- "flaky": false,
- "gtest": true,
- "language": "c++",
- "name": "cancel_with_status_test",
- "platforms": [
- "linux",
- "mac",
- "posix",
- "windows"
- ],
- "uses_polling": true
- },
{
"args": [],
"benchmark": false,