diff --git a/0001-http2-Dont-drop-connections-on-metadata-limit-exceed.patch b/0001-http2-Dont-drop-connections-on-metadata-limit-exceed.patch new file mode 100644 index 0000000000000000000000000000000000000000..b1e5cc1e093de4bc331ecf39a6fef437488e0f8c --- /dev/null +++ b/0001-http2-Dont-drop-connections-on-metadata-limit-exceed.patch @@ -0,0 +1,695 @@ +From 9f01fd62c356c05d14abbaebfcedf0b387d1cb96 Mon Sep 17 00:00:00 2001 +From: Craig Tiller +Date: Tue, 7 Feb 2023 08:27:04 -0800 +Subject: [PATCH] [http2] Dont drop connections on metadata limit exceeded + (#32309) + +* [http] Dont drop connections on metadata limit exceeded + +* remove bad test + +* Automated change: Fix sanity tests + +--------- + +Co-authored-by: ctiller +--- + CMakeLists.txt | 38 --- + build_autogenerated.yaml | 13 - + .../chttp2/transport/hpack_parser.cc | 11 +- + .../ext/transport/chttp2/transport/internal.h | 2 - + .../ext/transport/chttp2/transport/parsing.cc | 6 +- + test/core/bad_client/generate_tests.bzl | 1 - + test/core/bad_client/tests/large_metadata.cc | 108 --------- + .../bad_client/tests/large_metadata.headers | 106 -------- + test/core/end2end/tests/large_metadata.cc | 226 +++++++++--------- + tools/run_tests/generated/tests.json | 24 -- + 10 files changed, 126 insertions(+), 409 deletions(-) + delete mode 100644 test/core/bad_client/tests/large_metadata.cc + delete mode 100644 test/core/bad_client/tests/large_metadata.headers + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 1ecaea8eb7..661ce2c511 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1078,7 +1078,6 @@ if(gRPC_BUILD_TESTS) + add_dependencies(buildtests_cxx istio_echo_server_test) + add_dependencies(buildtests_cxx join_test) + add_dependencies(buildtests_cxx json_test) +- add_dependencies(buildtests_cxx large_metadata_bad_client_test) + add_dependencies(buildtests_cxx latch_test) + add_dependencies(buildtests_cxx lb_get_cpu_stats_test) + add_dependencies(buildtests_cxx lb_load_data_store_test) +@@ -12796,43 +12795,6 @@ target_link_libraries(json_test + ) + + +-endif() +-if(gRPC_BUILD_TESTS) +- +-add_executable(large_metadata_bad_client_test +- test/core/bad_client/bad_client.cc +- test/core/bad_client/tests/large_metadata.cc +- test/core/end2end/cq_verifier.cc +- third_party/googletest/googletest/src/gtest-all.cc +- third_party/googletest/googlemock/src/gmock-all.cc +-) +- +-target_include_directories(large_metadata_bad_client_test +- PRIVATE +- ${CMAKE_CURRENT_SOURCE_DIR} +- ${CMAKE_CURRENT_SOURCE_DIR}/include +- ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} +- ${_gRPC_RE2_INCLUDE_DIR} +- ${_gRPC_SSL_INCLUDE_DIR} +- ${_gRPC_UPB_GENERATED_DIR} +- ${_gRPC_UPB_GRPC_GENERATED_DIR} +- ${_gRPC_UPB_INCLUDE_DIR} +- ${_gRPC_XXHASH_INCLUDE_DIR} +- ${_gRPC_ZLIB_INCLUDE_DIR} +- third_party/googletest/googletest/include +- third_party/googletest/googletest +- third_party/googletest/googlemock/include +- third_party/googletest/googlemock +- ${_gRPC_PROTO_GENS_DIR} +-) +- +-target_link_libraries(large_metadata_bad_client_test +- ${_gRPC_PROTOBUF_LIBRARIES} +- ${_gRPC_ALLTARGETS_LIBRARIES} +- grpc_test_util +-) +- +- + endif() + if(gRPC_BUILD_TESTS) + +diff --git a/build_autogenerated.yaml b/build_autogenerated.yaml +index 941a095cd1..9c2fbaf2b8 100644 +--- a/build_autogenerated.yaml ++++ b/build_autogenerated.yaml +@@ -6683,19 +6683,6 @@ targets: + deps: + - grpc_test_util + uses_polling: false +-- name: large_metadata_bad_client_test +- gtest: true +- build: test +- language: c++ +- headers: +- - test/core/bad_client/bad_client.h +- - test/core/end2end/cq_verifier.h +- src: +- - test/core/bad_client/bad_client.cc +- - test/core/bad_client/tests/large_metadata.cc +- - test/core/end2end/cq_verifier.cc +- deps: +- - grpc_test_util + - name: latch_test + gtest: true + build: test +diff --git a/src/core/ext/transport/chttp2/transport/hpack_parser.cc b/src/core/ext/transport/chttp2/transport/hpack_parser.cc +index 5354338cba..314707b59e 100644 +--- a/src/core/ext/transport/chttp2/transport/hpack_parser.cc ++++ b/src/core/ext/transport/chttp2/transport/hpack_parser.cc +@@ -1218,12 +1218,17 @@ class HPackParser::Parser { + "). GRPC_ARG_MAX_METADATA_SIZE can be set to increase this limit.", + *frame_length_, metadata_size_limit_); + if (metadata_buffer_ != nullptr) metadata_buffer_->Clear(); ++ // StreamId is used as a signal to skip this stream but keep the connection ++ // alive + return input_->MaybeSetErrorAndReturn( + [] { + return grpc_error_set_int( +- GRPC_ERROR_CREATE_FROM_STATIC_STRING( +- "received initial metadata size exceeds limit"), +- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED); ++ grpc_error_set_int( ++ GRPC_ERROR_CREATE_FROM_STATIC_STRING( ++ "received initial metadata size exceeds limit"), ++ GRPC_ERROR_INT_GRPC_STATUS, ++ GRPC_STATUS_RESOURCE_EXHAUSTED), ++ GRPC_ERROR_INT_STREAM_ID, 0); + }, + false); + } +diff --git a/src/core/ext/transport/chttp2/transport/internal.h b/src/core/ext/transport/chttp2/transport/internal.h +index 4af3c4ec9d..e01cff72c1 100644 +--- a/src/core/ext/transport/chttp2/transport/internal.h ++++ b/src/core/ext/transport/chttp2/transport/internal.h +@@ -541,8 +541,6 @@ struct grpc_chttp2_stream { + + grpc_core::Timestamp deadline = grpc_core::Timestamp::InfFuture(); + +- /** saw some stream level error */ +- grpc_error_handle forced_close_error = GRPC_ERROR_NONE; + /** how many header frames have we received? */ + uint8_t header_frames_received = 0; + /** number of bytes received - reset at end of parse thread execution */ +diff --git a/src/core/ext/transport/chttp2/transport/parsing.cc b/src/core/ext/transport/chttp2/transport/parsing.cc +index 6a45381e54..48dddc9313 100644 +--- a/src/core/ext/transport/chttp2/transport/parsing.cc ++++ b/src/core/ext/transport/chttp2/transport/parsing.cc +@@ -22,6 +22,7 @@ + #include + + #include ++#include + + #include "absl/base/attributes.h" + #include "absl/status/status.h" +@@ -675,10 +676,7 @@ static grpc_error_handle parse_frame_slice(grpc_chttp2_transport* t, + } + grpc_chttp2_parsing_become_skip_parser(t); + if (s) { +- s->forced_close_error = err; +- grpc_chttp2_add_rst_stream_to_next_write(t, t->incoming_stream_id, +- GRPC_HTTP2_PROTOCOL_ERROR, +- &s->stats.outgoing); ++ grpc_chttp2_cancel_stream(t, s, std::exchange(err, absl::OkStatus())); + } else { + GRPC_ERROR_UNREF(err); + } +diff --git a/test/core/bad_client/generate_tests.bzl b/test/core/bad_client/generate_tests.bzl +index 85aafed655..6100d142d6 100755 +--- a/test/core/bad_client/generate_tests.bzl ++++ b/test/core/bad_client/generate_tests.bzl +@@ -29,7 +29,6 @@ BAD_CLIENT_TESTS = { + "headers": test_options(), + "initial_settings_frame": test_options(), + "head_of_line_blocking": test_options(), +- "large_metadata": test_options(), + "out_of_bounds": test_options(), + "server_registered_method": test_options(), + "simple_request": test_options(), +diff --git a/test/core/bad_client/tests/large_metadata.cc b/test/core/bad_client/tests/large_metadata.cc +deleted file mode 100644 +index 9423dc3f6d..0000000000 +--- a/test/core/bad_client/tests/large_metadata.cc ++++ /dev/null +@@ -1,108 +0,0 @@ +-/* +- * +- * Copyright 2015 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 "absl/strings/str_format.h" +-#include "absl/strings/str_join.h" +- +-#include +-#include +- +-#include "src/core/lib/gpr/string.h" +-#include "src/core/lib/surface/server.h" +-#include "test/core/bad_client/bad_client.h" +-#include "test/core/end2end/cq_verifier.h" +- +-// The large-metadata headers that we're adding for this test are not +-// actually appended to this in a single string, since the string would +-// be longer than the C99 string literal limit. Instead, we dynamically +-// construct it by adding the large headers one at a time. +- +-/* headers: generated from large_metadata.headers in this directory */ +-#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_REQUEST \ +- "\x00\x00\x00\x04\x01\x00\x00\x00\x00" \ +- "\x00" \ +- "5{\x01\x05\x00\x00\x00\x01" \ +- "\x10\x05:path\x08/foo/bar" \ +- "\x10\x07:scheme\x04http" \ +- "\x10\x07:method\x04POST" \ +- "\x10\x0a:authority\x09localhost" \ +- "\x10\x0c" \ +- "content-type\x10" \ +- "application/grpc" \ +- "\x10\x14grpc-accept-encoding\x15identity,deflate,gzip" \ +- "\x10\x02te\x08trailers" \ +- "\x10\x0auser-agent\"bad-client grpc-c/0.12.0.0 (linux)" +- +-// Each large-metadata header is constructed from these start and end +-// strings, with a two-digit number in between. +-#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_START_STR "\x10\x0duser-header" +-#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_END_STR \ +- "~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \ +- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +- +-// The size of each large-metadata header string. +-#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_SIZE \ +- ((sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_START_STR) - 1) + 2 + \ +- (sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_END_STR) - 1)) +- +-// The number of headers we're adding and the total size of the client +-// payload. +-#define NUM_HEADERS 46 +-#define TOO_MUCH_METADATA_FROM_CLIENT_REQUEST_SIZE \ +- ((sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_REQUEST) - 1) + \ +- (NUM_HEADERS * PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_SIZE) + 1) +- +-static void verifier_fails(grpc_server* server, grpc_completion_queue* cq, +- void* /*registered_method*/) { +- while (grpc_core::Server::FromC(server)->HasOpenConnections()) { +- GPR_ASSERT(grpc_completion_queue_next( +- cq, grpc_timeout_milliseconds_to_deadline(20), nullptr) +- .type == GRPC_QUEUE_TIMEOUT); +- } +-} +- +-int main(int argc, char** argv) { +- int i; +- grpc_init(); +- grpc::testing::TestEnvironment env(&argc, argv); +- +- // Test sending more metadata than the server will accept. +- std::vector headers; +- for (i = 0; i < NUM_HEADERS; ++i) { +- headers.push_back(absl::StrFormat( +- "%s%02d%s", PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_START_STR, i, +- PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_END_STR)); +- } +- std::string client_headers = absl::StrJoin(headers, ""); +- char client_payload[TOO_MUCH_METADATA_FROM_CLIENT_REQUEST_SIZE] = +- PFX_TOO_MUCH_METADATA_FROM_CLIENT_REQUEST; +- memcpy(client_payload + sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_REQUEST) - 1, +- client_headers.data(), client_headers.size()); +- grpc_bad_client_arg args[2]; +- args[0] = connection_preface_arg; +- args[1].client_validator = rst_stream_client_validator; +- args[1].client_payload = client_payload; +- args[1].client_payload_length = sizeof(client_payload) - 1; +- +- grpc_run_bad_client_test(verifier_fails, args, 2, 0); +- +- grpc_shutdown(); +- return 0; +-} +diff --git a/test/core/bad_client/tests/large_metadata.headers b/test/core/bad_client/tests/large_metadata.headers +deleted file mode 100644 +index 75de3ef100..0000000000 +--- a/test/core/bad_client/tests/large_metadata.headers ++++ /dev/null +@@ -1,106 +0,0 @@ +-# headers used in simple_request.c +-# use tools/codegen/core/gen_header_frame.py --set_end_stream to generate +-# the binary strings contained in the source code +-:path: /foo/bar +-:scheme: http +-:method: POST +-:authority: localhost +-content-type: application/grpc +-grpc-accept-encoding: identity,deflate,gzip +-te: trailers +-user-agent: bad-client grpc-c/0.12.0.0 (linux) +-user-header00: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header01: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header02: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header03: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header04: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header05: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header06: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header07: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header08: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header09: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header22: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header23: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header24: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header25: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header26: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header27: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header28: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header29: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header30: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header31: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header32: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header33: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header34: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header35: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header36: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header37: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header38: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header39: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header40: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header41: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header42: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header43: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header44: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header45: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header46: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header47: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header48: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header49: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header50: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header51: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header52: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header53: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header54: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header55: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header56: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header57: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header58: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header59: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header60: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header61: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header62: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header63: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header64: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header65: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header66: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header67: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header68: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header69: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header70: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header71: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header72: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header73: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header74: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header75: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header76: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header77: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header78: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header79: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header80: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header81: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header82: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header83: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header84: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header85: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header86: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header87: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header88: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header89: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header90: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header91: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header92: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header93: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +-user-header94: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +diff --git a/test/core/end2end/tests/large_metadata.cc b/test/core/end2end/tests/large_metadata.cc +index 72cf519899..08cd20cb4f 100644 +--- a/test/core/end2end/tests/large_metadata.cc ++++ b/test/core/end2end/tests/large_metadata.cc +@@ -247,10 +247,6 @@ static void test_request_with_large_metadata(grpc_end2end_test_config config) { + // Server responds with metadata larger than what the client accepts. + static void test_request_with_bad_large_metadata_response( + grpc_end2end_test_config config) { +- grpc_call* c; +- grpc_call* s; +- grpc_metadata meta; +- const size_t large_size = 64 * 1024; + grpc_arg arg; + arg.type = GRPC_ARG_INTEGER; + arg.key = const_cast(GRPC_ARG_MAX_METADATA_SIZE); +@@ -259,115 +255,125 @@ static void test_request_with_bad_large_metadata_response( + grpc_end2end_test_fixture f = begin_test( + config, "test_request_with_bad_large_metadata_response", &args, &args); + cq_verifier* cqv = cq_verifier_create(f.cq); +- grpc_op ops[6]; +- grpc_op* op; +- grpc_metadata_array initial_metadata_recv; +- grpc_metadata_array trailing_metadata_recv; +- grpc_metadata_array request_metadata_recv; +- grpc_call_details call_details; +- grpc_status_code status; +- grpc_call_error error; +- grpc_slice details; +- int was_cancelled = 2; +- +- gpr_timespec deadline = five_seconds_from_now(); +- c = grpc_channel_create_call(f.client, nullptr, GRPC_PROPAGATE_DEFAULTS, f.cq, +- grpc_slice_from_static_string("/foo"), nullptr, +- deadline, nullptr); +- GPR_ASSERT(c); +- +- meta.key = grpc_slice_from_static_string("key"); +- meta.value = grpc_slice_malloc(large_size); +- memset(GRPC_SLICE_START_PTR(meta.value), 'a', large_size); +- +- grpc_metadata_array_init(&initial_metadata_recv); +- grpc_metadata_array_init(&trailing_metadata_recv); +- grpc_metadata_array_init(&request_metadata_recv); +- grpc_call_details_init(&call_details); +- +- memset(ops, 0, sizeof(ops)); +- // Client: send request. +- op = ops; +- op->op = GRPC_OP_SEND_INITIAL_METADATA; +- op->data.send_initial_metadata.count = 0; +- op->flags = 0; +- op->reserved = nullptr; +- op++; +- op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT; +- op->flags = 0; +- op->reserved = nullptr; +- op++; +- op->op = GRPC_OP_RECV_INITIAL_METADATA; +- op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv; +- op->flags = 0; +- op->reserved = nullptr; +- op++; +- op->op = GRPC_OP_RECV_STATUS_ON_CLIENT; +- op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv; +- op->data.recv_status_on_client.status = &status; +- op->data.recv_status_on_client.status_details = &details; +- op->flags = 0; +- op->reserved = nullptr; +- op++; +- error = grpc_call_start_batch(c, ops, static_cast(op - ops), tag(1), +- nullptr); +- GPR_ASSERT(GRPC_CALL_OK == error); +- +- error = +- grpc_server_request_call(f.server, &s, &call_details, +- &request_metadata_recv, f.cq, f.cq, tag(101)); +- GPR_ASSERT(GRPC_CALL_OK == error); +- +- CQ_EXPECT_COMPLETION(cqv, tag(101), 1); +- cq_verify(cqv); +- +- memset(ops, 0, sizeof(ops)); +- // Server: send large initial metadata +- op = ops; +- op->op = GRPC_OP_SEND_INITIAL_METADATA; +- op->data.send_initial_metadata.count = 1; +- op->data.send_initial_metadata.metadata = &meta; +- op->flags = 0; +- op->reserved = nullptr; +- op++; +- op->op = GRPC_OP_RECV_CLOSE_ON_SERVER; +- op->data.recv_close_on_server.cancelled = &was_cancelled; +- op->flags = 0; +- op->reserved = nullptr; +- op++; +- op->op = GRPC_OP_SEND_STATUS_FROM_SERVER; +- op->data.send_status_from_server.trailing_metadata_count = 0; +- op->data.send_status_from_server.status = GRPC_STATUS_OK; +- grpc_slice status_details = grpc_slice_from_static_string("xyz"); +- op->data.send_status_from_server.status_details = &status_details; +- op->flags = 0; +- op->reserved = nullptr; +- op++; +- error = grpc_call_start_batch(s, ops, static_cast(op - ops), tag(102), +- nullptr); +- GPR_ASSERT(GRPC_CALL_OK == error); +- CQ_EXPECT_COMPLETION(cqv, tag(102), 1); +- CQ_EXPECT_COMPLETION(cqv, tag(1), 1); +- cq_verify(cqv); +- +- GPR_ASSERT(status == GRPC_STATUS_RESOURCE_EXHAUSTED); +- GPR_ASSERT(0 == grpc_slice_str_cmp( +- details, "received initial metadata size exceeds limit")); +- GPR_ASSERT(0 == grpc_slice_str_cmp(call_details.method, "/foo")); +- +- grpc_slice_unref(details); +- grpc_metadata_array_destroy(&initial_metadata_recv); +- grpc_metadata_array_destroy(&trailing_metadata_recv); +- grpc_metadata_array_destroy(&request_metadata_recv); +- grpc_call_details_destroy(&call_details); +- +- grpc_call_unref(c); +- grpc_call_unref(s); + ++ for (int i = 0; i < 10; i++) { ++ grpc_call* c; ++ grpc_call* s; ++ grpc_metadata meta; ++ const size_t large_size = 64 * 1024; ++ grpc_op ops[6]; ++ grpc_op* op; ++ grpc_metadata_array initial_metadata_recv; ++ grpc_metadata_array trailing_metadata_recv; ++ grpc_metadata_array request_metadata_recv; ++ grpc_call_details call_details; ++ grpc_status_code status; ++ grpc_call_error error; ++ grpc_slice details; ++ int was_cancelled = 2; ++ ++ gpr_timespec deadline = five_seconds_from_now(); ++ c = grpc_channel_create_call(f.client, nullptr, GRPC_PROPAGATE_DEFAULTS, ++ f.cq, grpc_slice_from_static_string("/foo"), ++ nullptr, deadline, nullptr); ++ GPR_ASSERT(c); ++ ++ meta.key = grpc_slice_from_static_string("key"); ++ meta.value = grpc_slice_malloc(large_size); ++ memset(GRPC_SLICE_START_PTR(meta.value), 'a', large_size); ++ ++ grpc_metadata_array_init(&initial_metadata_recv); ++ grpc_metadata_array_init(&trailing_metadata_recv); ++ grpc_metadata_array_init(&request_metadata_recv); ++ grpc_call_details_init(&call_details); ++ ++ memset(ops, 0, sizeof(ops)); ++ // Client: send request. ++ op = ops; ++ op->op = GRPC_OP_SEND_INITIAL_METADATA; ++ op->data.send_initial_metadata.count = 0; ++ op->flags = 0; ++ op->reserved = nullptr; ++ op++; ++ op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT; ++ op->flags = 0; ++ op->reserved = nullptr; ++ op++; ++ op->op = GRPC_OP_RECV_INITIAL_METADATA; ++ op->data.recv_initial_metadata.recv_initial_metadata = ++ &initial_metadata_recv; ++ op->flags = 0; ++ op->reserved = nullptr; ++ op++; ++ op->op = GRPC_OP_RECV_STATUS_ON_CLIENT; ++ op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv; ++ op->data.recv_status_on_client.status = &status; ++ op->data.recv_status_on_client.status_details = &details; ++ op->flags = 0; ++ op->reserved = nullptr; ++ op++; ++ error = grpc_call_start_batch(c, ops, static_cast(op - ops), tag(1), ++ nullptr); ++ GPR_ASSERT(GRPC_CALL_OK == error); ++ ++ error = ++ grpc_server_request_call(f.server, &s, &call_details, ++ &request_metadata_recv, f.cq, f.cq, tag(101)); ++ GPR_ASSERT(GRPC_CALL_OK == error); ++ ++ CQ_EXPECT_COMPLETION(cqv, tag(101), 1); ++ cq_verify(cqv); ++ ++ memset(ops, 0, sizeof(ops)); ++ // Server: send large initial metadata ++ op = ops; ++ op->op = GRPC_OP_SEND_INITIAL_METADATA; ++ op->data.send_initial_metadata.count = 1; ++ op->data.send_initial_metadata.metadata = &meta; ++ op->flags = 0; ++ op->reserved = nullptr; ++ op++; ++ op->op = GRPC_OP_RECV_CLOSE_ON_SERVER; ++ op->data.recv_close_on_server.cancelled = &was_cancelled; ++ op->flags = 0; ++ op->reserved = nullptr; ++ op++; ++ op->op = GRPC_OP_SEND_STATUS_FROM_SERVER; ++ op->data.send_status_from_server.trailing_metadata_count = 0; ++ op->data.send_status_from_server.status = GRPC_STATUS_OK; ++ grpc_slice status_details = grpc_slice_from_static_string("xyz"); ++ op->data.send_status_from_server.status_details = &status_details; ++ op->flags = 0; ++ op->reserved = nullptr; ++ op++; ++ error = grpc_call_start_batch(s, ops, static_cast(op - ops), ++ tag(102), nullptr); ++ GPR_ASSERT(GRPC_CALL_OK == error); ++ CQ_EXPECT_COMPLETION(cqv, tag(102), 1); ++ CQ_EXPECT_COMPLETION(cqv, tag(1), 1); ++ cq_verify(cqv); ++ ++ GPR_ASSERT(status == GRPC_STATUS_RESOURCE_EXHAUSTED); ++ const char* expected_error = "received initial metadata size exceeds limit"; ++ grpc_slice actual_error = ++ grpc_slice_split_head(&details, strlen(expected_error)); ++ GPR_ASSERT(0 == grpc_slice_str_cmp(actual_error, expected_error)); ++ GPR_ASSERT(0 == grpc_slice_str_cmp(call_details.method, "/foo")); ++ ++ grpc_slice_unref(actual_error); ++ grpc_slice_unref(details); ++ grpc_metadata_array_destroy(&initial_metadata_recv); ++ grpc_metadata_array_destroy(&trailing_metadata_recv); ++ grpc_metadata_array_destroy(&request_metadata_recv); ++ grpc_call_details_destroy(&call_details); ++ ++ grpc_call_unref(c); ++ grpc_call_unref(s); ++ ++ grpc_slice_unref(meta.value); ++ } + cq_verifier_destroy(cqv); + +- grpc_slice_unref(meta.value); +- + end_test(&f); + config.tear_down_data(&f); + } +diff --git a/tools/run_tests/generated/tests.json b/tools/run_tests/generated/tests.json +index 9f21710575..0cf8b37e76 100644 +--- a/tools/run_tests/generated/tests.json ++++ b/tools/run_tests/generated/tests.json +@@ -5087,30 +5087,6 @@ + ], + "uses_polling": false + }, +- { +- "args": [], +- "benchmark": false, +- "ci_platforms": [ +- "linux", +- "mac", +- "posix", +- "windows" +- ], +- "cpu_cost": 1.0, +- "exclude_configs": [], +- "exclude_iomgrs": [], +- "flaky": false, +- "gtest": true, +- "language": "c++", +- "name": "large_metadata_bad_client_test", +- "platforms": [ +- "linux", +- "mac", +- "posix", +- "windows" +- ], +- "uses_polling": true +- }, + { + "args": [], + "benchmark": false, +-- +2.41.0 + diff --git a/31671.patch b/31671.patch new file mode 100644 index 0000000000000000000000000000000000000000..1d85e39e969de2c303e721f71291881b0520fa36 --- /dev/null +++ b/31671.patch @@ -0,0 +1,28 @@ +From beb3d7c392c22517c5a91e2f13558bee379abb2a Mon Sep 17 00:00:00 2001 +From: "Benjamin A. Beasley" +Date: Wed, 16 Nov 2022 09:00:21 -0500 +Subject: [PATCH] Use CMake variables for paths in pkg-config files + +Use @gRPC_INSTALL_LIBDIR@ for libdir; this fixes an incorrect +-L/usr/lib on multilib Linux systems where that is the 32-bit library +path and the correct path is /usr/lib64. + +Use @gRPC_INSTALL_INCLUDEDIR@ for consistency. +--- + cmake/pkg-config-template.pc.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/cmake/pkg-config-template.pc.in b/cmake/pkg-config-template.pc.in +index d56154bb3a53..5a56b4f88530 100644 +--- a/cmake/pkg-config-template.pc.in ++++ b/cmake/pkg-config-template.pc.in +@@ -1,7 +1,7 @@ + prefix=@CMAKE_INSTALL_PREFIX@ + exec_prefix=${prefix} +-includedir=${prefix}/include +-libdir=${exec_prefix}/lib ++includedir=${prefix}/@gRPC_INSTALL_INCLUDEDIR@ ++libdir=${exec_prefix}/@gRPC_INSTALL_LIBDIR@ + + Name: @PC_NAME@ + Description: @PC_DESCRIPTION@ diff --git a/data-plane-api-9c42588c956220b48eb3099d186487c2f04d32ec.tar.gz b/data-plane-api-9c42588c956220b48eb3099d186487c2f04d32ec.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..5f8d23e2897c6597607f2fad7a8d9b0650bfe546 Binary files /dev/null and b/data-plane-api-9c42588c956220b48eb3099d186487c2f04d32ec.tar.gz differ diff --git a/googleapis-2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz b/googleapis-2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..5d9001f3dff8dec1880c06c0de100a0c2fc65094 Binary files /dev/null and b/googleapis-2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz differ diff --git a/googletest-0e402173c97aea7a00749e825b194bfede4f2e45.tar.gz b/googletest-0e402173c97aea7a00749e825b194bfede4f2e45.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..a95e3073c8c4a70adf790f2126614763f6cb3579 Binary files /dev/null and b/googletest-0e402173c97aea7a00749e825b194bfede4f2e45.tar.gz differ diff --git a/grpc-1.36.4-python-grpcio_tests-fixture-super.patch b/grpc-1.36.4-python-grpcio_tests-fixture-super.patch new file mode 100644 index 0000000000000000000000000000000000000000..098df226f3e6331ab16b9818ae41c5d698615cff --- /dev/null +++ b/grpc-1.36.4-python-grpcio_tests-fixture-super.patch @@ -0,0 +1,45 @@ +diff -Naur grpc-1.36.4-original/src/python/grpcio_tests/tests/health_check/_health_servicer_test.py grpc-1.36.4/src/python/grpcio_tests/tests/health_check/_health_servicer_test.py +--- grpc-1.36.4-original/src/python/grpcio_tests/tests/health_check/_health_servicer_test.py 2021-03-17 15:59:05.000000000 -0400 ++++ grpc-1.36.4/src/python/grpcio_tests/tests/health_check/_health_servicer_test.py 2021-03-22 16:39:05.558398948 -0400 +@@ -234,9 +234,7 @@ + + def setUp(self): + self._thread_pool = thread_pool.RecordingThreadPool(max_workers=None) +- super(HealthServicerTest, +- self).start_server(non_blocking=True, +- thread_pool=self._thread_pool) ++ super().start_server(non_blocking=True, thread_pool=self._thread_pool) + + def test_check_empty_service(self): + request = health_pb2.HealthCheckRequest() +@@ -273,8 +271,7 @@ + class HealthServicerBackwardsCompatibleWatchTest(BaseWatchTests.WatchTests): + + def setUp(self): +- super(HealthServicerBackwardsCompatibleWatchTest, +- self).start_server(non_blocking=False, thread_pool=None) ++ super().start_server(non_blocking=False, thread_pool=None) + + + if __name__ == '__main__': +diff -Naur grpc-1.36.4-original/src/python/grpcio_tests/tests/protoc_plugin/_python_plugin_test.py grpc-1.36.4/src/python/grpcio_tests/tests/protoc_plugin/_python_plugin_test.py +--- grpc-1.36.4-original/src/python/grpcio_tests/tests/protoc_plugin/_python_plugin_test.py 2021-03-17 15:59:05.000000000 -0400 ++++ grpc-1.36.4/src/python/grpcio_tests/tests/protoc_plugin/_python_plugin_test.py 2021-03-22 16:39:05.559398954 -0400 +@@ -532,7 +532,7 @@ + request_iterator, context) + + def setUp(self): +- super(SimpleStubsPluginTest, self).setUp() ++ super().setUp() + self._server = test_common.test_server() + service_pb2_grpc.add_TestServiceServicer_to_server( + self.Servicer(), self._server) +@@ -542,7 +542,7 @@ + + def tearDown(self): + self._server.stop(None) +- super(SimpleStubsPluginTest, self).tearDown() ++ super().tearDown() + + def testUnaryCall(self): + request = request_pb2.SimpleRequest(response_size=13) diff --git a/grpc-1.37.0-grpc_cli-do-not-link-gtest-gmock.patch b/grpc-1.37.0-grpc_cli-do-not-link-gtest-gmock.patch new file mode 100644 index 0000000000000000000000000000000000000000..70b0abc47dfcebeacca4a912ac51fd3872e707cb --- /dev/null +++ b/grpc-1.37.0-grpc_cli-do-not-link-gtest-gmock.patch @@ -0,0 +1,50 @@ +diff -Naur grpc-1.37.1-original/CMakeLists.txt grpc-1.37.1/CMakeLists.txt +--- grpc-1.37.1-original/CMakeLists.txt 2021-04-27 18:01:25.000000000 -0400 ++++ grpc-1.37.1/CMakeLists.txt 2021-05-04 11:00:04.934427672 -0400 +@@ -3294,10 +3294,6 @@ + ${_gRPC_UPB_INCLUDE_DIR} + ${_gRPC_XXHASH_INCLUDE_DIR} + ${_gRPC_ZLIB_INCLUDE_DIR} +- third_party/googletest/googletest/include +- third_party/googletest/googletest +- third_party/googletest/googlemock/include +- third_party/googletest/googlemock + ${_gRPC_PROTO_GENS_DIR} + ) + target_link_libraries(grpc++_test_config +@@ -10669,7 +10665,6 @@ + + + endif() +-if(gRPC_BUILD_TESTS) + + add_executable(grpc_cli + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.pb.cc +@@ -10683,8 +10678,6 @@ + test/cpp/util/proto_file_parser.cc + test/cpp/util/proto_reflection_descriptor_database.cc + test/cpp/util/service_describer.cc +- third_party/googletest/googletest/src/gtest-all.cc +- third_party/googletest/googlemock/src/gmock-all.cc + ) + + target_include_directories(grpc_cli +@@ -10699,10 +10692,6 @@ + ${_gRPC_UPB_INCLUDE_DIR} + ${_gRPC_XXHASH_INCLUDE_DIR} + ${_gRPC_ZLIB_INCLUDE_DIR} +- third_party/googletest/googletest/include +- third_party/googletest/googletest +- third_party/googletest/googlemock/include +- third_party/googletest/googlemock + ${_gRPC_PROTO_GENS_DIR} + ) + +@@ -10715,7 +10704,6 @@ + ) + + +-endif() + if(gRPC_BUILD_CODEGEN AND gRPC_BUILD_GRPC_CPP_PLUGIN) + + add_executable(grpc_cpp_plugin diff --git a/grpc-1.39.0-system-crypto-policies.patch b/grpc-1.39.0-system-crypto-policies.patch new file mode 100644 index 0000000000000000000000000000000000000000..f6db78291c757844d21090fe2f6892c3ca2eea2d --- /dev/null +++ b/grpc-1.39.0-system-crypto-policies.patch @@ -0,0 +1,40 @@ +diff -Naur grpc-1.39.0-original/src/objective-c/tests/CronetTests/CronetUnitTests.mm grpc-1.39.0/src/objective-c/tests/CronetTests/CronetUnitTests.mm +--- grpc-1.39.0-original/src/objective-c/tests/CronetTests/CronetUnitTests.mm 2021-07-20 18:39:39.000000000 -0400 ++++ grpc-1.39.0/src/objective-c/tests/CronetTests/CronetUnitTests.mm 2021-07-23 14:42:11.649278304 -0400 +@@ -103,7 +103,7 @@ + BIO_free(pem); + + // Select cipher suite +- SSL_CTX_set_cipher_list(ctx, "ECDHE-RSA-AES128-GCM-SHA256"); ++ SSL_CTX_set_cipher_list(ctx, "PROFILE=SYSTEM"); + + // Select ALPN protocol + SSL_CTX_set_alpn_select_cb(ctx, alpn_cb, NULL); +diff -Naur grpc-1.39.0-original/test/core/handshake/client_ssl.cc grpc-1.39.0/test/core/handshake/client_ssl.cc +--- grpc-1.39.0-original/test/core/handshake/client_ssl.cc 2021-07-20 18:39:39.000000000 -0400 ++++ grpc-1.39.0/test/core/handshake/client_ssl.cc 2021-07-23 14:41:27.549570232 -0400 +@@ -220,9 +220,7 @@ + + // Set the cipher list to match the one expressed in + // src/core/tsi/ssl_transport_security.cc. +- const char* cipher_list = +- "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-" +- "SHA384:ECDHE-RSA-AES256-GCM-SHA384"; ++ const char* cipher_list = "PROFILE=SYSTEM"; + if (!SSL_CTX_set_cipher_list(ctx, cipher_list)) { + ERR_print_errors_fp(stderr); + gpr_log(GPR_ERROR, "Couldn't set server cipher list."); +diff -Naur grpc-1.39.0-original/test/core/handshake/server_ssl_common.cc grpc-1.39.0/test/core/handshake/server_ssl_common.cc +--- grpc-1.39.0-original/test/core/handshake/server_ssl_common.cc 2021-07-20 18:39:39.000000000 -0400 ++++ grpc-1.39.0/test/core/handshake/server_ssl_common.cc 2021-07-23 14:41:14.369657480 -0400 +@@ -204,9 +204,7 @@ + + // Set the cipher list to match the one expressed in + // src/core/tsi/ssl_transport_security.c. +- const char* cipher_list = +- "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-" +- "SHA384:ECDHE-RSA-AES256-GCM-SHA384"; ++ const char* cipher_list = "PROFILE=SYSTEM"; + if (!SSL_CTX_set_cipher_list(ctx, cipher_list)) { + ERR_print_errors_fp(stderr); + gpr_log(GPR_ERROR, "Couldn't set server cipher list."); diff --git a/grpc-1.40.0-python-grpcio_tests-make-network-tests-skippable.patch b/grpc-1.40.0-python-grpcio_tests-make-network-tests-skippable.patch new file mode 100644 index 0000000000000000000000000000000000000000..5a8d2f0eda8d246c49b9da7508b12d5fe16666f6 --- /dev/null +++ b/grpc-1.40.0-python-grpcio_tests-make-network-tests-skippable.patch @@ -0,0 +1,20 @@ +diff -Naur grpc-1.40.0-original/src/python/grpcio_tests/tests/unit/_dns_resolver_test.py grpc-1.40.0/src/python/grpcio_tests/tests/unit/_dns_resolver_test.py +--- grpc-1.40.0-original/src/python/grpcio_tests/tests/unit/_dns_resolver_test.py 2021-09-03 19:20:52.000000000 -0400 ++++ grpc-1.40.0/src/python/grpcio_tests/tests/unit/_dns_resolver_test.py 2021-09-09 10:55:12.919416808 -0400 +@@ -14,6 +14,7 @@ + """Tests for an actual dns resolution.""" + + import logging ++import os + import unittest + + import grpc +@@ -46,6 +47,8 @@ + def tearDown(self): + self._server.stop(None) + ++ @unittest.skipIf('FEDORA_NO_NETWORK_TESTS' in os.environ, ++ 'Network tests disabled') + def test_connect_loopback(self): + # NOTE(https://github.com/grpc/grpc/issues/18422) + # In short, Gevent + C-Ares = Segfault. The C-Ares driver is not diff --git a/grpc-1.45.0-python_wrapper-path.patch b/grpc-1.45.0-python_wrapper-path.patch new file mode 100644 index 0000000000000000000000000000000000000000..3c4402d429824b525690109aa8635443ad95dc67 --- /dev/null +++ b/grpc-1.45.0-python_wrapper-path.patch @@ -0,0 +1,15 @@ +diff -Naur grpc-1.45.0-original/test/core/http/httpcli_test_util.cc grpc-1.45.0/test/core/http/httpcli_test_util.cc +--- grpc-1.45.0-original/test/core/http/httpcli_test_util.cc 2022-03-18 13:20:52.000000000 -0400 ++++ grpc-1.45.0/test/core/http/httpcli_test_util.cc 2022-03-31 13:14:49.481349132 -0400 +@@ -53,9 +53,9 @@ + lslash = me + (lslash - me) - sizeof("http"); + } + root = static_cast( +- gpr_malloc(static_cast(lslash - me + sizeof("/../..")))); ++ gpr_malloc(static_cast(lslash - me + sizeof("/..")))); + memcpy(root, me, static_cast(lslash - me)); +- memcpy(root + (lslash - me), "/../..", sizeof("/../..")); ++ memcpy(root + (lslash - me), "/..", sizeof("/..")); + } else { + root = gpr_strdup("."); + } diff --git a/grpc-1.46.3-ChannelzServicerTest-python3.11-regressions.patch b/grpc-1.46.3-ChannelzServicerTest-python3.11-regressions.patch new file mode 100644 index 0000000000000000000000000000000000000000..ac345b3658a65bad19702277b4e169e42e3acbbd --- /dev/null +++ b/grpc-1.46.3-ChannelzServicerTest-python3.11-regressions.patch @@ -0,0 +1,55 @@ +From 280cab57a6810d0b564540737d248b1fc7226b58 Mon Sep 17 00:00:00 2001 +From: "Benjamin A. Beasley" +Date: Wed, 8 Jun 2022 21:07:38 -0400 +Subject: [PATCH] Skip failing ChannelzServicerTest tests on Python 3.11 + +--- + .../grpcio_tests/tests/channelz/_channelz_servicer_test.py | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/python/grpcio_tests/tests/channelz/_channelz_servicer_test.py b/src/python/grpcio_tests/tests/channelz/_channelz_servicer_test.py +index 565a79814c..07ee2c3500 100644 +--- a/src/python/grpcio_tests/tests/channelz/_channelz_servicer_test.py ++++ b/src/python/grpcio_tests/tests/channelz/_channelz_servicer_test.py +@@ -274,12 +274,14 @@ class ChannelzServicerTest(unittest.TestCase): + self.assertEqual(gtc_resp.channel[i].data.calls_failed, + gsc_resp.subchannel.data.calls_failed) + ++ @unittest.skipIf(sys.version_info >= (3, 11), "Fails on 3.11") + def test_server_basic(self): + self._pairs = _generate_channel_server_pairs(1) + resp = self._channelz_stub.GetServers( + channelz_pb2.GetServersRequest(start_server_id=0)) + self.assertEqual(len(resp.server), 1) + ++ @unittest.skipIf(sys.version_info >= (3, 11), "Fails on 3.11") + def test_get_one_server(self): + self._pairs = _generate_channel_server_pairs(1) + gss_resp = self._channelz_stub.GetServers( +@@ -291,6 +293,7 @@ class ChannelzServicerTest(unittest.TestCase): + self.assertEqual(gss_resp.server[0].ref.server_id, + gs_resp.server.ref.server_id) + ++ @unittest.skipIf(sys.version_info >= (3, 11), "Fails on 3.11") + def test_server_call(self): + self._pairs = _generate_channel_server_pairs(1) + k_success = 23 +@@ -394,6 +397,7 @@ class ChannelzServicerTest(unittest.TestCase): + self.assertEqual(gs_resp.socket.data.messages_received, + test_constants.STREAM_LENGTH) + ++ @unittest.skipIf(sys.version_info >= (3, 11), "Fails on 3.11") + def test_server_sockets(self): + self._pairs = _generate_channel_server_pairs(1) + self._send_successful_unary_unary(0) +@@ -412,6 +416,7 @@ class ChannelzServicerTest(unittest.TestCase): + # If the RPC call failed, it will raise a grpc.RpcError + # So, if there is no exception raised, considered pass + ++ @unittest.skipIf(sys.version_info >= (3, 11), "Fails on 3.11") + def test_server_listen_sockets(self): + self._pairs = _generate_channel_server_pairs(1) + +-- +2.36.1 + diff --git a/grpc-1.48.0-python-grpcio_tests-DynamicStubTest-hang.patch b/grpc-1.48.0-python-grpcio_tests-DynamicStubTest-hang.patch new file mode 100644 index 0000000000000000000000000000000000000000..beae2e4a082f7a91ff42851b5631e553bf3d487e --- /dev/null +++ b/grpc-1.48.0-python-grpcio_tests-DynamicStubTest-hang.patch @@ -0,0 +1,11 @@ +diff -Naur grpc-1.48.0-original/src/python/grpcio_tests/tests/unit/_dynamic_stubs_test.py grpc-1.48.0/src/python/grpcio_tests/tests/unit/_dynamic_stubs_test.py +--- grpc-1.48.0-original/src/python/grpcio_tests/tests/unit/_dynamic_stubs_test.py 2022-07-18 20:40:04.000000000 -0400 ++++ grpc-1.48.0/src/python/grpcio_tests/tests/unit/_dynamic_stubs_test.py 2022-08-14 15:41:01.208719432 -0400 +@@ -128,6 +128,7 @@ + @unittest.skipIf(os.name == "nt", "Windows multiprocessing unsupported") + @unittest.skipIf(test_common.running_under_gevent(), + "Import paths do not work with gevent runner.") ++@unittest.skip("Tests hang; possibly related to upstream issue #25368?") + class DynamicStubTest(unittest.TestCase): + + def test_sunny_day(self): diff --git a/grpc-1.48.0-python-grpcio_tests-skip-compression-tests.patch b/grpc-1.48.0-python-grpcio_tests-skip-compression-tests.patch new file mode 100644 index 0000000000000000000000000000000000000000..c84d50e97d97824b800f2d0530ce070645014f8f --- /dev/null +++ b/grpc-1.48.0-python-grpcio_tests-skip-compression-tests.patch @@ -0,0 +1,19 @@ +diff -Naur grpc-1.48.0-original/src/python/grpcio_tests/tests/unit/_compression_test.py grpc-1.48.0/src/python/grpcio_tests/tests/unit/_compression_test.py +--- grpc-1.48.0-original/src/python/grpcio_tests/tests/unit/_compression_test.py 2022-07-18 20:40:04.000000000 -0400 ++++ grpc-1.48.0/src/python/grpcio_tests/tests/unit/_compression_test.py 2022-08-14 11:07:13.780565137 -0400 +@@ -298,6 +298,7 @@ + multicallable_kwargs, server_kwargs, + server_handler, _REQUEST) + ++ @unittest.skip('Wrong compression ratio may occur; unknown cause') + def testDisableNextCompressionStreaming(self): + server_kwargs = { + 'compression': grpc.Compression.Deflate, +@@ -349,6 +350,7 @@ + + def test_compression(**kwargs): + ++ @unittest.skip('Wrong compression ratio may occur; unknown cause') + def _test_compression(self): + self.assertConfigurationCompressed(**kwargs) + diff --git a/grpc-1.48.4.tar.gz b/grpc-1.48.4.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..1920c196916c401713902dd6e6c822ad52871944 Binary files /dev/null and b/grpc-1.48.4.tar.gz differ diff --git a/grpc.spec b/grpc.spec new file mode 100644 index 0000000000000000000000000000000000000000..953139d8ad6832d6153bb7dab386d308e70ca772 --- /dev/null +++ b/grpc.spec @@ -0,0 +1,815 @@ +%define anolis_release 1 + +%global cpp_std 17 +%global gtest_url https://github.com/google/googletest +%global gtest_dir googletest-%{gtest_commit} +%global gtest_commit 0e402173c97aea7a00749e825b194bfede4f2e45 + +%global envoy_api_commit 9c42588c956220b48eb3099d186487c2f04d32ec +%global envoy_api_url https://github.com/envoyproxy/data-plane-api +%global envoy_api_dir data-plane-api-%{envoy_api_commit} + +%global googleapis_commit 2f9af297c84c55c8b871ba4495e01ade42476c92 +%global googleapis_url https://github.com/googleapis/googleapis +%global googleapis_dir googleapis-%{googleapis_commit} + +%global opencensus_proto_version 0.3.0 +%global opencensus_proto_url https://github.com/census-instrumentation/opencensus-proto +%global opencensus_proto_dir opencensus-proto-%{opencensus_proto_version} + +%global xds_commit cb28da3451f158a947dfc45090fe92b07b243bc1 +%global xds_url https://github.com/cncf/xds +%global xds_dir xds-%{xds_commit} + +%bcond_without bootstrap +%bcond_without core_tests +%bcond_with python_aio_tests +%bcond_with python_gevent_tests +%bcond_with valgrind +%bcond_with gdb +%bcond_with system_gtest + +Name: grpc +Version: 1.48.4 +Release: %{anolis_release}%{?dist} +Summary: RPC library and framework + +%global srcversion %(echo '%{version}' | sed -r 's/~rc/-pre/') +%global pyversion %(echo '%{version}' | tr -d '~') +%global c_so_version 26 +%global cpp_so_version 1.48 + +License: Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND MIT +URL: https://www.grpc.io +%global forgeurl https://github.com/grpc/grpc/ +Source0: %{forgeurl}/archive/v%{srcversion}/grpc-%{srcversion}.tar.gz +Source1: %{gtest_url}/archive/%{gtest_commit}/%{gtest_dir}.tar.gz +Source2: %{envoy_api_url}/archive/%{envoy_api_commit}/%{envoy_api_dir}.tar.gz +Source3: %{googleapis_url}/archive/%{googleapis_commit}/%{googleapis_dir}.tar.gz +Source4: %{opencensus_proto_url}/archive/v%{opencensus_proto_version}/%{opencensus_proto_dir}.tar.gz +Source5: %{xds_url}/archive/%{xds_commit}/%{xds_dir}.tar.gz + +Source100: grpc_cli.1 +Source101: grpc_cli-ls.1 +Source102: grpc_cli-call.1 +Source103: grpc_cli-type.1 +Source104: grpc_cli-parse.1 +Source105: grpc_cli-totext.1 +Source106: grpc_cli-tojson.1 +Source107: grpc_cli-tobinary.1 +Source108: grpc_cli-help.1 + +BuildRequires: gcc-c++ +BuildRequires: cmake +BuildRequires: ninja-build +%if %{with core_tests} +BuildRequires: chrpath +%endif + +BuildRequires: pkgconfig(zlib) +BuildRequires: cmake(gflags) +BuildRequires: pkgconfig(protobuf) +BuildRequires: protobuf-compiler +BuildRequires: pkgconfig(re2) +BuildRequires: pkgconfig(openssl) +BuildRequires: cmake(c-ares) +BuildRequires: abseil-cpp-devel +BuildRequires: pkgconfig(libxxhash) +BuildRequires: xxhash-static + +%if %{with core_tests} +BuildRequires: cmake(benchmark) +%if %{with system_gtest} +BuildRequires: cmake(gtest) +BuildRequires: pkgconfig(gmock) +%endif +%if %{with valgrind} +BuildRequires: valgrind +%endif +%if %{with gdb} +BuildRequires: gdb +%endif +%endif + +BuildRequires: python3-devel +BuildRequires: python3dist(setuptools) +BuildRequires: python3-pip +BuildRequires: protobuf +BuildRequires: python3dist(six) >= 1.10 +BuildRequires: python3dist(cython) > 0.23 +BuildRequires: python3dist(protobuf) >= 3.12.0, python3dist(protobuf) < 4 +%if %{without bootstrap} +BuildRequires: python3dist(xds-protos) >= 0.0.7 +%endif + +%if %{with python_gevent_tests} +BuildRequires: python3dist(gevent) +%endif + +BuildRequires: curl +%global _lto_cflags %{nil} + +BuildRequires: ca-certificates +BuildRequires: symlinks +BuildRequires: hardlink + +Patch: grpc-1.39.0-system-crypto-policies.patch +Patch: grpc-1.36.4-python-grpcio_tests-fixture-super.patch +Patch: grpc-1.40.0-python-grpcio_tests-make-network-tests-skippable.patch +Patch: grpc-1.48.0-python-grpcio_tests-skip-compression-tests.patch +Patch: grpc-1.37.0-grpc_cli-do-not-link-gtest-gmock.patch +Patch: grpc-1.45.0-python_wrapper-path.patch +Patch: grpc-1.46.3-ChannelzServicerTest-python3.11-regressions.patch +Patch: grpc-1.48.0-python-grpcio_tests-DynamicStubTest-hang.patch +Patch: %{forgeurl}/pull/31671.patch +Patch: 0001-http2-Dont-drop-connections-on-metadata-limit-exceed.patch + +Requires: grpc-data = %{version}-%{release} +Provides: bundled(upb) +Provides: bundled(utf8_range) + +%description +gRPC is a modern open source high performance RPC framework that can run in any +environment. It can efficiently connect services in and across data centers +with pluggable support for load balancing, tracing, health checking and +authentication. It is also applicable in last mile of distributed computing to +connect devices, mobile applications and browsers to backend services. + +The main usage scenarios: + + • Efficiently connecting polyglot services in microservices style + architecture + • Connecting mobile devices, browser clients to backend services + • Generating efficient client libraries + +Core Features that make it awesome: + + • Idiomatic client libraries in 10 languages + • Highly efficient on wire and with a simple service definition framework + • Bi-directional streaming with http/2 based transport + • Pluggable auth, tracing, load balancing and health checking + +This package provides the shared C core library. + + +%package data +Summary: Data for gRPC bindings +License: Apache-2.0 +BuildArch: noarch + +Requires: ca-certificates + +%description data +Common data for gRPC bindings: currently, this contains only a symbolic link to +the system shared TLS certificates. + + +%package doc +Summary: Documentation and examples for gRPC +License: Apache-2.0 +BuildArch: noarch + +Obsoletes: python-grpcio-doc < 1.26.0-13 +Provides: python-grpcio-doc = %{version}-%{release} +Provides: python-grpcio-admin-doc = %{version}-%{release} +Provides: python-grpcio-csds-doc = %{version}-%{release} +Provides: python-grpcio-channelz-doc = %{version}-%{release} +Provides: python-grpcio-health-checking-doc = %{version}-%{release} +Provides: python-grpcio-reflection-doc = %{version}-%{release} +Provides: python-grpcio-status-doc = %{version}-%{release} +Provides: python-grpcio-testing-doc = %{version}-%{release} + +%description doc +Documentation and examples for gRPC, including Markdown documentation sources +for the following: + + • C (core) + ○ API + ○ Internals + • C++ + ○ API + ○ Internals + • Objective C + ○ API + ○ Internals + • Python + ○ grpcio + ○ grpcio_admin + ○ grpcio_csds + ○ grpcio_channelz + ○ grpcio_health_checking + ○ grpcio_reflection + ○ grpcio_status + ○ grpcio_testing + +For rendered HTML documentation, please see https://grpc.io/docs/. + + +%package cpp +Summary: C++ language bindings for gRPC +# License: same as base package + +Requires: grpc%{?_isa} = %{version}-%{release} +Requires: grpc-cpp%{?_isa} = %{version}-%{release} + +Provides: bundled(upb) +Provides: bundled(utf8_range) + +%description cpp +C++ language bindings for gRPC. + + +%package plugins +Summary: Protocol buffers compiler plugins for gRPC +# License: same as base package + +Requires: grpc%{?_isa} = %{version}-%{release} +Requires: grpc-cpp%{?_isa} = %{version}-%{release} +Requires: protobuf-compiler + +Provides: bundled(upb) +Provides: bundled(utf8_range) + +%description plugins +Plugins to the protocol buffers compiler to generate gRPC sources. + + +%package cli +Summary: Command-line tool for gRPC +# License: same as base package + +Requires: grpc%{?_isa} = %{version}-%{release} +Requires: grpc-cpp%{?_isa} = %{version}-%{release} + +Provides: bundled(upb) +Provides: bundled(utf8_range) + +%description cli +The command line tool can do the following things: + + • Send unary rpc. + • Attach metadata and display received metadata. + • Handle common authentication to server. + • Infer request/response types from server reflection result. + • Find the request/response types from a given proto file. + • Read proto request in text form. + • Read request in wire form (for protobuf messages, this means serialized + binary form). + • Display proto response in text form. + • Write response in wire form to a file. + + +%package devel +Summary: Development files for gRPC library +Requires: grpc%{?_isa} = %{version}-%{release} +Requires: grpc-cpp%{?_isa} = %{version}-%{release} +Requires: grpc-plugins%{?_isa} = %{version}-%{release} +Requires: kernel-headers%{?_isa} +Requires: pkgconfig(protobuf) +Requires: pkgconfig(gmock) +Requires: abseil-cpp-devel%{?_isa} +Requires: pkgconfig(re2) +Requires: cmake(c-ares) +Requires: pkgconfig(zlib) + +%description devel +Development headers and files for gRPC libraries (both C and C++). + + +%package -n python3-grpcio +Summary: Python language bindings for gRPC +Requires: grpc-data = %{version}-%{release} + +Provides: bundled(upb) +Provides: bundled(utf8_range) + +%py_provides python3-grpc + +%description -n python3-grpcio +Python language bindings for gRPC (HTTP/2-based RPC framework). + + +%global grpcio_egg %{python3_sitearch}/grpcio-%{pyversion}-py%{python3_version}.egg-info +%{?python_extras_subpkg:%python_extras_subpkg -n python3-grpcio -i %{grpcio_egg} protobuf} + + +%package -n python3-grpcio-tools +Summary: Package for gRPC Python tools +Provides: bundled(upb) +Provides: bundled(utf8_range) +%py_provides python3-grpc-tools + +%description -n python3-grpcio-tools +Package for gRPC Python tools. + + +%if %{without bootstrap} +%package -n python3-grpcio-admin +Summary: A collection of admin services +License: Apache-2.0 + +BuildArch: noarch + +%py_provides python3-grpc-admin + +%description -n python3-grpcio-admin +gRPC Python Admin Interface Package +=================================== + +Debugging gRPC library can be a complex task. There are many configurations and +internal states, which will affect the behavior of the library. This Python +package will be the collection of admin services that are exposing debug +information. Currently, it includes: + +* Channel tracing metrics (grpcio-channelz) +* Client Status Discovery Service (grpcio-csds) + +Here is a snippet to create an admin server on "localhost:50051": + + server = grpc.server(ThreadPoolExecutor()) + port = server.add_insecure_port('localhost:50051') + grpc_admin.add_admin_servicers(self._server) + server.start() + +Welcome to explore the admin services with CLI tool "grpcdebug": +https://github.com/grpc-ecosystem/grpcdebug. + +For any issues or suggestions, please send to +https://github.com/grpc/grpc/issues. +%endif + + +%if %{without bootstrap} +%package -n python3-grpcio-csds +Summary: xDS configuration dump library +License: Apache-2.0 + +BuildArch: noarch + +%py_provides python3-grpc-csds + +%description -n python3-grpcio-csds +gRPC Python Client Status Discovery Service package +=================================================== + +CSDS is part of the Envoy xDS protocol: +https://www.envoyproxy.io/docs/envoy/latest/api-v3/service/status/v3/csds.proto. +It allows the gRPC application to programmatically expose the received traffic +configuration (xDS resources). Welcome to explore with CLI tool "grpcdebug": +https://github.com/grpc-ecosystem/grpcdebug. + +For any issues or suggestions, please send to +https://github.com/grpc/grpc/issues. +%endif + + +%package -n python3-grpcio-channelz +Summary: Channel Level Live Debug Information Service for gRPC +License: Apache-2.0 + +BuildArch: noarch + +%py_provides python3-grpc-channelz + +%description -n python3-grpcio-channelz +gRPC Python Channelz package +============================ + +Channelz is a live debug tool in gRPC Python. + + +%package -n python3-grpcio-health-checking +Summary: Standard Health Checking Service for gRPC +License: Apache-2.0 + +BuildArch: noarch + +%py_provides python3-grpc-health + +%description -n python3-grpcio-health-checking +gRPC Python Health Checking +=========================== + +Reference package for GRPC Python health checking. + + +%package -n python3-grpcio-reflection +Summary: Standard Protobuf Reflection Service for gRPC +License: Apache-2.0 + +BuildArch: noarch + +%py_provides python3-grpc-reflection + +%description -n python3-grpcio-reflection +gRPC Python Reflection package +============================== + +Reference package for reflection in GRPC Python. + + +%package -n python3-grpcio-status +Summary: Status proto mapping for gRPC +License: Apache-2.0 + +BuildArch: noarch + +%py_provides python3-grpc-status + +%description -n python3-grpcio-status +gRPC Python Status Proto +=========================== + +Reference package for GRPC Python status proto mapping. + + +%package -n python3-grpcio-testing +Summary: Testing utilities for gRPC Python +License: Apache-2.0 + +BuildArch: noarch + +%py_provides python3-grpc-testing + +%description -n python3-grpcio-testing +gRPC Python Testing Package +=========================== + +Testing utilities for gRPC Python. + + +%prep +%autosetup -p1 -n grpc-%{srcversion} + +cp -p third_party/upb/third_party/utf8_range/LICENSE LICENSE-utf8_range + +echo '===== Patching grpcio_tools for system protobuf =====' 2>&1 + +sed -r -i \ + -e "s/^(# AUTO-GENERATED .*)/\\1\\n\ +# Then, modified by hand to build with an external system protobuf\ +# installation./" \ + -e 's/^(CC_FILES=\[).*(\])/\1\2/' \ + -e "s@^((CC|PROTO)_INCLUDE=')[^']+'@\1%{_includedir}'@" \ + -e '/^PROTOBUF_SUBMODULE_VERSION=/d' \ + 'tools/distrib/python/grpcio_tools/protoc_lib_deps.py' + +echo '===== Preparing gtest/gmock =====' 2>&1 +%if %{without system_gtest} +%setup -q -T -D -b 1 -n grpc-%{srcversion} +rm -rvf 'third_party/googletest' +mv '../%{gtest_dir}' 'third_party/googletest' +%else +for gwhat in test mock +do + mkdir -p "third_party/googletest/google${gwhat}/src" \ + "third_party/googletest/google${gwhat}/include" + echo "typedef int dummy_${gwhat}_type;" \ + > "third_party/googletest/google${gwhat}/src/g${gwhat}-all.cc" +done +sed -r -i 's/^([[:blank:]]*)(\$\{_gRPC_GFLAGS_LIBRARIES\})/'\ +'\1\2\n\1gtest\n\1gmock/' CMakeLists.txt +%endif + +%setup -q -T -D -b 2 -n grpc-%{srcversion} +%setup -q -T -D -b 3 -n grpc-%{srcversion} +%setup -q -T -D -b 4 -n grpc-%{srcversion} +%setup -q -T -D -b 5 -n grpc-%{srcversion} +{ + awk '$1 ~ /^(#|$)/ { next }; 1' <<'EOF' +../%{envoy_api_dir}/ third_party/envoy-api/ +../%{googleapis_dir}/ third_party/googleapis/ +../%{opencensus_proto_dir}/ third_party/opencensus-proto/ +../%{xds_dir}/ third_party/xds/ +EOF +} | while read -r fromdir todir +do + find "${fromdir}" -type f ! -name '*.proto' -print -delete + rm -rvf "${todir}" + mv "${fromdir}" "${todir}" +done + +echo '===== Removing bundled xxhash =====' 2>&1 +rm -rvf third_party/xxhash + +echo '===== Fixing permissions =====' 2>&1 +find . -type f -perm /0111 \ + -exec gawk '!/^#!/ { print FILENAME }; { nextfile }' '{}' '+' | + xargs -r chmod -v a-x + +echo '===== Removing selected unused sources =====' 2>&1 +rm -rfv \ + src/boringssl/boringssl_prefix_symbols.h \ + third_party/cares/ares_build.h \ + third_party/upb/third_party/lunit +echo '' > etc/roots.pem + +rm -rvf examples/android src/android +rm -vf examples/node/package-lock.json +find . -type f -name .gitignore -print -delete + +echo '===== Fixing shebangs =====' 2>&1 +find . -type f -perm /0111 -exec gawk \ + '/^#!\/usr\/bin\/env[[:blank:]]/ { print FILENAME }; { nextfile }' \ + '{}' '+' | + xargs -r sed -r -i '1{s|^(#!/usr/bin/)env[[:blank:]]+([^[:blank:]]+)|\1\2|}' + +echo '===== Fixing hard-coded C++ standard =====' 2>&1 +sed -r -i 's/(std=c\+\+)14/\1%{cpp_std}/g' \ + setup.py grpc.gyp Rakefile \ + examples/cpp/*/Makefile \ + examples/cpp/*/CMakeLists.txt \ + tools/run_tests/artifacts/artifact_targets.py \ + tools/distrib/python/grpcio_tools/setup.py + + +%build +%global rmprefix %(echo $(($(wc -c <<<'%{_prefix}')+1))) + +echo '===== Building C (core) and C++ components =====' 2>&1 +%cmake \ + -DgRPC_INSTALL:BOOL=ON \ + -DCMAKE_CXX_STANDARD:STRING=%{cpp_std} \ + -DCMAKE_SKIP_INSTALL_RPATH:BOOL=ON \ + -DgRPC_INSTALL_BINDIR:PATH=%(cut -b %{rmprefix}- <<<'%{_bindir}') \ + -DgRPC_INSTALL_LIBDIR:PATH=%(cut -b %{rmprefix}- <<<'%{_libdir}') \ + -DgRPC_INSTALL_INCLUDEDIR:PATH=%(cut -b %{rmprefix}- <<<'%{_includedir}') \ + -DgRPC_INSTALL_CMAKEDIR:PATH=%(cut -b %{rmprefix}- <<<'%{_libdir}/cmake/grpc') \ + -DgRPC_INSTALL_SHAREDIR:PATH=%(cut -b %{rmprefix}- <<<'%{_datadir}/grpc') \ + -DgRPC_BUILD_TESTS:BOOL=%{?with_core_tests:ON}%{?!with_core_tests:OFF} \ + -DgRPC_BUILD_CODEGEN:BOOL=ON \ + -DgRPC_BUILD_CSHARP_EXT:BOOL=ON \ + -DgRPC_BACKWARDS_COMPATIBILITY_MODE:BOOL=OFF \ + -DgRPC_ZLIB_PROVIDER:STRING='package' \ + -DgRPC_CARES_PROVIDER:STRING='package' \ + -DgRPC_RE2_PROVIDER:STRING='package' \ + -DgRPC_SSL_PROVIDER:STRING='package' \ + -DgRPC_PROTOBUF_PROVIDER:STRING='package' \ + -DgRPC_PROTOBUF_PACKAGE_TYPE:STRING='MODULE' \ + -DgRPC_BENCHMARK_PROVIDER:STRING='package' \ + -DgRPC_ABSL_PROVIDER:STRING='package' \ + -DgRPC_USE_PROTO_LITE:BOOL=OFF \ + -DgRPC_BUILD_GRPC_CPP_PLUGIN:BOOL=ON \ + -DgRPC_BUILD_GRPC_CSHARP_PLUGIN:BOOL=ON \ + -DgRPC_BUILD_GRPC_NODE_PLUGIN:BOOL=ON \ + -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN:BOOL=ON \ + -DgRPC_BUILD_GRPC_PHP_PLUGIN:BOOL=ON \ + -DgRPC_BUILD_GRPC_PYTHON_PLUGIN:BOOL=ON \ + -DgRPC_BUILD_GRPC_RUBY_PLUGIN:BOOL=ON \ + -GNinja +%cmake_build + +echo '===== Building Python grpcio package =====' 2>&1 +PYROOT="${PWD}/%{_vpath_builddir}/pyroot" +if [ -n "${PYTHONPATH-}" ]; then PYTHONPATH="${PYTHONPATH}:"; fi +PYTHONPATH="${PYTHONPATH-}${PYROOT}%{python3_sitelib}" +PYTHONPATH="${PYTHONPATH}:${PYROOT}%{python3_sitearch}" +export PYTHONPATH + +export GRPC_PYTHON_BUILD_WITH_CYTHON='True' +export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL='True' +export GRPC_PYTHON_BUILD_SYSTEM_ZLIB='True' +export GRPC_PYTHON_BUILD_SYSTEM_CARES='True' +export GRPC_PYTHON_BUILD_SYSTEM_RE2='True' +export GRPC_PYTHON_BUILD_SYSTEM_ABSL='True' +export GRPC_PYTHON_DISABLE_LIBC_COMPATIBILITY='True' +export GRPC_PYTHON_ENABLE_DOCUMENTATION_BUILD='False' +export GRPC_PYTHON_CFLAGS="$( + pkg-config --cflags protobuf +) -std=c++%{cpp_std} -fvisibility=hidden -fno-wrapv -fno-exceptions" +export GRPC_PYTHON_LDFLAGS="$(pkg-config --libs protobuf)" +%py3_build +%{__python3} %{py_setup} %{?py_setup_args} install \ + -O1 --skip-build --root "${PYROOT}" + +echo '===== Building Python grpcio_tools package =====' 2>&1 +pushd "tools/distrib/python/grpcio_tools/" >/dev/null +mkdir -p grpc_root/src +for srcdir in compiler +do + cp -rp "../../../../src/${srcdir}" "grpc_root/src/" +done +cp -rp '../../../../include' 'grpc_root/' +export GRPC_PYTHON_CFLAGS="-fno-wrapv -frtti $(pkg-config --cflags protobuf)" +export GRPC_PYTHON_LDFLAGS="$(pkg-config --libs protobuf) -lprotoc" +%py3_build +find . -type f -name protoc.py -execdir sed -r -i '1{/^#!/d}' '{}' '+' +%{__python3} %{py_setup} %{?py_setup_args} install \ + -O1 --skip-build --root "${PYROOT}" +popd >/dev/null + +echo '===== Building pure-Python packages =====' 1>&2 +for suffix in channelz %{?!with_bootstrap:csds admin} health_checking \ + reflection status testing tests +do + echo "----> grpcio_${suffix} <----" 1>&2 + pushd "src/python/grpcio_${suffix}/" >/dev/null + if ! echo "${suffix}" | grep -E "^(admin|csds)$" >/dev/null + then + %{__python3} %{py_setup} %{?py_setup_args} preprocess + fi + if ! echo "${suffix}" | grep -E "^(admin|csds|testing)$" >/dev/null + then + %{__python3} %{py_setup} %{?py_setup_args} build_package_protos + fi + %py3_build + %{__python3} %{py_setup} %{?py_setup_args} install \ + -O1 --skip-build --root "${PYROOT}" + popd >/dev/null +done + + +%install +%cmake_install + +%if %{with core_tests} +install -t '%{buildroot}%{_bindir}' -p -D '%{_vpath_builddir}/grpc_cli' +chrpath --delete '%{buildroot}%{_bindir}/grpc_cli' +install -t '%{buildroot}%{_libdir}' -p \ + '%{_vpath_builddir}/libgrpc++_test_config.so.%{cpp_so_version}' +chrpath --delete \ + '%{buildroot}%{_libdir}/libgrpc++_test_config.so.%{cpp_so_version}' + +install -d '%{buildroot}/%{_mandir}/man1' +install -t '%{buildroot}/%{_mandir}/man1' -p -m 0644 \ + %{SOURCE100} %{SOURCE101} %{SOURCE102} %{SOURCE103} %{SOURCE104} \ + %{SOURCE106} %{SOURCE107} %{SOURCE108} +%endif + +find %{buildroot} -type f -name '*.a' -print -delete +find %{buildroot}%{_includedir}/grpc* -type f -name '*.h' -perm /0111 \ + -execdir chmod -v a-x '{}' '+' +pushd '%{buildroot}' +PYROOT="${PWD}" +popd +if [ -n "${PYTHONPATH-}" ]; then PYTHONPATH="${PYTHONPATH}:"; fi +PYTHONPATH="${PYTHONPATH-}${PYROOT}%{python3_sitelib}" +PYTHONPATH="${PYTHONPATH}:${PYROOT}%{python3_sitearch}" +export PYTHONPATH + +%py3_install +pushd "tools/distrib/python/grpcio_tools/" >/dev/null +%py3_install +popd >/dev/null + +for suffix in channelz %{?!with_bootstrap:csds admin} health_checking \ + reflection status testing +do + pushd "src/python/grpcio_${suffix}/" >/dev/null + %py3_install + popd >/dev/null +done +%global sysbundle %{_sysconfdir}/pki/ca-trust/extracted/pem/tls-ca-bundle.pem +install -D -t "%{buildroot}$(dirname '%{sysbundle}')" -m 0644 '%{sysbundle}' + +find '%{buildroot}' -type f -name 'roots.pem' | + while read -r fn + do + ln -s -f "%{buildroot}%{sysbundle}" "${fn}" + symlinks -c -o "${fn}" + done + +rm -rvf "%{buildroot}$(dirname '%{sysbundle}')" +install -D -t '%{buildroot}%{_pkgdocdir}' -m 0644 -p \ + AUTHORS \ + CONCEPTS.md \ + MAINTAINERS.md \ + README.md \ + SECURITY.md \ + TROUBLESHOOTING.md +cp -rvp doc examples '%{buildroot}%{_pkgdocdir}' +hardlink -v '%{buildroot}%{_pkgdocdir}/examples/' + +%files +%license LICENSE NOTICE.txt LICENSE-utf8_range +%{_libdir}/libaddress_sorting.so.%{c_so_version}{,.*} +%{_libdir}/libgpr.so.%{c_so_version}{,.*} +%{_libdir}/libgrpc.so.%{c_so_version}{,.*} +%{_libdir}/libgrpc_unsecure.so.%{c_so_version}{,.*} +%{_libdir}/libupb.so.%{c_so_version}{,.*} + + +%files data +%license LICENSE NOTICE.txt +%dir %{_datadir}/grpc/ +%{_datadir}/grpc/roots.pem + + +%files doc +%license LICENSE NOTICE.txt + +%doc %{_pkgdocdir}/AUTHORS +%doc %{_pkgdocdir}/CONCEPTS.md +%doc %{_pkgdocdir}/MAINTAINERS.md +%doc %{_pkgdocdir}/README.md +%doc %{_pkgdocdir}/SECURITY.md +%doc %{_pkgdocdir}/TROUBLESHOOTING.md + +%doc %{_pkgdocdir}/doc/ +%doc %{_pkgdocdir}/examples/ + + + +%files cpp +%{_libdir}/libgrpc++.so.%{cpp_so_version}{,.*} +%{_libdir}/libgrpc++_alts.so.%{cpp_so_version}{,.*} +%{_libdir}/libgrpc++_error_details.so.%{cpp_so_version}{,.*} +%{_libdir}/libgrpc++_reflection.so.%{cpp_so_version}{,.*} +%{_libdir}/libgrpc++_unsecure.so.%{cpp_so_version}{,.*} +%{_libdir}/libgrpc_plugin_support.so.%{cpp_so_version}{,.*} + +%{_libdir}/libgrpcpp_channelz.so.%{cpp_so_version}{,.*} + + +%if %{with core_tests} +%files cli +%{_bindir}/grpc_cli +%{_libdir}/libgrpc++_test_config.so.%{cpp_so_version} +%{_mandir}/man1/grpc_cli.1* +%{_mandir}/man1/grpc_cli-*.1* +%endif + + +%files plugins +%{_bindir}/grpc_*_plugin + + +%files devel +%{_libdir}/libaddress_sorting.so +%{_libdir}/libgpr.so +%{_libdir}/libgrpc.so +%{_libdir}/libgrpc_unsecure.so +%{_libdir}/libupb.so +%{_includedir}/grpc/ +%{_libdir}/pkgconfig/gpr.pc +%{_libdir}/pkgconfig/grpc.pc +%{_libdir}/pkgconfig/grpc_unsecure.pc +%{_libdir}/cmake/grpc/ + +%{_libdir}/libgrpc++.so +%{_libdir}/libgrpc++_alts.so +%{_libdir}/libgrpc++_error_details.so +%{_libdir}/libgrpc++_reflection.so +%{_libdir}/libgrpc++_unsecure.so +%{_libdir}/libgrpc_plugin_support.so +%{_includedir}/grpc++/ +%{_libdir}/pkgconfig/grpc++.pc +%{_libdir}/pkgconfig/grpc++_unsecure.pc + +%{_libdir}/libgrpcpp_channelz.so +%{_includedir}/grpcpp/ + + +%files -n python3-grpcio +%license LICENSE NOTICE.txt LICENSE-utf8_range +%{python3_sitearch}/grpc/ +%{python3_sitearch}/grpcio-%{pyversion}-py%{python3_version}.egg-info/ + + +%files -n python3-grpcio-tools +%license LICENSE NOTICE.txt LICENSE-utf8_range +%{python3_sitearch}/grpc_tools/ +%{python3_sitearch}/grpcio_tools-%{pyversion}-py%{python3_version}.egg-info/ + + +%if %{without bootstrap} +%files -n python3-grpcio-admin +%{python3_sitelib}/grpc_admin/ +%{python3_sitelib}/grpcio_admin-%{pyversion}-py%{python3_version}.egg-info/ +%endif + + +%files -n python3-grpcio-channelz +%{python3_sitelib}/grpc_channelz/ +%{python3_sitelib}/grpcio_channelz-%{pyversion}-py%{python3_version}.egg-info/ + + +%if %{without bootstrap} +%files -n python3-grpcio-csds +%{python3_sitelib}/grpc_csds/ +%{python3_sitelib}/grpcio_csds-%{pyversion}-py%{python3_version}.egg-info/ +%endif + + +%files -n python3-grpcio-health-checking +%{python3_sitelib}/grpc_health/ +%{python3_sitelib}/grpcio_health_checking-%{pyversion}-py%{python3_version}.egg-info/ + + +%files -n python3-grpcio-reflection +%{python3_sitelib}/grpc_reflection/ +%{python3_sitelib}/grpcio_reflection-%{pyversion}-py%{python3_version}.egg-info/ + + +%files -n python3-grpcio-status +%{python3_sitelib}/grpc_status/ +%{python3_sitelib}/grpcio_status-%{pyversion}-py%{python3_version}.egg-info/ + + +%files -n python3-grpcio-testing +%{python3_sitelib}/grpc_testing/ +%{python3_sitelib}/grpcio_testing-%{pyversion}-py%{python3_version}.egg-info/ + +%changelog +* Fri Sep 15 2023 Zhongling He - 1.48.4-1 +- Initial package. \ No newline at end of file diff --git a/grpc_cli-call.1 b/grpc_cli-call.1 new file mode 100644 index 0000000000000000000000000000000000000000..60ca8c489273d4f89b78f16db5910bbd9d520df0 --- /dev/null +++ b/grpc_cli-call.1 @@ -0,0 +1,105 @@ +.TH GRPC_CLI\-CALL "1" "May 2021" "" "User Commands" +.SH NAME +.B grpc_cli\ call +\(en call method +.SH SYNOPSIS +.B grpc_cli call +.I address +.RI [ service [\fB. method ]] +.I request +.RI [ OPTION ]...\: +.SH OPTIONS +.TP +.I address +.IB host : port +.TP +.I service +Exported service name +.TP +.I method +Method name +.TP +.I request +Text protobuffer (overrides +.BR \-\-infile ) +.TP +.B \-\-protofiles +Comma separated proto files used as a fallback when parsing request/response +.TP +.B \-\-proto_path +The search paths of proto files +.RB ( : +separated), valid only when +.B \-\-protofiles +is given +.TP +.B \-\-noremotedb +Don\(cqt attempt to use reflection service at all +.TP +.B \-\-metadata +The metadata to be sent to the server +.TP +.B \-\-infile +Input filename (defaults to +.IR stdin ) +.TP +.B \-\-outfile +Output filename (defaults to +.IR stdout ) +.TP +.B \-\-binary_input +Input in binary format +.TP +.B \-\-binary_output +Output in binary format +.TP +.B \-\-json_input +Input in json format +.TP +.B \-\-json_output +Output in json format +.TP +.B \-\-timeout +Specify timeout (in seconds), used to set the deadline for RPCs. +The default value of +.B \-1 +means no deadline has been set. +.TP +.B \-\-ssl_target +Set server host for ssl validation +.TP +.B \-\-ssl_client_cert +Client cert for ssl +.TP +.B \-\-ssl_client_key +Client private key for ssl +.TP +.B \-\-local_connect_type +Set to +.B local_tcp +or +.B uds +.TP +.B \-\-channel_creds_type +Set to +.BR insecure , +.BR ssl , +.BR gdc , +.BR alts , +or +.B local +.TP +.B \-\-call_creds +Set to +.BR none , +or +.BI access_token= token +.SH "SEE\ ALSO" +.BR grpc_cli (1), +.BR grpc_cli\-ls (1), +.BR grpc_cli\-type (1), +.BR grpc_cli\-parse (1), +.BR grpc_cli\-totext (1), +.BR grpc_cli\-tojson (1), +.BR grpc_cli\-tobinary (1), +.BR grpc_cli\-help (1) diff --git a/grpc_cli-help.1 b/grpc_cli-help.1 new file mode 100644 index 0000000000000000000000000000000000000000..f3074a1f17795e089c30267b0ef364424dcb3136 --- /dev/null +++ b/grpc_cli-help.1 @@ -0,0 +1,16 @@ +.TH GRPC_CLI\-HELP "1" "May 2021" "" "User Commands" +.SH NAME +.B grpc_cli\ help +\(en print help +.SH SYNOPSIS +.B grpc_cli help +.I subcommand +.SH "SEE\ ALSO" +.BR grpc_cli (1), +.BR grpc_cli\-ls (1), +.BR grpc_cli\-call (1), +.BR grpc_cli\-type (1), +.BR grpc_cli\-parse (1), +.BR grpc_cli\-totext (1), +.BR grpc_cli\-tojson (1), +.BR grpc_cli\-tobinary (1) diff --git a/grpc_cli-ls.1 b/grpc_cli-ls.1 new file mode 100644 index 0000000000000000000000000000000000000000..4a3460e9bc584b9e1d4fbc759f88a6fc991edb75 --- /dev/null +++ b/grpc_cli-ls.1 @@ -0,0 +1,65 @@ +.TH GRPC_CLI\-LS "1" "May 2021" "" "User Commands" +.SH NAME +.B grpc_cli\ ls +\(en list services +.SH SYNOPSIS +.B grpc_cli ls +.I address +.RI [ service [\fB/ method ]] +.RI [ OPTION ]...\: +.SH OPTIONS +.TP +.I address +.IB host : port +.TP +.I service +Exported service name +.TP +.I method +Method name +.TP +.B \-\-l +Use a long listing format +.TP +.B \-\-outfile +Output filename (defaults to +.IR stdout ) +.TP +.B \-\-ssl_target +Set server host for ssl validation +.TP +.B \-\-ssl_client_cert +Client cert for ssl +.TP +.B \-\-ssl_client_key +Client private key for ssl +.TP +.B \-\-local_connect_type +Set to +.B local_tcp +or +.B uds +.TP +.B \-\-channel_creds_type +Set to +.BR insecure , +.BR ssl , +.BR gdc , +.BR alts , +or +.B local +.TP +.B \-\-call_creds +Set to +.BR none , +or +.BI access_token= token +.SH "SEE\ ALSO" +.BR grpc_cli (1), +.BR grpc_cli\-call (1), +.BR grpc_cli\-type (1), +.BR grpc_cli\-parse (1), +.BR grpc_cli\-totext (1), +.BR grpc_cli\-tojson (1), +.BR grpc_cli\-tobinary (1), +.BR grpc_cli\-help (1) diff --git a/grpc_cli-parse.1 b/grpc_cli-parse.1 new file mode 100644 index 0000000000000000000000000000000000000000..2e32c0e740d0c9882f161d8712b3c2a03887f1f0 --- /dev/null +++ b/grpc_cli-parse.1 @@ -0,0 +1,93 @@ +.TH GRPC_CLI\-PARSE "1" "May 2021" "" "User Commands" +.SH NAME +.B grpc_cli\ parse +\(en parse message +.SH SYNOPSIS +.B grpc_cli parse +.I address +.I type +.RI [ message ] +.RI [ OPTION ]...\: +.SH OPTIONS +.TP +.I address +.IB host : port +.TP +.I type +Protocol buffer type name +.TP +.I message +Text protobuffer (overrides +.BR \-\-infile ) +.TP +.B \-\-protofiles +Comma separated proto files used as a fallback when parsing request/response +.TP +.B \-\-proto_path +The search paths of proto files +.RB ( : +separated), valid only when +.B \-\-protofiles +is given +.TP +.B \-\-noremotedb +Don\(cqt attempt to use reflection service at all +.TP +.B \-\-infile +Input filename (defaults to +.IR stdin ) +.TP +.B \-\-outfile +Output filename (defaults to +.IR stdout ) +.TP +.B \-\-binary_input +Input in binary format +.TP +.B \-\-binary_output +Output in binary format +.TP +.B \-\-json_input +Input in json format +.TP +.B \-\-json_output +Output in json format +.TP +.B \-\-ssl_target +Set server host for ssl validation +.TP +.B \-\-ssl_client_cert +Client cert for ssl +.TP +.B \-\-ssl_client_key +Client private key for ssl +.TP +.B \-\-local_connect_type +Set to +.B local_tcp +or +.B uds +.TP +.B \-\-channel_creds_type +Set to +.BR insecure , +.BR ssl , +.BR gdc , +.BR alts , +or +.B local +.TP +.B \-\-call_creds +Set to +.BR none , +or +.BI access_token= token +.SH "SEE\ ALSO" +.BR grpc_cli (1), +.BR grpc_cli\-ls (1), +.BR grpc_cli\-call (1), +.BR grpc_cli\-type (1), +.BR grpc_cli\-totext (1), +.BR grpc_cli\-tojson (1), +.BR grpc_cli\-tobinary (1), +.BR grpc_cli\-help (1) diff --git a/grpc_cli-tobinary.1 b/grpc_cli-tobinary.1 new file mode 100644 index 0000000000000000000000000000000000000000..e58b7e9e4d1a086f4071799aff53f8d9761e4368 --- /dev/null +++ b/grpc_cli-tobinary.1 @@ -0,0 +1,39 @@ +.TH GRPC_CLI\-TOBINARY "1" "May 2021" "" "User Commands" +.SH NAME +.B grpc_cli\ tobinary +\(en convert text message to binary +.SH SYNOPSIS +.B grpc_cli tobinary +.I protofiles +.I type +.RI [ message ] +.RI [ OPTION ]...\: +.SH OPTIONS +.TP +.I protofiles +Comma separated list of proto files +.TP +.I type +Protocol buffer type name +.TP +.B \-\-proto_path +The search paths of proto files +.RB ( : +separated) +.TP +.B \-\-infile +Input filename (defaults to +.IR stdin ) +.TP +.B \-\-outfile +Output filename (defaults to +.IR stdout ) +.SH "SEE\ ALSO" +.BR grpc_cli (1), +.BR grpc_cli\-ls (1), +.BR grpc_cli\-call (1), +.BR grpc_cli\-type (1), +.BR grpc_cli\-parse (1), +.BR grpc_cli\-totext (1), +.BR grpc_cli\-tojson (1), +.BR grpc_cli\-help (1) diff --git a/grpc_cli-tojson.1 b/grpc_cli-tojson.1 new file mode 100644 index 0000000000000000000000000000000000000000..59d407d5a16195ae36ea97654aa61c203e54a9a6 --- /dev/null +++ b/grpc_cli-tojson.1 @@ -0,0 +1,38 @@ +.TH GRPC_CLI\-TOJSON "1" "May 2021" "" "User Commands" +.SH NAME +.B grpc_cli\ tojson +\(en convert binary message to json +.SH SYNOPSIS +.B grpc_cli tojson +.I protofiles +.I type +.RI [ OPTION ]...\: +.SH OPTIONS +.TP +.I protofiles +Comma separated list of proto files +.TP +.I type +Protocol buffer type name +.TP +.B \-\-proto_path +The search paths of proto files +.RB ( : +separated) +.TP +.B \-\-infile +Input filename (defaults to +.IR stdin ) +.TP +.B \-\-outfile +Output filename (defaults to +.IR stdout ) +.SH "SEE\ ALSO" +.BR grpc_cli (1), +.BR grpc_cli\-ls (1), +.BR grpc_cli\-call (1), +.BR grpc_cli\-type (1), +.BR grpc_cli\-parse (1), +.BR grpc_cli\-totext (1), +.BR grpc_cli\-tobinary (1), +.BR grpc_cli\-help (1) diff --git a/grpc_cli-totext.1 b/grpc_cli-totext.1 new file mode 100644 index 0000000000000000000000000000000000000000..9b297f0aad9d4752a1d23eaef1cfbf749b64378f --- /dev/null +++ b/grpc_cli-totext.1 @@ -0,0 +1,38 @@ +.TH GRPC_CLI\-TOTEXT "1" "May 2021" "" "User Commands" +.SH NAME +.B grpc_cli\ totext +\(en convert binary message to text +.SH SYNOPSIS +.B grpc_cli totext +.I protofiles +.I type +.RI [ OPTION ]...\: +.SH OPTIONS +.TP +.I protofiles +Comma separated list of proto files +.TP +.I type +Protocol buffer type name +.TP +.B \-\-proto_path +The search paths of proto files +.RB ( : +separated) +.TP +.B \-\-infile +Input filename (defaults to +.IR stdin ) +.TP +.B \-\-outfile +Output filename (defaults to +.IR stdout ) +.SH "SEE\ ALSO" +.BR grpc_cli (1), +.BR grpc_cli\-ls (1), +.BR grpc_cli\-call (1), +.BR grpc_cli\-type (1), +.BR grpc_cli\-parse (1), +.BR grpc_cli\-tojson (1), +.BR grpc_cli\-tobinary (1), +.BR grpc_cli\-help (1) diff --git a/grpc_cli-type.1 b/grpc_cli-type.1 new file mode 100644 index 0000000000000000000000000000000000000000..99e2caf29342ba001930151ae831f11deb12a1c9 --- /dev/null +++ b/grpc_cli-type.1 @@ -0,0 +1,55 @@ +.TH GRPC_CLI\-TYPE "1" "May 2021" "" "User Commands" +.SH NAME +.B grpc_cli\ type +\(en print type +.SH SYNOPSIS +.B grpc_cli type +.I address +.I type +.RI [ OPTION ]...\: +.SH OPTIONS +.TP +.I address +.IB host : port +.TP +.I type +Protocol buffer type name +.TP +.B \-\-ssl_target +Set server host for ssl validation +.TP +.B \-\-ssl_client_cert +Client cert for ssl +.TP +.B \-\-ssl_client_key +Client private key for ssl +.TP +.B \-\-local_connect_type +Set to +.B local_tcp +or +.B uds +.TP +.B \-\-channel_creds_type +Set to +.BR insecure , +.BR ssl , +.BR gdc , +.BR alts , +or +.B local +.TP +.B \-\-call_creds +Set to +.BR none , +or +.BI access_token= token +.SH "SEE\ ALSO" +.BR grpc_cli (1), +.BR grpc_cli\-ls (1), +.BR grpc_cli\-call (1), +.BR grpc_cli\-parse (1), +.BR grpc_cli\-totext (1), +.BR grpc_cli\-tojson (1), +.BR grpc_cli\-tobinary (1), +.BR grpc_cli\-help (1) diff --git a/grpc_cli.1 b/grpc_cli.1 new file mode 100644 index 0000000000000000000000000000000000000000..a03c566c286c7031cdf98256c1121ac6ef6a3166 --- /dev/null +++ b/grpc_cli.1 @@ -0,0 +1,48 @@ +.TH GRPC_CLI "1" "May 2021" "" "User Commands" +.SH NAME +.B grpc_cli +\(en a command-line tool to talk to a grpc server +.SH SYNOPSIS +.B grpc_cli +.I COMMAND +.RI [ OPTION ]...\: +.SH OPTIONS +.SS COMMANDS +.P +Each of the following has a corresponding man page: for example, +.BR grpc_cli\-ls (1) +for +.RB \(lq grpc_cli\ ls \(rq. +.TP +.B grpc_cli\ ls +List services +.TP +.B grpc_cli\ call +Call method +.TP +.B grpc_cli\ type +Print type +.TP +.B grpc_cli\ parse +Parse message +.TP +.B grpc_cli\ totext +Convert binary message to text +.TP +.B grpc_cli\ tojson +Convert binary message to json +.TP +.B grpc_cli\ tobinary +Convert text message to binary +.TP +.B grpc_cli\ help +Print this message, or per-command usage +.SH "SEE\ ALSO" +.BR grpc_cli\-ls (1), +.BR grpc_cli\-call (1), +.BR grpc_cli\-type (1), +.BR grpc_cli\-parse (1), +.BR grpc_cli\-totext (1), +.BR grpc_cli\-tojson (1), +.BR grpc_cli\-tobinary (1), +.BR grpc_cli\-help (1) diff --git a/opencensus-proto-0.3.0.tar.gz b/opencensus-proto-0.3.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..18db625578da74a7371799ff90f50c4dfee12da2 Binary files /dev/null and b/opencensus-proto-0.3.0.tar.gz differ diff --git a/xds-cb28da3451f158a947dfc45090fe92b07b243bc1.tar.gz b/xds-cb28da3451f158a947dfc45090fe92b07b243bc1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..89bb94252a21934cb9ff87e2479b720638ad78b5 Binary files /dev/null and b/xds-cb28da3451f158a947dfc45090fe92b07b243bc1.tar.gz differ