Update to 1.39.0

General:
  • New version 1.39.0
  • Rebase patches as needed

C (core) and C++ (cpp):
  • New C soversion 18
  • New C++ soversion 1.39

Python:
  • New subpackages python3-grpcio-admin and python3-grpcio-csds
This commit is contained in:
Benjamin A. Beasley 2021-06-10 11:00:02 -04:00
parent 603761ed3f
commit 2933935dc1
9 changed files with 399 additions and 99 deletions

1
.gitignore vendored
View File

@ -11,3 +11,4 @@
/grpc-1.37.0.tar.gz /grpc-1.37.0.tar.gz
/grpc-1.37.1.tar.gz /grpc-1.37.1.tar.gz
/googletest-release-1.11.0.tar.gz /googletest-release-1.11.0.tar.gz
/grpc-1.39.0.tar.gz

View File

@ -1,41 +0,0 @@
From 5d56d52e0829e503e403568de66bb6cebfec3202 Mon Sep 17 00:00:00 2001
From: Sergey Avseyev <sergey.avseyev@gmail.com>
Date: Wed, 28 Nov 2018 18:53:22 +0300
Subject: [PATCH 1/4] enforce system crypto policies
---
test/core/handshake/client_ssl.cc | 3 +--
test/core/handshake/server_ssl_common.cc | 3 +--
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/test/core/handshake/client_ssl.cc b/test/core/handshake/client_ssl.cc
index 467df6e229..b31934e51b 100644
--- a/test/core/handshake/client_ssl.cc
+++ b/test/core/handshake/client_ssl.cc
@@ -161,8 +161,7 @@ static void server_thread(void* arg) {
// 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";
+ "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/test/core/handshake/server_ssl_common.cc b/test/core/handshake/server_ssl_common.cc
index 41b2829d8b..8b21ea7c73 100644
--- a/test/core/handshake/server_ssl_common.cc
+++ b/test/core/handshake/server_ssl_common.cc
@@ -167,8 +167,7 @@ bool server_ssl_test(const char* alpn_list[], unsigned int alpn_list_len,
// 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";
+ "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.");
--
2.21.0

View File

@ -1,6 +1,6 @@
diff -Naur grpc-1.37.0-original/tools/distrib/python/grpcio_tools/protoc_lib_deps.py grpc-1.37.0/tools/distrib/python/grpcio_tools/protoc_lib_deps.py diff -Naur grpc-1.39.0-original/tools/distrib/python/grpcio_tools/protoc_lib_deps.py grpc-1.39.0/tools/distrib/python/grpcio_tools/protoc_lib_deps.py
--- grpc-1.37.0-original/tools/distrib/python/grpcio_tools/protoc_lib_deps.py 2021-04-06 18:48:56.000000000 -0400 --- grpc-1.39.0-original/tools/distrib/python/grpcio_tools/protoc_lib_deps.py 2021-07-20 18:39:39.000000000 -0400
+++ grpc-1.37.0/tools/distrib/python/grpcio_tools/protoc_lib_deps.py 2021-04-08 15:30:28.142459012 -0400 +++ grpc-1.39.0/tools/distrib/python/grpcio_tools/protoc_lib_deps.py 2021-07-23 14:46:07.887714469 -0400
@@ -14,10 +14,9 @@ @@ -14,10 +14,9 @@
# limitations under the License. # limitations under the License.
@ -13,6 +13,6 @@ diff -Naur grpc-1.37.0-original/tools/distrib/python/grpcio_tools/protoc_lib_dep
-CC_INCLUDE='third_party/protobuf/src' -CC_INCLUDE='third_party/protobuf/src'
-PROTO_INCLUDE='third_party/protobuf/src' -PROTO_INCLUDE='third_party/protobuf/src'
- -
-PROTOBUF_SUBMODULE_VERSION="d7e943b8d2bc444a8c770644e73d090b486f8b37" -PROTOBUF_SUBMODULE_VERSION="436bd7880e458532901c58f4d9d1ea23fa7edd52"
+CC_INCLUDE='/usr/include' +CC_INCLUDE='/usr/include'
+PROTO_INCLUDE='/usr/include' +PROTO_INCLUDE='/usr/include'

View File

@ -0,0 +1,69 @@
diff -Naur --no-dereference grpc-1.39.0-original/test/core/http/test_server.py grpc-1.39.0/test/core/http/test_server.py
--- grpc-1.39.0-original/test/core/http/test_server.py 2021-07-20 18:39:39.000000000 -0400
+++ grpc-1.39.0/test/core/http/test_server.py 2021-08-02 15:53:10.756821227 -0400
@@ -15,7 +15,7 @@
"""Server for httpcli_test"""
import argparse
-import BaseHTTPServer
+import http.server
import os
import ssl
import sys
@@ -26,7 +26,7 @@
_KEY = os.path.abspath(
os.path.join(os.path.dirname(sys.argv[0]), '../../..',
'src/core/tsi/test_creds/server1.key'))
-print _PEM
+print(_PEM)
open(_PEM).close()
argp = argparse.ArgumentParser(description='Server for httpcli_test')
@@ -34,29 +34,29 @@
argp.add_argument('-s', '--ssl', default=False, action='store_true')
args = argp.parse_args()
-print 'server running on port %d' % args.port
+print('server running on port %d' % args.port)
-class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
+class Handler(http.server.BaseHTTPRequestHandler):
def good(self):
self.send_response(200)
self.send_header('Content-Type', 'text/html')
self.end_headers()
- self.wfile.write('<html><head><title>Hello world!</title></head>')
- self.wfile.write('<body><p>This is a test</p></body></html>')
+ self.wfile.write(b'<html><head><title>Hello world!</title></head>')
+ self.wfile.write(b'<body><p>This is a test</p></body></html>')
def do_GET(self):
if self.path == '/get':
self.good()
def do_POST(self):
- content = self.rfile.read(int(self.headers.getheader('content-length')))
+ content = self.rfile.read(int(self.headers.get('content-length')))
if self.path == '/post' and content == 'hello':
self.good()
-httpd = BaseHTTPServer.HTTPServer(('localhost', args.port), Handler)
+httpd = http.server.HTTPServer(('localhost', args.port), Handler)
if args.ssl:
httpd.socket = ssl.wrap_socket(httpd.socket,
certfile=_PEM,
diff -Naur --no-dereference grpc-1.39.0-original/tools/distrib/python_wrapper.sh grpc-1.39.0/tools/distrib/python_wrapper.sh
--- grpc-1.39.0-original/tools/distrib/python_wrapper.sh 2021-07-20 18:39:39.000000000 -0400
+++ grpc-1.39.0/tools/distrib/python_wrapper.sh 2021-08-02 13:04:51.034495917 -0400
@@ -14,7 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-for p in python2.7 python2.6 python2 python not_found ; do
+for p in python3 not_found ; do
python=$(which $p || echo not_found)

View File

@ -0,0 +1,30 @@
diff -Naur grpc-1.39.0-original/test/core/http/httpcli_test.cc grpc-1.39.0/test/core/http/httpcli_test.cc
--- grpc-1.39.0-original/test/core/http/httpcli_test.cc 2021-07-20 18:39:39.000000000 -0400
+++ grpc-1.39.0/test/core/http/httpcli_test.cc 2021-08-02 11:38:43.215629892 -0400
@@ -165,9 +165,9 @@
lslash = me + (lslash - me) - sizeof("http");
}
root = static_cast<char*>(
- gpr_malloc(static_cast<size_t>(lslash - me + sizeof("/../.."))));
+ gpr_malloc(static_cast<size_t>(lslash - me + sizeof("/.."))));
memcpy(root, me, static_cast<size_t>(lslash - me));
- memcpy(root + (lslash - me), "/../..", sizeof("/../.."));
+ memcpy(root + (lslash - me), "/..", sizeof("/.."));
} else {
root = gpr_strdup(".");
}
diff -Naur grpc-1.39.0-original/test/core/http/httpscli_test.cc grpc-1.39.0/test/core/http/httpscli_test.cc
--- grpc-1.39.0-original/test/core/http/httpscli_test.cc 2021-07-20 18:39:39.000000000 -0400
+++ grpc-1.39.0/test/core/http/httpscli_test.cc 2021-08-02 11:38:52.825572125 -0400
@@ -166,9 +166,9 @@
lslash = me + (lslash - me) - sizeof("http");
}
root = static_cast<char*>(
- gpr_malloc(static_cast<size_t>(lslash - me + sizeof("/../.."))));
+ gpr_malloc(static_cast<size_t>(lslash - me + sizeof("/.."))));
memcpy(root, me, static_cast<size_t>(lslash - me));
- memcpy(root + (lslash - me), "/../..", sizeof("/../.."));
+ memcpy(root + (lslash - me), "/..", sizeof("/.."));
} else {
root = gpr_strdup(".");
}

View File

@ -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.");

View File

@ -1,6 +1,7 @@
# These are not real spelling errors... # These are not real spelling errors...
addFilter(r' spelling-error .*[ \(]en_US\)? (microservices|auth|gRPC|' addFilter(r' spelling-error .*[ \(]en_US\)? (microservices|auth|gRPC|'
r'channelz|proto(buf)?|unary|rpc)|grpcio ') r'channelz|proto(buf)?|unary|rpc|grpcio|csds|localhost|'
r'grpc(debug)?|servicers|[Dx]DS|programatically) ')
# Maybe some of these are supposed to be CRNL-terminated: # Maybe some of these are supposed to be CRNL-terminated:
addFilter(r' wrong-file-end-of-line-encoding ' addFilter(r' wrong-file-end-of-line-encoding '
r'/usr/share/doc/grpc/examples/csharp/') r'/usr/share/doc/grpc/examples/csharp/')
@ -24,3 +25,8 @@ addFilter(r' shared-lib-without-dependency-information '
addFilter(r' no-manual-page-for-binary grpc_.*_plugin$') addFilter(r' no-manual-page-for-binary grpc_.*_plugin$')
# There is really no version information available. # There is really no version information available.
addFilter(r' unversioned-explicit-provides bundled\(upb\)') addFilter(r' unversioned-explicit-provides bundled\(upb\)')
# We use rpmautospec, which rpmlint may not yet understand
addFilter(r' Possible unexpanded macro in: .*%autorelease$')
addFilter(r' %changelog entries must start with \*$')
# This really does make sense:
addFilter(r' summary-not-capitalized .*xDS$')

299
grpc.spec
View File

@ -2,11 +2,19 @@
# errors. # errors.
%global cpp_std 17 %global cpp_std 17
# Bootstrapping breaks the circular dependency on python3dist(xds-protos),
# which is packaged separately but ultimately generated from grpc sources using
# the proto compilers in this package; the consequence is that we cannot build
# the python3-grpcio-admin or python3-grpcio-csds, or the Python documentation,
# until after bootstrapping.
%bcond_with bootstrap
# However, gtest in Fedora uses the C++11 ABI, so we get linker errors building # However, gtest in Fedora uses the C++11 ABI, so we get linker errors building
# the tests if we use C++17. We must therefore bundle a copy of gtest in the # the tests if we use C++17. We must therefore bundle a copy of gtest in the
# source RPM rather than using the system copy. This is to be discouraged, but # source RPM rather than using the system copy. This is to be discouraged, but
# there is no alternative in this case. It is not treated as a bundled library # there is no alternative in this case. It is not treated as a bundled library
# because it is used only at build time, and is not installed. # because it is used only at build time, and contributes nothing to the
# installed files.
%global gtest_version 1.11.0 %global gtest_version 1.11.0
%bcond_with system_gtest %bcond_with system_gtest
@ -28,16 +36,16 @@
%bcond_with python_gevent_tests %bcond_with python_gevent_tests
Name: grpc Name: grpc
Version: 1.37.1 Version: 1.39.0
Release: %autorelease Release: %autorelease
Summary: RPC library and framework Summary: RPC library and framework
# CMakeLists.txt: gRPC_CORE_SOVERSION # CMakeLists.txt: gRPC_CORE_SOVERSION
%global c_so_version 15 %global c_so_version 18
# CMakeLists.txt: gRPC_CPP_SOVERSION # CMakeLists.txt: gRPC_CPP_SOVERSION
%global cpp_so_version 1.37 %global cpp_so_version 1.39
# CMakeLists.txt: gRPC_CSHARP_SOVERSION # CMakeLists.txt: gRPC_CSHARP_SOVERSION
%global csharp_so_version 2.37 %global csharp_so_version 2.39
# See https://github.com/abseil/abseil-cpp/issues/950#issuecomment-843169602 # See https://github.com/abseil/abseil-cpp/issues/950#issuecomment-843169602
# regarding unusual SOVERSION style (not a single number). # regarding unusual SOVERSION style (not a single number).
@ -157,6 +165,7 @@ BuildRequires: python3dist(cython)
# grpcio_tests (src/python/grpcio_tests/setup.py) install_requires: # grpcio_tests (src/python/grpcio_tests/setup.py) install_requires:
# enum34>=1.0.4; python_version<'3.4' # enum34>=1.0.4; python_version<'3.4'
# grpcio_csds (src/python/grpcio_csds/setup.py) install_requires:
# grpcio_channelz (src/python/grpcio_channelz/setup.py) install_requires: # grpcio_channelz (src/python/grpcio_channelz/setup.py) install_requires:
# grpcio_health_checking (src/python/grpcio_health_checking/setup.py) # grpcio_health_checking (src/python/grpcio_health_checking/setup.py)
# install_requires: # install_requires:
@ -174,9 +183,16 @@ BuildRequires: python3dist(protobuf) >= 3.6.0
# grpcio_status (src/python/grpcio_status/setup.py) install_requires: # grpcio_status (src/python/grpcio_status/setup.py) install_requires:
BuildRequires: python3dist(googleapis-common-protos) >= 1.5.5 BuildRequires: python3dist(googleapis-common-protos) >= 1.5.5
%if %{without bootstrap}
# grpcio_csds (src/python/grpcio_csds/setup.py) install_requires
BuildRequires: python3dist(xds-protos) >= 0.0.7
%endif
# Several packages have dependencies on grpcio or grpcio_tools—and grpcio-tests # Several packages have dependencies on grpcio or grpcio_tools—and grpcio-tests
# depends on all of the other Python packages—which are satisfied within this # depends on all of the other Python packages—which are satisfied within this
# package. # package.
#
# Similarly, grpcio_admin depends on grpcio_channelz and grpcio_csds.
# grpcio_tests (src/python/grpcio_tests/setup.py) install_requires: # grpcio_tests (src/python/grpcio_tests/setup.py) install_requires:
BuildRequires: python3dist(coverage) >= 4.0 BuildRequires: python3dist(coverage) >= 4.0
@ -213,11 +229,13 @@ BuildRequires: dos2unix
# Apply Fedora system crypto policies. Since this is Fedora-specific, the patch # Apply Fedora system crypto policies. Since this is Fedora-specific, the patch
# is not suitable for upstream. # is not suitable for upstream.
# https://docs.fedoraproject.org/en-US/packaging-guidelines/CryptoPolicies/#_cc_applications # https://docs.fedoraproject.org/en-US/packaging-guidelines/CryptoPolicies/#_cc_applications
Patch0: %{name}-0001-enforce-system-crypto-policies.patch #
# In fact, this may not be needed, since only testing code is patched.
Patch0: %{name}-1.39.0-system-crypto-policies.patch
# Build python3-grpcio_tools against system protobuf packages instead of # Build python3-grpcio_tools against system protobuf packages instead of
# expecting a git submodule. Must also add requisite linker flags using # expecting a git submodule. Must also add requisite linker flags using
# GRPC_PYTHON_LDFLAGS. # GRPC_PYTHON_LDFLAGS.
Patch1: %{name}-1.37.0-python-grpcio_tools-use-system-protobuf.patch Patch1: %{name}-1.39.0-python-grpcio_tools-use-system-protobuf.patch
# Add an option GRPC_PYTHON_BUILD_SYSTEM_ABSL to go with the gRPC_ABSL_PROVIDER # Add an option GRPC_PYTHON_BUILD_SYSTEM_ABSL to go with the gRPC_ABSL_PROVIDER
# option already provided upstream. See # option already provided upstream. See
# https://github.com/grpc/grpc/issues/25559. # https://github.com/grpc/grpc/issues/25559.
@ -239,9 +257,12 @@ Patch5: %{name}-1.36.4-python-grpcio_tests-skip-compression-tests.patch
# Remove it. We still have to build the core tests and link a test library # Remove it. We still have to build the core tests and link a test library
# (libgrpc++_test_config.so…) # (libgrpc++_test_config.so…)
Patch6: %{name}-1.37.0-grpc_cli-do-not-link-gtest-gmock.patch Patch6: %{name}-1.37.0-grpc_cli-do-not-link-gtest-gmock.patch
# In Python 3.10, “import importlib” does not implicitly import importlib.abc. # Fix confusion about path to python_wrapper.sh in httpcli/httpscli tests. I
# See https://github.com/grpc/grpc/issues/26062. # suppose that the unpatched code must be correct for how upstream runs the
Patch7: %{name}-1.37.0-importlib-abc-python3.10.patch # tests, somehow.
Patch7: %{name}-1.39.0-python_wrapper-path.patch
# Port Python 2 scripts used in core tests to Python 3
Patch8: %{name}-1.39.0-python2-test-scripts.patch
Requires: %{name}-data = %{version}-%{release} Requires: %{name}-data = %{version}-%{release}
@ -310,11 +331,15 @@ BuildArch: noarch
Obsoletes: python-grpcio-doc < 1.26.0-13 Obsoletes: python-grpcio-doc < 1.26.0-13
Provides: python-grpcio-doc = %{version}-%{release} Provides: python-grpcio-doc = %{version}-%{release}
%if %{without bootstrap}
Provides: python-grpcio-admin-doc = %{version}-%{release}
Provides: python-grpcio-csds-doc = %{version}-%{release}
Provides: python-grpcio-channelz-doc = %{version}-%{release} Provides: python-grpcio-channelz-doc = %{version}-%{release}
Provides: python-grpcio-health-checking-doc = %{version}-%{release} Provides: python-grpcio-health-checking-doc = %{version}-%{release}
Provides: python-grpcio-reflection-doc = %{version}-%{release} Provides: python-grpcio-reflection-doc = %{version}-%{release}
Provides: python-grpcio-status-doc = %{version}-%{release} Provides: python-grpcio-status-doc = %{version}-%{release}
Provides: python-grpcio-testing-doc = %{version}-%{release} Provides: python-grpcio-testing-doc = %{version}-%{release}
%endif
%description doc %description doc
Documentation and examples for gRPC, including documentation for the following: Documentation and examples for gRPC, including documentation for the following:
@ -330,6 +355,8 @@ Documentation and examples for gRPC, including documentation for the following:
Internals Internals
Python Python
grpcio grpcio
grpcio_admin
grpcio_csds
grpcio_channelz grpcio_channelz
grpcio_health_checking grpcio_health_checking
grpcio_reflection grpcio_reflection
@ -424,12 +451,69 @@ Summary: Package for gRPC Python tools
Package for gRPC Python tools. Package for gRPC Python tools.
%if %{without bootstrap}
%package -n python3-grpcio-admin
Summary: A collection of admin services
License: ASL 2.0
BuildArch: noarch
%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: ASL 2.0
BuildArch: noarch
%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 %package -n python3-grpcio-channelz
Summary: Channel Level Live Debug Information Service for gRPC Summary: Channel Level Live Debug Information Service for gRPC
License: ASL 2.0 License: ASL 2.0
BuildArch: noarch BuildArch: noarch
%description -n python3-grpcio-channelz %description -n python3-grpcio-channelz
gRPC Python Channelz package
============================
Channelz is a live debug tool in gRPC Python. Channelz is a live debug tool in gRPC Python.
@ -439,6 +523,9 @@ License: ASL 2.0
BuildArch: noarch BuildArch: noarch
%description -n python3-grpcio-health-checking %description -n python3-grpcio-health-checking
gRPC Python Health Checking
===========================
Reference package for GRPC Python health checking. Reference package for GRPC Python health checking.
@ -448,6 +535,9 @@ License: ASL 2.0
BuildArch: noarch BuildArch: noarch
%description -n python3-grpcio-reflection %description -n python3-grpcio-reflection
gRPC Python Reflection package
==============================
Reference package for reflection in GRPC Python. Reference package for reflection in GRPC Python.
@ -457,6 +547,9 @@ License: ASL 2.0
BuildArch: noarch BuildArch: noarch
%description -n python3-grpcio-status %description -n python3-grpcio-status
gRPC Python Status Proto
===========================
Reference package for GRPC Python status proto mapping. Reference package for GRPC Python status proto mapping.
@ -466,12 +559,16 @@ License: ASL 2.0
BuildArch: noarch BuildArch: noarch
%description -n python3-grpcio-testing %description -n python3-grpcio-testing
gRPC Python Testing Package
===========================
Testing utilities for gRPC Python. Testing utilities for gRPC Python.
%prep %prep
%autosetup -p1 %autosetup -p1
echo '===== Preparing gtest/gmock =====' 2>&1
%if %{without system_gtest} %if %{without system_gtest}
# Copy in the needed gtest/gmock implementations. # Copy in the needed gtest/gmock implementations.
%setup -q -T -D -b 1 %setup -q -T -D -b 1
@ -499,12 +596,14 @@ sed -r -i 's/^([[:blank:]]*)(\$\{_gRPC_GFLAGS_LIBRARIES\})/'\
'\1\2\n\1gtest\n\1gmock/' CMakeLists.txt '\1\2\n\1gtest\n\1gmock/' CMakeLists.txt
%endif %endif
echo '===== Removing bundled wyhash =====' 2>&1
# Remove bundled wyhash (via upb); to avoid patching the build system, simply # Remove bundled wyhash (via upb); to avoid patching the build system, simply
# use a symlink to find the system copy. This is sufficient since it is a # use a symlink to find the system copy. This is sufficient since it is a
# header-only library. # header-only library.
rm -rvf third_party/upb/third_party/wyhash rm -rvf third_party/upb/third_party/wyhash
ln -s %{_includedir}/wyhash_final1/ third_party/upb/third_party/wyhash ln -s %{_includedir}/wyhash_final1/ third_party/upb/third_party/wyhash
echo '===== Removing bundled xxhash =====' 2>&1
# Remove bundled xxhash # Remove bundled xxhash
rm -rvf third_party/xxhash rm -rvf third_party/xxhash
# Since grpc sets XXH_INCLUDE_ALL wherever it uses xxhash, it is using xxhash # Since grpc sets XXH_INCLUDE_ALL wherever it uses xxhash, it is using xxhash
@ -513,14 +612,17 @@ rm -rvf third_party/xxhash
# found instead, and there are no linker flags to add. See also # found instead, and there are no linker flags to add. See also
# https://github.com/grpc/grpc/issues/25945. # https://github.com/grpc/grpc/issues/25945.
echo '===== Fixing permissions =====' 2>&1
# Fix some of the weirdest accidentally-executable files # Fix some of the weirdest accidentally-executable files
find . -type f -name '*.md' -perm /0111 -execdir chmod -v a-x '{}' '+' find . -type f -name '*.md' -perm /0111 -execdir chmod -v a-x '{}' '+'
echo '===== Loosening version specifications =====' 2>&1
# Allow building Python documentation with a newer Sphinx; the upstream version # Allow building Python documentation with a newer Sphinx; the upstream version
# requirement is needlessly strict. (It is fine for upstreams own purposes, as # requirement is needlessly strict. (It is fine for upstreams own purposes, as
# they are happy to build documentation with a pinned old version.) # they are happy to build documentation with a pinned old version.)
sed -r -i "s/('Sphinx)~=.*'/\1'/" setup.py sed -r -i "s/('Sphinx)~=.*'/\1'/" setup.py
echo '===== Removing selected unused sources =====' 2>&1
# Remove unused sources that have licenses not in the License field, to ensure # Remove unused sources that have licenses not in the License field, to ensure
# they are not accidentally used in the build. See the comment above the base # they are not accidentally used in the build. See the comment above the base
# package License field for more details. # package License field for more details.
@ -549,6 +651,7 @@ rm -rvf examples/android src/android
# to do that. # to do that.
find . -type f -name .gitignore -print -delete find . -type f -name .gitignore -print -delete
echo '===== Fixing shebangs =====' 2>&1
# Find executables with /usr/bin/env shebangs in the examples, and fix them. # Find executables with /usr/bin/env shebangs in the examples, and fix them.
find examples -type f -perm /0111 | find examples -type f -perm /0111 |
while read -r fn while read -r fn
@ -560,12 +663,14 @@ find examples -type f -perm /0111 |
fi fi
done done
echo '===== Fixing line endings =====' 2>&1
# Fix some CRNL line endings: # Fix some CRNL line endings:
dos2unix \ dos2unix \
examples/cpp/helloworld/CMakeLists.txt \ examples/cpp/helloworld/CMakeLists.txt \
examples/cpp/helloworld/cmake_externalproject/CMakeLists.txt examples/cpp/helloworld/cmake_externalproject/CMakeLists.txt
# We leave those under examples/csharp alone. # We leave those under examples/csharp alone.
echo '===== Fixing hard-coded C++ standard =====' 2>&1
# We need to adjust the C++ standard to avoid abseil-related linker errors. For # We need to adjust the C++ standard to avoid abseil-related linker errors. For
# the main C++ build, we can use CMAKE_CXX_STANDARD. For extensions, examples, # the main C++ build, we can use CMAKE_CXX_STANDARD. For extensions, examples,
# etc., we must patch. # etc., we must patch.
@ -576,23 +681,27 @@ sed -r -i 's/(std=c\+\+)11/\1%{cpp_std}/g' \
tools/run_tests/artifacts/artifact_targets.py \ tools/run_tests/artifacts/artifact_targets.py \
tools/distrib/python/grpcio_tools/setup.py tools/distrib/python/grpcio_tools/setup.py
echo '===== Fixing .pc install path =====' 2>&1
# Fix the install path for .pc files # Fix the install path for .pc files
# https://github.com/grpc/grpc/issues/25635 # https://github.com/grpc/grpc/issues/25635
sed -r -i 's|lib(/pkgconfig)|\${gRPC_INSTALL_LIBDIR}\1|' CMakeLists.txt sed -r -i 's|lib(/pkgconfig)|\${gRPC_INSTALL_LIBDIR}\1|' CMakeLists.txt
echo '===== Patching to skip certain broken tests =====' 2>&1
%if %{without unexplained_failing_python_lite_tests} %if %{without unexplained_failing_python_lite_tests}
# Confirmed in 1.39.0 2021-07-29
# TODO figure out how to report this upstream in a useful/actionable way # TODO figure out how to report this upstream in a useful/actionable way
sed -r -i "s/^([[:blank:]]*)(def \ sed -r -i "s/^([[:blank:]]*)(def test_deallocated_server_stops)\\b/\
test_immediately_connectable_channel_connectivity)\\b/\
\\1@unittest.skip('May hang unexplainedly')\\n\\1\\2/" \ \\1@unittest.skip('May hang unexplainedly')\\n\\1\\2/" \
'src/python/grpcio_tests/tests/unit/_channel_connectivity_test.py' 'src/python/grpcio_tests/tests/unit/_server_shutdown_test.py'
%ifarch %{ix86} %{arm32} %ifarch %{ix86} %{arm32}
# Confirmed in 1.39.0 2021-07-29
# TODO figure out how to report this upstream in a useful/actionable way # TODO figure out how to report this upstream in a useful/actionable way
sed -r -i "s/^([[:blank:]]*)(def test_concurrent_stream_stream)\\b/\ sed -r -i "s/^([[:blank:]]*)(def test_concurrent_stream_stream)\\b/\
\\1@unittest.skip('May hang unexplainedly')\\n\\1\\2/" \ \\1@unittest.skip('May hang unexplainedly')\\n\\1\\2/" \
'src/python/grpcio_tests/tests/testing/_client_test.py' 'src/python/grpcio_tests/tests/testing/_client_test.py'
# Confirmed in 1.39.0 2021-07-29
# These tests fail with: # These tests fail with:
# OverflowError: Python int too large to convert to C ssize_t # OverflowError: Python int too large to convert to C ssize_t
# TODO figure out how to report this upstream in a useful/actionable way # TODO figure out how to report this upstream in a useful/actionable way
@ -603,39 +712,13 @@ sed -r -i \
'src/python/grpcio_tests/tests/unit/_session_cache_test.py' 'src/python/grpcio_tests/tests/unit/_session_cache_test.py'
%endif %endif
%ifarch s390x
# Unexplained segmentation fault
# TODO figure out how to report this upstream in a useful/actionable way
sed -r -i "s/^([[:blank:]]*)(def test_start_xds_server)\\b/\
\\1@unittest.skip('Unexplained segmentation fault')\\n\\1\\2/" \
'src/python/grpcio_tests/tests/unit/_xds_credentials_test.py'
%endif
%if 0%{?fedora} > 34 || 0%{?rhel} > 8
# Python 3.10 failures:
# AssertionError: 'StatusCode.NOT_FOUND' not found in '<_InactiveRpcError of
# RPC that terminated with:\n\tstatus = NOT_FOUND\n\tdetails = "Failed to get
# the channel, please ensure your channel_id==10000 is
# valid"\n\tdebug_error_string =
# "{"created":"@1619130545.513500675","description":"Error received from peer
# ipv6:[::1]:35867","file":"src/core/lib/surface/call.cc","file_line":1067,"grpc_message":"Failed
# to get the channel, please ensure your channel_id==10000 is
# valid","grpc_status":5}"\n>'
#
# AttributeError: 'NoneType' object has no attribute 'IsInitialized'
sed -r -i "s/^([[:blank:]]*)(def test_invalid_query_get_\
(channel|server(_sockets)?|socket|subchannel))\\b/\
\\1@unittest.skip('Unexplained failure')\\n\\1\\2/" \
'src/python/grpcio_tests/tests/channelz/_channelz_servicer_test.py'
%endif
%endif %endif
%build %build
# ~~~~ C (core) and C++ (cpp) ~~~~ # ~~~~ C (core) and C++ (cpp) ~~~~
echo '===== Building C (core) and C++ components =====' 2>&1
# We could use either make or ninja as the backend; ninja is faster and has no # We could use either make or ninja as the backend; ninja is faster and has no
# disadvantages (except a small additional BR, given we already need Python) # disadvantages (except a small additional BR, given we already need Python)
# #
@ -672,8 +755,13 @@ sed -r -i "s/^([[:blank:]]*)(def test_invalid_query_get_\
-GNinja -GNinja
%cmake_build %cmake_build
echo '===== Building C (core) and C++ documentation =====' 2>&1
# Doxygen (reference: C/core, C++, objc)
./tools/doxygen/run_doxygen.sh
# ~~~~ Python ~~~~ # ~~~~ Python ~~~~
echo '===== Building Python grpcio package =====' 2>&1
# Since we will need all of the Python packages for the documentation build, # Since we will need all of the Python packages for the documentation build,
# and there are some other interdependencies (e.g., many have setup_requires: # and there are some other interdependencies (e.g., many have setup_requires:
# grpcio-tools), we do a temporary install of the built packages into a local # grpcio-tools), we do a temporary install of the built packages into a local
@ -711,6 +799,7 @@ export GRPC_PYTHON_LDFLAGS="$(pkg-config --libs protobuf)"
-O1 --skip-build --root "${PYROOT}" -O1 --skip-build --root "${PYROOT}"
# ~~ grpcio-tools ~~ # ~~ grpcio-tools ~~
echo '===== Building Python grpcio_tools package =====' 2>&1
pushd "tools/distrib/python/grpcio_tools/" >/dev/null pushd "tools/distrib/python/grpcio_tools/" >/dev/null
# When copying more things in here, make sure the subpackage License field # When copying more things in here, make sure the subpackage License field
# stays correct. We need copies, not symlinks, so that the “graft” in # stays correct. We need copies, not symlinks, so that the “graft” in
@ -734,13 +823,17 @@ find . -type f -name protoc.py -execdir sed -r -i '1{/^#!/d}' '{}' '+'
-O1 --skip-build --root "${PYROOT}" -O1 --skip-build --root "${PYROOT}"
popd >/dev/null popd >/dev/null
# ~~ pure-python modules grpcio-* ~~ echo '===== Building pure-Python packages =====' 1>&2
for suffix in channelz health_checking reflection status testing tests for suffix in channelz %{?!with_bootstrap:csds admin} health_checking \
reflection status testing tests
do do
echo "----> grpcio_${suffix} <----" 1>&2 echo "----> grpcio_${suffix} <----" 1>&2
pushd "src/python/grpcio_${suffix}/" >/dev/null pushd "src/python/grpcio_${suffix}/" >/dev/null
%{__python3} %{py_setup} %{?py_setup_args} preprocess if ! echo "${suffix}" | grep -E "^(admin|csds)$" >/dev/null
if [ "${suffix}" != 'testing' ] then
%{__python3} %{py_setup} %{?py_setup_args} preprocess
fi
if ! echo "${suffix}" | grep -E "^(admin|csds|testing)$" >/dev/null
then then
%{__python3} %{py_setup} %{?py_setup_args} build_package_protos %{__python3} %{py_setup} %{?py_setup_args} build_package_protos
fi fi
@ -750,12 +843,12 @@ do
popd >/dev/null popd >/dev/null
done done
# ~~ documentation ~~ echo '===== Building pure-Python documentation =====' 1>&2
# Doxygen (reference: C/core, C++, objc) %if %{without bootstrap}
./tools/doxygen/run_doxygen.sh
# Sphinx (Python) # Sphinx (Python)
%{__python3} %{py_setup} %{?py_setup_args} doc %{__python3} %{py_setup} %{?py_setup_args} doc
rm -vrf doc/build/.buildinfo doc/build/.doctrees rm -vrf doc/build/.buildinfo doc/build/.doctrees
%endif
%install %install
@ -808,7 +901,8 @@ pushd "tools/distrib/python/grpcio_tools/" >/dev/null
popd >/dev/null popd >/dev/null
# ~~ pure-python modules grpcio-* ~~ # ~~ pure-python modules grpcio-* ~~
for suffix in channelz health_checking reflection status testing for suffix in channelz %{?!with_bootstrap:csds admin} health_checking \
reflection status testing
do do
pushd "src/python/grpcio_${suffix}/" >/dev/null pushd "src/python/grpcio_${suffix}/" >/dev/null
%py3_install %py3_install
@ -842,8 +936,10 @@ rm -rvf "%{buildroot}$(dirname '%{sysbundle}')"
install -D -t '%{buildroot}%{_pkgdocdir}' -m 0644 -p AUTHORS *.md install -D -t '%{buildroot}%{_pkgdocdir}' -m 0644 -p AUTHORS *.md
cp -rp doc/ref examples '%{buildroot}%{_pkgdocdir}' cp -rp doc/ref examples '%{buildroot}%{_pkgdocdir}'
%if %{without bootstrap}
install -d '%{buildroot}%{_pkgdocdir}/python' install -d '%{buildroot}%{_pkgdocdir}/python'
cp -rp doc/build '%{buildroot}%{_pkgdocdir}/python/html' cp -rp doc/build '%{buildroot}%{_pkgdocdir}/python/html'
%endif
%check %check
@ -878,11 +974,24 @@ flaky_network
# Bad assumption about which directory the tests are running in: # Bad assumption about which directory the tests are running in:
# #
# E0413 22:43:56.610039235 19861 subprocess_posix.cc:61] # E0802 01:16:33.084040928 3911182 subprocess_posix.cc:61]
# execv 'x86_64-redhat-linux-gnu/../../test/core/http/python_wrapper.sh' # execv 'redhat-linux-build/../../test/core/http/python_wrapper.sh'
# failed: No such file or directory # failed: No such file or directory
# E0413 22:44:02.613251909 19856 httpscli_test.cc:55] # E0802 01:16:39.086691950 3911178 httpcli_test.cc:52]
# assertion failed: response->status == 200 # assertion failed: response->status == 200
# *** SIGABRT received at time=16278 66999 on cpu 1 ***
# While we have fixed a couple of problems with these tests, including porting
# the test server to Python 3, success still eludes us.
#
# 127.0.0.1 - - [02/Aug/2021 20:34:47] "GET /get HTTP/1.0" 200 -
# E0802 20:34:48.343858742 1765052 httpcli_test.cc:52]
# assertion failed: response->status == 200
# *** SIGABRT received at time=1627936488 on cpu 2 ***
# PC: @ 0x7fe44b4f2783 (unknown) pthread_kill@@GLIBC_2.34
# @ ... and at least 1 more frames
#
# Confirmed in 1.39.0 2021-08-02
httpcli httpcli
httpscli httpscli
@ -907,6 +1016,8 @@ httpscli
# This server is not currently running. # This server is not currently running.
# #
# To start it, run tools/run_tests/start_port_server.py # To start it, run tools/run_tests/start_port_server.py
#
# CHECKME
admin_services_end2end admin_services_end2end
alts_concurrent_connectivity alts_concurrent_connectivity
async_end2end async_end2end
@ -943,6 +1054,8 @@ xds_end2end
# *** SIGSEGV received at time=1618368497 *** # *** SIGSEGV received at time=1618368497 ***
# PC: @ 0x7fc56bfc1d3a (unknown) __strlen_sse2 # PC: @ 0x7fc56bfc1d3a (unknown) __strlen_sse2
# @ ... and at least 1 more frames # @ ... and at least 1 more frames
#
# CHECKME
evaluate_args evaluate_args
# Unexplained: # Unexplained:
# #
@ -951,6 +1064,8 @@ evaluate_args
# Value of: stack_trace->find("GetCurrentStackTrace") != std::string::npos # Value of: stack_trace->find("GetCurrentStackTrace") != std::string::npos
# Actual: false # Actual: false
# Expected: true # Expected: true
#
# CHECKME
examine_stack examine_stack
# Unexplained: # Unexplained:
# #
@ -960,6 +1075,8 @@ examine_stack
# Actual: false # Actual: false
# Expected: true # Expected: true
# [ FAILED ] StackTracerTest.Basic (3 ms) # [ FAILED ] StackTracerTest.Basic (3 ms)
#
# CHECKME
stack_tracer stack_tracer
# Unexplained: # Unexplained:
# #
@ -968,6 +1085,8 @@ stack_tracer
# [{"access_token":"ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_", "expires_in":3599, # [{"access_token":"ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_", "expires_in":3599,
# "token_type":"Bearer"}]. # "token_type":"Bearer"}].
# *** SIGSEGV received at time=1618368426 *** # *** SIGSEGV received at time=1618368426 ***
#
# CHECKME
test_core_security_credentials test_core_security_credentials
%ifarch s390x %ifarch s390x
@ -985,6 +1104,8 @@ test_core_security_credentials
# Which is: "::" # Which is: "::"
# "::1" # "::1"
# [ FAILED ] AddressSortingTest.TestSorterKnowsIpv6LoopbackIsAvailable (0 ms) # [ FAILED ] AddressSortingTest.TestSorterKnowsIpv6LoopbackIsAvailable (0 ms)
#
# CHECKME
address_sorting address_sorting
# Unexplained: # Unexplained:
@ -1004,16 +1125,22 @@ address_sorting
# @ 0x2aa3ed8155e (unknown) main # @ 0x2aa3ed8155e (unknown) main
# @ 0x3ff8372bdf4 (unknown) __libc_start_main # @ 0x3ff8372bdf4 (unknown) __libc_start_main
# @ 0x2aa3ed82724 (unknown) (unknown) # @ 0x2aa3ed82724 (unknown) (unknown)
#
# CHECKME
alts_crypt alts_crypt
# Unexplained: # Unexplained:
# #
# (aborted without output) # (aborted without output)
#
# CHECKME
alts_crypter alts_crypter
# Unexplained: # Unexplained:
# #
# (aborted without output) # (aborted without output)
#
# CHECKME
alts_frame_protector alts_frame_protector
# Unexplained: # Unexplained:
@ -1035,6 +1162,8 @@ alts_frame_protector
# @ 0x2aa11481b08 (unknown) main # @ 0x2aa11481b08 (unknown) main
# @ 0x3ff939abdf4 (unknown) __libc_start_main # @ 0x3ff939abdf4 (unknown) __libc_start_main
# @ 0x2aa11481bc4 (unknown) (unknown) # @ 0x2aa11481bc4 (unknown) (unknown)
#
# CHECKME
alts_grpc_record_protocol alts_grpc_record_protocol
# Unexplained: # Unexplained:
@ -1067,11 +1196,15 @@ alts_grpc_record_protocol
# @ 0x2aa3760281e (unknown) main # @ 0x2aa3760281e (unknown) main
# @ 0x3ff98aabdf4 (unknown) __libc_start_main # @ 0x3ff98aabdf4 (unknown) __libc_start_main
# @ 0x2aa376028b4 (unknown) (unknown) # @ 0x2aa376028b4 (unknown) (unknown)
#
# CHECKME
alts_handshaker_client alts_handshaker_client
# Unexplained: # Unexplained:
# #
# (aborted without output) # (aborted without output)
#
# CHECKME
alts_iovec_record_protocol alts_iovec_record_protocol
# Unexplained: # Unexplained:
@ -1105,6 +1238,8 @@ alts_iovec_record_protocol
# fails to parse ALTS context. # fails to parse ALTS context.
# E0506 13:27:12.407261763 2895549 alts_util.cc:43] # E0506 13:27:12.407261763 2895549 alts_util.cc:43]
# contains zero or more than one ALTS context. # contains zero or more than one ALTS context.
#
# CHECKME
alts_util alts_util
# Unexplained: # Unexplained:
@ -1128,6 +1263,8 @@ alts_util
# @ 0x2aa112019d6 (unknown) main # @ 0x2aa112019d6 (unknown) main
# @ 0x3ffae52bdf4 (unknown) __libc_start_main # @ 0x3ffae52bdf4 (unknown) __libc_start_main
# @ 0x2aa11201a84 (unknown) (unknown) # @ 0x2aa11201a84 (unknown) (unknown)
#
# CHECKME
alts_zero_copy_grpc_protector alts_zero_copy_grpc_protector
# Unexplained: # Unexplained:
@ -1148,6 +1285,8 @@ alts_zero_copy_grpc_protector
# @ 0x2aa1e9833ce (unknown) main # @ 0x2aa1e9833ce (unknown) main
# @ 0x3ffa05abdf4 (unknown) __libc_start_main # @ 0x3ffa05abdf4 (unknown) __libc_start_main
# @ 0x2aa1e983ac4 (unknown) (unknown) # @ 0x2aa1e983ac4 (unknown) (unknown)
#
# CHECKME
goaway_server goaway_server
# Unexplained: # Unexplained:
@ -1163,6 +1302,8 @@ goaway_server
# @ 0x2aa27600a24 (unknown) main # @ 0x2aa27600a24 (unknown) main
# @ 0x3ffa332bdf4 (unknown) __libc_start_main # @ 0x3ffa332bdf4 (unknown) __libc_start_main
# @ 0x2aa27600aa4 (unknown) (unknown) # @ 0x2aa27600aa4 (unknown) (unknown)
#
# CHECKME
murmur_hash murmur_hash
# Unexplained: # Unexplained:
@ -1186,9 +1327,38 @@ murmur_hash
# @ 0x40000028c8 (unknown) main # @ 0x40000028c8 (unknown) main
# @ 0x4001f3edf4 (unknown) __libc_start_main # @ 0x4001f3edf4 (unknown) __libc_start_main
# @ 0x40000029f4 (unknown) (unknown) # @ 0x40000029f4 (unknown) (unknown)
#
# CHECKME
tcp_posix tcp_posix
%endif %endif
%ifarch x86_64 %{ix86} %{arm64}
# Unexplained hang.
#
# This may be flaky and sometimes succeed; this is known to be the case on
# x86_64.
#
# mutex: 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 done 1.372237159 s
# mutex try: 256 512 1024 2048 4096 8192 16384 32768 65536 131072 done 1.285748396 s
# cv: 256 512 1024 2048 done 1.134636147 s
# timedcv: 256 512 1024 done 1.925035489 s
# queue: 256timeout: sending signal TERM to command 'redhat-linux-build/sync_test'
# *** SIGTERM received at time=1627413101 on cpu 0 ***
# PC: @ 0xffff8299f8a8 (unknown) syscall
# @ 0xffff82896850 1732032480 (unknown)
# @ 0xffff82d7b7bc 112 (unknown)
# @ 0xffff8237ac44 48 AbslInternalPerThreadSemWait_lts_20210324
# @ 0xffff8237e5c8 144 absl::lts_20210324::CondVar::WaitCommon()
# @ 0xffff82ce82c4 64 gpr_cv_wait
# @ 0xaaaae0ae2118 288 test()
# @ 0xaaaae0ae1560 64 main
# @ 0xffff828e10c4 272 __libc_start_call_main
# @ 0xffff828e1198 (unknown) __libc_start_main@GLIBC_2.17
#
# Confirmed in 1.39.0 2021-08-01
sync
%endif
%ifarch %{ix86} %ifarch %{ix86}
# Unexplained: # Unexplained:
# #
@ -1200,6 +1370,8 @@ tcp_posix
# expected # expected
# Which is: 4 # Which is: 4
# [ FAILED ] ChannelTracerTest.TestMultipleEviction (2 ms) # [ FAILED ] ChannelTracerTest.TestMultipleEviction (2 ms)
#
# CHECKME
channel_trace channel_trace
%endif %endif
@ -1211,6 +1383,8 @@ channel_trace
# *** SIGABRT received at time=1619103150 *** # *** SIGABRT received at time=1619103150 ***
# PC: @ 0xf7fa3559 (unknown) __kernel_vsyscall # PC: @ 0xf7fa3559 (unknown) __kernel_vsyscall
# @ ... and at least 1 more frames # @ ... and at least 1 more frames
#
# CHECKME
certificate_provider_store certificate_provider_store
# Unexplained: # Unexplained:
@ -1222,6 +1396,8 @@ certificate_provider_store
# @ 0xb67e817c (unknown) (unknown) # @ 0xb67e817c (unknown) (unknown)
# @ 0xb682d6b0 (unknown) (unknown) # @ 0xb682d6b0 (unknown) (unknown)
# @ 0xb682c114 (unknown) raise # @ 0xb682c114 (unknown) raise
#
# CHECKME
grpc_tls_certificate_distributor grpc_tls_certificate_distributor
# Unexplained: # Unexplained:
@ -1231,6 +1407,8 @@ grpc_tls_certificate_distributor
# Expected: (busy) <= (total), actual: 9025859384538762329 vs # Expected: (busy) <= (total), actual: 9025859384538762329 vs
# 3751280126112716351 # 3751280126112716351
# [ FAILED ] GetCpuStatsTest.BusyNoLargerThanTotal (0 ms) # [ FAILED ] GetCpuStatsTest.BusyNoLargerThanTotal (0 ms)
#
# CHECKME
lb_get_cpu_stats lb_get_cpu_stats
%endif %endif
@ -1259,13 +1437,16 @@ for suite in \
%{?with_python_gevent_tests:test_gevent} \ %{?with_python_gevent_tests:test_gevent} \
test_py3_only test_py3_only
do do
echo "==== $(date -u --iso-8601=ns): Python ${suite} ===="
# See the implementation of the %%pytest macro, upon which our environment # See the implementation of the %%pytest macro, upon which our environment
# setup is based: # setup is based. We add a timeout that is rather long, as it must apply to
# the entire test suite. (Patching in a per-test timeout would be harder.)
env CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" \ env CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" \
LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}" \ LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}" \
PATH="%{buildroot}%{_bindir}:$PATH" \ PATH="%{buildroot}%{_bindir}:$PATH" \
PYTHONPATH="${PYTHONPATH:-%{buildroot}%{python3_sitearch}:%{buildroot}%{python3_sitelib}}" \ PYTHONPATH="${PYTHONPATH:-%{buildroot}%{python3_sitearch}:%{buildroot}%{python3_sitelib}}" \
PYTHONDONTWRITEBYTECODE=1 \ PYTHONDONTWRITEBYTECODE=1 \
timeout -k 31m -v 30m \
%{__python3} %{py_setup} %{?py_setup_args} "${suite}" %{__python3} %{py_setup} %{?py_setup_args} "${suite}"
done done
popd popd
@ -1368,11 +1549,25 @@ fi
%{python3_sitearch}/grpcio_tools-%{version}-py%{python3_version}.egg-info %{python3_sitearch}/grpcio_tools-%{version}-py%{python3_version}.egg-info
%if %{without bootstrap}
%files -n python3-grpcio-admin
%{python3_sitelib}/grpc_admin
%{python3_sitelib}/grpcio_admin-%{version}-py%{python3_version}.egg-info
%endif
%files -n python3-grpcio-channelz %files -n python3-grpcio-channelz
%{python3_sitelib}/grpc_channelz %{python3_sitelib}/grpc_channelz
%{python3_sitelib}/grpcio_channelz-%{version}-py%{python3_version}.egg-info %{python3_sitelib}/grpcio_channelz-%{version}-py%{python3_version}.egg-info
%if %{without bootstrap}
%files -n python3-grpcio-csds
%{python3_sitelib}/grpc_csds
%{python3_sitelib}/grpcio_csds-%{version}-py%{python3_version}.egg-info
%endif
%files -n python3-grpcio-health-checking %files -n python3-grpcio-health-checking
%{python3_sitelib}/grpc_health %{python3_sitelib}/grpc_health
%{python3_sitelib}/grpcio_health_checking-%{version}-py%{python3_version}.egg-info %{python3_sitelib}/grpcio_health_checking-%{version}-py%{python3_version}.egg-info

View File

@ -1,2 +1,2 @@
SHA512 (grpc-1.37.1.tar.gz) = fe02447f558116e9ed2de48142b9bd3b8908d496aea7816406eee2c6ad136714ee14c2104a82a32f56ab486c5050b4665c55bacb24c91ceabcf1b998a5fc86b7 SHA512 (grpc-1.39.0.tar.gz) = bf1095d03eb1eb8a803730702edd43a4d4a448f3f1370aff8688f8ea8fc3a8f29bb8399e6356a9a347c775129960632e0e3b883a3b82f4af41022786ff40df00
SHA512 (googletest-release-1.11.0.tar.gz) = 6fcc7827e4c4d95e3ae643dd65e6c4fc0e3d04e1778b84f6e06e390410fe3d18026c131d828d949d2f20dde6327d30ecee24dcd3ef919e21c91e010d149f3a28 SHA512 (googletest-release-1.11.0.tar.gz) = 6fcc7827e4c4d95e3ae643dd65e6c4fc0e3d04e1778b84f6e06e390410fe3d18026c131d828d949d2f20dde6327d30ecee24dcd3ef919e21c91e010d149f3a28