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:
parent
603761ed3f
commit
2933935dc1
1
.gitignore
vendored
1
.gitignore
vendored
@ -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
|
||||||
|
@ -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
|
|
||||||
|
|
@ -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'
|
69
grpc-1.39.0-python2-test-scripts.patch
Normal file
69
grpc-1.39.0-python2-test-scripts.patch
Normal 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)
|
||||||
|
|
30
grpc-1.39.0-python_wrapper-path.patch
Normal file
30
grpc-1.39.0-python_wrapper-path.patch
Normal 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(".");
|
||||||
|
}
|
40
grpc-1.39.0-system-crypto-policies.patch
Normal file
40
grpc-1.39.0-system-crypto-policies.patch
Normal 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.");
|
@ -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
299
grpc.spec
@ -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 upstream’s own purposes, as
|
# requirement is needlessly strict. (It is fine for upstream’s 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
|
||||||
|
2
sources
2
sources
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user