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.1.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
--- grpc-1.37.0-original/tools/distrib/python/grpcio_tools/protoc_lib_deps.py 2021-04-06 18:48:56.000000000 -0400
+++ grpc-1.37.0/tools/distrib/python/grpcio_tools/protoc_lib_deps.py 2021-04-08 15:30:28.142459012 -0400
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.39.0-original/tools/distrib/python/grpcio_tools/protoc_lib_deps.py 2021-07-20 18:39:39.000000000 -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 @@
# 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'
-PROTO_INCLUDE='third_party/protobuf/src'
-
-PROTOBUF_SUBMODULE_VERSION="d7e943b8d2bc444a8c770644e73d090b486f8b37"
-PROTOBUF_SUBMODULE_VERSION="436bd7880e458532901c58f4d9d1ea23fa7edd52"
+CC_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...
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:
addFilter(r' wrong-file-end-of-line-encoding '
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$')
# There is really no version information available.
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.
%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
# 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
# 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
%bcond_with system_gtest
@ -28,16 +36,16 @@
%bcond_with python_gevent_tests
Name: grpc
Version: 1.37.1
Version: 1.39.0
Release: %autorelease
Summary: RPC library and framework
# CMakeLists.txt: gRPC_CORE_SOVERSION
%global c_so_version 15
%global c_so_version 18
# CMakeLists.txt: gRPC_CPP_SOVERSION
%global cpp_so_version 1.37
%global cpp_so_version 1.39
# 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
# 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:
# 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_health_checking (src/python/grpcio_health_checking/setup.py)
# install_requires:
@ -174,9 +183,16 @@ BuildRequires: python3dist(protobuf) >= 3.6.0
# grpcio_status (src/python/grpcio_status/setup.py) install_requires:
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
# depends on all of the other Python packages—which are satisfied within this
# package.
#
# Similarly, grpcio_admin depends on grpcio_channelz and grpcio_csds.
# grpcio_tests (src/python/grpcio_tests/setup.py) install_requires:
BuildRequires: python3dist(coverage) >= 4.0
@ -213,11 +229,13 @@ BuildRequires: dos2unix
# Apply Fedora system crypto policies. Since this is Fedora-specific, the patch
# is not suitable for upstream.
# 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
# expecting a git submodule. Must also add requisite linker flags using
# 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
# option already provided upstream. See
# 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
# (libgrpc++_test_config.so…)
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.
# See https://github.com/grpc/grpc/issues/26062.
Patch7: %{name}-1.37.0-importlib-abc-python3.10.patch
# Fix confusion about path to python_wrapper.sh in httpcli/httpscli tests. I
# suppose that the unpatched code must be correct for how upstream runs the
# 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}
@ -310,11 +331,15 @@ BuildArch: noarch
Obsoletes: python-grpcio-doc < 1.26.0-13
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-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}
%endif
%description doc
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
Python
grpcio
grpcio_admin
grpcio_csds
grpcio_channelz
grpcio_health_checking
grpcio_reflection
@ -424,12 +451,69 @@ Summary: 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
Summary: Channel Level Live Debug Information Service for gRPC
License: ASL 2.0
BuildArch: noarch
%description -n python3-grpcio-channelz
gRPC Python Channelz package
============================
Channelz is a live debug tool in gRPC Python.
@ -439,6 +523,9 @@ License: ASL 2.0
BuildArch: noarch
%description -n python3-grpcio-health-checking
gRPC Python Health Checking
===========================
Reference package for GRPC Python health checking.
@ -448,6 +535,9 @@ License: ASL 2.0
BuildArch: noarch
%description -n python3-grpcio-reflection
gRPC Python Reflection package
==============================
Reference package for reflection in GRPC Python.
@ -457,6 +547,9 @@ License: ASL 2.0
BuildArch: noarch
%description -n python3-grpcio-status
gRPC Python Status Proto
===========================
Reference package for GRPC Python status proto mapping.
@ -466,12 +559,16 @@ License: ASL 2.0
BuildArch: noarch
%description -n python3-grpcio-testing
gRPC Python Testing Package
===========================
Testing utilities for gRPC Python.
%prep
%autosetup -p1
echo '===== Preparing gtest/gmock =====' 2>&1
%if %{without system_gtest}
# Copy in the needed gtest/gmock implementations.
%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
%endif
echo '===== Removing bundled wyhash =====' 2>&1
# 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
# header-only library.
rm -rvf 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
rm -rvf third_party/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
# https://github.com/grpc/grpc/issues/25945.
echo '===== Fixing permissions =====' 2>&1
# Fix some of the weirdest accidentally-executable files
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
# requirement is needlessly strict. (It is fine for upstreams own purposes, as
# they are happy to build documentation with a pinned old version.)
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
# they are not accidentally used in the build. See the comment above the base
# package License field for more details.
@ -549,6 +651,7 @@ rm -rvf examples/android src/android
# to do that.
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 examples -type f -perm /0111 |
while read -r fn
@ -560,12 +663,14 @@ find examples -type f -perm /0111 |
fi
done
echo '===== Fixing line endings =====' 2>&1
# Fix some CRNL line endings:
dos2unix \
examples/cpp/helloworld/CMakeLists.txt \
examples/cpp/helloworld/cmake_externalproject/CMakeLists.txt
# 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
# the main C++ build, we can use CMAKE_CXX_STANDARD. For extensions, examples,
# 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/distrib/python/grpcio_tools/setup.py
echo '===== Fixing .pc install path =====' 2>&1
# Fix the install path for .pc files
# https://github.com/grpc/grpc/issues/25635
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}
# Confirmed in 1.39.0 2021-07-29
# TODO figure out how to report this upstream in a useful/actionable way
sed -r -i "s/^([[:blank:]]*)(def \
test_immediately_connectable_channel_connectivity)\\b/\
sed -r -i "s/^([[:blank:]]*)(def test_deallocated_server_stops)\\b/\
\\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}
# Confirmed in 1.39.0 2021-07-29
# TODO figure out how to report this upstream in a useful/actionable way
sed -r -i "s/^([[:blank:]]*)(def test_concurrent_stream_stream)\\b/\
\\1@unittest.skip('May hang unexplainedly')\\n\\1\\2/" \
'src/python/grpcio_tests/tests/testing/_client_test.py'
# Confirmed in 1.39.0 2021-07-29
# These tests fail with:
# OverflowError: Python int too large to convert to C ssize_t
# 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'
%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
%build
# ~~~~ 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
# 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
%cmake_build
echo '===== Building C (core) and C++ documentation =====' 2>&1
# Doxygen (reference: C/core, C++, objc)
./tools/doxygen/run_doxygen.sh
# ~~~~ Python ~~~~
echo '===== Building Python grpcio package =====' 2>&1
# 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:
# 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}"
# ~~ grpcio-tools ~~
echo '===== Building Python grpcio_tools package =====' 2>&1
pushd "tools/distrib/python/grpcio_tools/" >/dev/null
# When copying more things in here, make sure the subpackage License field
# 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}"
popd >/dev/null
# ~~ pure-python modules grpcio-* ~~
for suffix in channelz health_checking reflection status testing tests
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
%{__python3} %{py_setup} %{?py_setup_args} preprocess
if [ "${suffix}" != 'testing' ]
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
@ -750,12 +843,12 @@ do
popd >/dev/null
done
# ~~ documentation ~~
# Doxygen (reference: C/core, C++, objc)
./tools/doxygen/run_doxygen.sh
echo '===== Building pure-Python documentation =====' 1>&2
%if %{without bootstrap}
# Sphinx (Python)
%{__python3} %{py_setup} %{?py_setup_args} doc
rm -vrf doc/build/.buildinfo doc/build/.doctrees
%endif
%install
@ -808,7 +901,8 @@ pushd "tools/distrib/python/grpcio_tools/" >/dev/null
popd >/dev/null
# ~~ 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
pushd "src/python/grpcio_${suffix}/" >/dev/null
%py3_install
@ -842,8 +936,10 @@ rm -rvf "%{buildroot}$(dirname '%{sysbundle}')"
install -D -t '%{buildroot}%{_pkgdocdir}' -m 0644 -p AUTHORS *.md
cp -rp doc/ref examples '%{buildroot}%{_pkgdocdir}'
%if %{without bootstrap}
install -d '%{buildroot}%{_pkgdocdir}/python'
cp -rp doc/build '%{buildroot}%{_pkgdocdir}/python/html'
%endif
%check
@ -878,11 +974,24 @@ flaky_network
# Bad assumption about which directory the tests are running in:
#
# E0413 22:43:56.610039235 19861 subprocess_posix.cc:61]
# execv 'x86_64-redhat-linux-gnu/../../test/core/http/python_wrapper.sh'
# E0802 01:16:33.084040928 3911182 subprocess_posix.cc:61]
# execv 'redhat-linux-build/../../test/core/http/python_wrapper.sh'
# 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
# *** 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
httpscli
@ -907,6 +1016,8 @@ httpscli
# This server is not currently running.
#
# To start it, run tools/run_tests/start_port_server.py
#
# CHECKME
admin_services_end2end
alts_concurrent_connectivity
async_end2end
@ -943,6 +1054,8 @@ xds_end2end
# *** SIGSEGV received at time=1618368497 ***
# PC: @ 0x7fc56bfc1d3a (unknown) __strlen_sse2
# @ ... and at least 1 more frames
#
# CHECKME
evaluate_args
# Unexplained:
#
@ -951,6 +1064,8 @@ evaluate_args
# Value of: stack_trace->find("GetCurrentStackTrace") != std::string::npos
# Actual: false
# Expected: true
#
# CHECKME
examine_stack
# Unexplained:
#
@ -960,6 +1075,8 @@ examine_stack
# Actual: false
# Expected: true
# [ FAILED ] StackTracerTest.Basic (3 ms)
#
# CHECKME
stack_tracer
# Unexplained:
#
@ -968,6 +1085,8 @@ stack_tracer
# [{"access_token":"ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_", "expires_in":3599,
# "token_type":"Bearer"}].
# *** SIGSEGV received at time=1618368426 ***
#
# CHECKME
test_core_security_credentials
%ifarch s390x
@ -985,6 +1104,8 @@ test_core_security_credentials
# Which is: "::"
# "::1"
# [ FAILED ] AddressSortingTest.TestSorterKnowsIpv6LoopbackIsAvailable (0 ms)
#
# CHECKME
address_sorting
# Unexplained:
@ -1004,16 +1125,22 @@ address_sorting
# @ 0x2aa3ed8155e (unknown) main
# @ 0x3ff8372bdf4 (unknown) __libc_start_main
# @ 0x2aa3ed82724 (unknown) (unknown)
#
# CHECKME
alts_crypt
# Unexplained:
#
# (aborted without output)
#
# CHECKME
alts_crypter
# Unexplained:
#
# (aborted without output)
#
# CHECKME
alts_frame_protector
# Unexplained:
@ -1035,6 +1162,8 @@ alts_frame_protector
# @ 0x2aa11481b08 (unknown) main
# @ 0x3ff939abdf4 (unknown) __libc_start_main
# @ 0x2aa11481bc4 (unknown) (unknown)
#
# CHECKME
alts_grpc_record_protocol
# Unexplained:
@ -1067,11 +1196,15 @@ alts_grpc_record_protocol
# @ 0x2aa3760281e (unknown) main
# @ 0x3ff98aabdf4 (unknown) __libc_start_main
# @ 0x2aa376028b4 (unknown) (unknown)
#
# CHECKME
alts_handshaker_client
# Unexplained:
#
# (aborted without output)
#
# CHECKME
alts_iovec_record_protocol
# Unexplained:
@ -1105,6 +1238,8 @@ alts_iovec_record_protocol
# fails to parse ALTS context.
# E0506 13:27:12.407261763 2895549 alts_util.cc:43]
# contains zero or more than one ALTS context.
#
# CHECKME
alts_util
# Unexplained:
@ -1128,6 +1263,8 @@ alts_util
# @ 0x2aa112019d6 (unknown) main
# @ 0x3ffae52bdf4 (unknown) __libc_start_main
# @ 0x2aa11201a84 (unknown) (unknown)
#
# CHECKME
alts_zero_copy_grpc_protector
# Unexplained:
@ -1148,6 +1285,8 @@ alts_zero_copy_grpc_protector
# @ 0x2aa1e9833ce (unknown) main
# @ 0x3ffa05abdf4 (unknown) __libc_start_main
# @ 0x2aa1e983ac4 (unknown) (unknown)
#
# CHECKME
goaway_server
# Unexplained:
@ -1163,6 +1302,8 @@ goaway_server
# @ 0x2aa27600a24 (unknown) main
# @ 0x3ffa332bdf4 (unknown) __libc_start_main
# @ 0x2aa27600aa4 (unknown) (unknown)
#
# CHECKME
murmur_hash
# Unexplained:
@ -1186,9 +1327,38 @@ murmur_hash
# @ 0x40000028c8 (unknown) main
# @ 0x4001f3edf4 (unknown) __libc_start_main
# @ 0x40000029f4 (unknown) (unknown)
#
# CHECKME
tcp_posix
%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}
# Unexplained:
#
@ -1200,6 +1370,8 @@ tcp_posix
# expected
# Which is: 4
# [ FAILED ] ChannelTracerTest.TestMultipleEviction (2 ms)
#
# CHECKME
channel_trace
%endif
@ -1211,6 +1383,8 @@ channel_trace
# *** SIGABRT received at time=1619103150 ***
# PC: @ 0xf7fa3559 (unknown) __kernel_vsyscall
# @ ... and at least 1 more frames
#
# CHECKME
certificate_provider_store
# Unexplained:
@ -1222,6 +1396,8 @@ certificate_provider_store
# @ 0xb67e817c (unknown) (unknown)
# @ 0xb682d6b0 (unknown) (unknown)
# @ 0xb682c114 (unknown) raise
#
# CHECKME
grpc_tls_certificate_distributor
# Unexplained:
@ -1231,6 +1407,8 @@ grpc_tls_certificate_distributor
# Expected: (busy) <= (total), actual: 9025859384538762329 vs
# 3751280126112716351
# [ FAILED ] GetCpuStatsTest.BusyNoLargerThanTotal (0 ms)
#
# CHECKME
lb_get_cpu_stats
%endif
@ -1259,13 +1437,16 @@ for suite in \
%{?with_python_gevent_tests:test_gevent} \
test_py3_only
do
echo "==== $(date -u --iso-8601=ns): Python ${suite} ===="
# 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}}" \
LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}" \
PATH="%{buildroot}%{_bindir}:$PATH" \
PYTHONPATH="${PYTHONPATH:-%{buildroot}%{python3_sitearch}:%{buildroot}%{python3_sitelib}}" \
PYTHONDONTWRITEBYTECODE=1 \
timeout -k 31m -v 30m \
%{__python3} %{py_setup} %{?py_setup_args} "${suite}"
done
popd
@ -1368,11 +1549,25 @@ fi
%{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
%{python3_sitelib}/grpc_channelz
%{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
%{python3_sitelib}/grpc_health
%{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