aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--BUILD4
-rw-r--r--CMakeLists.txt2
-rw-r--r--Makefile4
-rw-r--r--build.yaml4
-rw-r--r--doc/g_stands_for.md1
-rw-r--r--gRPC-C++.podspec4
-rw-r--r--gRPC-Core.podspec2
-rw-r--r--gRPC-ProtoRPC.podspec2
-rw-r--r--gRPC-RxLibrary.podspec2
-rw-r--r--gRPC.podspec2
-rw-r--r--package.xml4
-rw-r--r--src/compiler/objective_c_generator.cc2
-rw-r--r--src/compiler/objective_c_plugin.cc10
-rw-r--r--src/core/lib/iomgr/socket_utils_uv.cc4
-rw-r--r--src/core/lib/iomgr/tcp_uv.cc12
-rw-r--r--src/core/lib/surface/version.cc2
-rw-r--r--src/cpp/common/version_cc.cc2
-rwxr-xr-xsrc/csharp/Grpc.Core/Version.csproj.include2
-rw-r--r--src/csharp/Grpc.Core/VersionInfo.cs4
-rwxr-xr-xsrc/csharp/build_packages_dotnetcli.bat2
-rwxr-xr-xsrc/csharp/build_packages_dotnetcli.sh4
-rw-r--r--src/objective-c/!ProtoCompiler-gRPCPlugin.podspec2
-rw-r--r--src/objective-c/GRPCClient/private/version.h2
-rw-r--r--src/objective-c/tests/version.h2
-rw-r--r--src/php/composer.json2
-rw-r--r--src/php/ext/grpc/version.h2
-rw-r--r--src/python/grpcio/grpc/_grpcio_metadata.py2
-rw-r--r--src/python/grpcio/grpc_version.py2
-rw-r--r--src/python/grpcio_health_checking/grpc_version.py2
-rw-r--r--src/python/grpcio_reflection/grpc_version.py2
-rw-r--r--src/python/grpcio_testing/grpc_version.py2
-rw-r--r--src/python/grpcio_tests/grpc_version.py2
-rw-r--r--src/ruby/lib/grpc/generic/bidi_call.rb25
-rw-r--r--src/ruby/lib/grpc/version.rb2
-rw-r--r--src/ruby/spec/generic/client_stub_spec.rb133
-rw-r--r--src/ruby/tools/version.rb2
-rw-r--r--tools/distrib/python/grpcio_tools/grpc_version.py2
-rw-r--r--tools/doxygen/Doxyfile.c++2
-rw-r--r--tools/doxygen/Doxyfile.c++.internal2
-rw-r--r--tools/internal_ci/linux/pull_request/grpc_interop_alts.cfg30
40 files changed, 233 insertions, 62 deletions
diff --git a/BUILD b/BUILD
index f6ec92179b..ece6cd182d 100644
--- a/BUILD
+++ b/BUILD
@@ -64,11 +64,11 @@ config_setting(
)
# This should be updated along with build.yaml
-g_stands_for = "gorgeous"
+g_stands_for = "glorious"
core_version = "6.0.0-dev"
-version = "1.11.0-dev"
+version = "1.12.0-dev"
GPR_PUBLIC_HDRS = [
"include/grpc/support/alloc.h",
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4fd9826e99..d94422f741 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -24,7 +24,7 @@
cmake_minimum_required(VERSION 2.8)
set(PACKAGE_NAME "grpc")
-set(PACKAGE_VERSION "1.11.0-dev")
+set(PACKAGE_VERSION "1.12.0-dev")
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
set(PACKAGE_TARNAME "${PACKAGE_NAME}-${PACKAGE_VERSION}")
set(PACKAGE_BUGREPORT "https://github.com/grpc/grpc/issues/")
diff --git a/Makefile b/Makefile
index 64195ee6ff..77ef1b3cbc 100644
--- a/Makefile
+++ b/Makefile
@@ -421,8 +421,8 @@ Q = @
endif
CORE_VERSION = 6.0.0-dev
-CPP_VERSION = 1.11.0-dev
-CSHARP_VERSION = 1.11.0-dev
+CPP_VERSION = 1.12.0-dev
+CSHARP_VERSION = 1.12.0-dev
CPPFLAGS_NO_ARCH += $(addprefix -I, $(INCLUDES)) $(addprefix -D, $(DEFINES))
CPPFLAGS += $(CPPFLAGS_NO_ARCH) $(ARCH_FLAGS)
diff --git a/build.yaml b/build.yaml
index 6a6f234fae..aa5a40d849 100644
--- a/build.yaml
+++ b/build.yaml
@@ -13,8 +13,8 @@ settings:
'#09': Per-language overrides are possible with (eg) ruby_version tag here
'#10': See the expand_version.py for all the quirks here
core_version: 6.0.0-dev
- g_stands_for: gorgeous
- version: 1.11.0-dev
+ g_stands_for: glorious
+ version: 1.12.0-dev
filegroups:
- name: alts_proto
headers:
diff --git a/doc/g_stands_for.md b/doc/g_stands_for.md
index 47ae7c5462..ee8a827644 100644
--- a/doc/g_stands_for.md
+++ b/doc/g_stands_for.md
@@ -15,3 +15,4 @@ future), and the corresponding version numbers that used them:
- 1.9 'g' stands for 'glossy'
- 1.10 'g' stands for 'glamorous'
- 1.11 'g' stands for 'gorgeous'
+- 1.12 'g' stands for 'glorious'
diff --git a/gRPC-C++.podspec b/gRPC-C++.podspec
index 9d4d15a9a1..c5a4e50cd3 100644
--- a/gRPC-C++.podspec
+++ b/gRPC-C++.podspec
@@ -23,7 +23,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC-C++'
# TODO (mxyan): use version that match gRPC version when pod is stabilized
- # version = '1.11.0-dev'
+ # version = '1.12.0-dev'
version = '0.0.2'
s.version = version
s.summary = 'gRPC C++ library'
@@ -31,7 +31,7 @@ Pod::Spec.new do |s|
s.license = 'Apache License, Version 2.0'
s.authors = { 'The gRPC contributors' => 'grpc-packages@google.com' }
- grpc_version = '1.11.0-dev'
+ grpc_version = '1.12.0-dev'
s.source = {
:git => 'https://github.com/grpc/grpc.git',
diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec
index 0eadbb5147..bd192b43ca 100644
--- a/gRPC-Core.podspec
+++ b/gRPC-Core.podspec
@@ -22,7 +22,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC-Core'
- version = '1.11.0-dev'
+ version = '1.12.0-dev'
s.version = version
s.summary = 'Core cross-platform gRPC library, written in C'
s.homepage = 'https://grpc.io'
diff --git a/gRPC-ProtoRPC.podspec b/gRPC-ProtoRPC.podspec
index 149687e5b4..e98dee4a3c 100644
--- a/gRPC-ProtoRPC.podspec
+++ b/gRPC-ProtoRPC.podspec
@@ -21,7 +21,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC-ProtoRPC'
- version = '1.11.0-dev'
+ version = '1.12.0-dev'
s.version = version
s.summary = 'RPC library for Protocol Buffers, based on gRPC'
s.homepage = 'https://grpc.io'
diff --git a/gRPC-RxLibrary.podspec b/gRPC-RxLibrary.podspec
index 2497174417..3bba14b695 100644
--- a/gRPC-RxLibrary.podspec
+++ b/gRPC-RxLibrary.podspec
@@ -21,7 +21,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC-RxLibrary'
- version = '1.11.0-dev'
+ version = '1.12.0-dev'
s.version = version
s.summary = 'Reactive Extensions library for iOS/OSX.'
s.homepage = 'https://grpc.io'
diff --git a/gRPC.podspec b/gRPC.podspec
index 68e06b5536..bf73ffd22e 100644
--- a/gRPC.podspec
+++ b/gRPC.podspec
@@ -20,7 +20,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC'
- version = '1.11.0-dev'
+ version = '1.12.0-dev'
s.version = version
s.summary = 'gRPC client library for iOS/OSX'
s.homepage = 'https://grpc.io'
diff --git a/package.xml b/package.xml
index fd43006836..0777ee0050 100644
--- a/package.xml
+++ b/package.xml
@@ -13,8 +13,8 @@
<date>2018-01-19</date>
<time>16:06:07</time>
<version>
- <release>1.11.0dev</release>
- <api>1.11.0dev</api>
+ <release>1.12.0dev</release>
+ <api>1.12.0dev</api>
</version>
<stability>
<release>beta</release>
diff --git a/src/compiler/objective_c_generator.cc b/src/compiler/objective_c_generator.cc
index ffdeb8f6b0..39f68cb956 100644
--- a/src/compiler/objective_c_generator.cc
+++ b/src/compiler/objective_c_generator.cc
@@ -206,7 +206,7 @@ void PrintMethodImplementations(Printer* printer,
}
}
for (auto one_class : classes) {
- output += " @class " + one_class + ";\n";
+ output += "@class " + one_class + ";\n";
}
return output;
diff --git a/src/compiler/objective_c_plugin.cc b/src/compiler/objective_c_plugin.cc
index 76703d79cd..f0fe3688cc 100644
--- a/src/compiler/objective_c_plugin.cc
+++ b/src/compiler/objective_c_plugin.cc
@@ -118,11 +118,11 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
Write(context, file_name + ".pbrpc.h",
PreprocIfNot(kForwardDeclare, imports) + "\n" +
PreprocIfNot(kProtocolOnly, system_imports) + "\n" +
- PreprocIfElse(kForwardDeclare, class_declarations,
- class_imports) +
- "\n" + forward_declarations + "\n" + kNonNullBegin + "\n" +
- protocols + "\n" + PreprocIfNot(kProtocolOnly, interfaces) +
- "\n" + kNonNullEnd + "\n");
+ class_declarations + "\n" +
+ PreprocIfNot(kForwardDeclare, class_imports) + "\n" +
+ forward_declarations + "\n" + kNonNullBegin + "\n" + protocols +
+ "\n" + PreprocIfNot(kProtocolOnly, interfaces) + "\n" +
+ kNonNullEnd + "\n");
}
{
diff --git a/src/core/lib/iomgr/socket_utils_uv.cc b/src/core/lib/iomgr/socket_utils_uv.cc
index 8538abc7e4..7eba40c46b 100644
--- a/src/core/lib/iomgr/socket_utils_uv.cc
+++ b/src/core/lib/iomgr/socket_utils_uv.cc
@@ -38,8 +38,8 @@ int grpc_inet_pton(int af, const char* src, void* dst) {
}
const char* grpc_inet_ntop(int af, const void* src, char* dst, size_t size) {
- /* Windows InetNtopA wants a mutable ip pointer */
- return inet_ntop(af, src, dst, (socklen_t)size);
+ uv_inet_ntop(af, src, dst, size);
+ return dst;
}
#endif /* GRPC_UV */
diff --git a/src/core/lib/iomgr/tcp_uv.cc b/src/core/lib/iomgr/tcp_uv.cc
index a06b8cb51c..f20f8dcb74 100644
--- a/src/core/lib/iomgr/tcp_uv.cc
+++ b/src/core/lib/iomgr/tcp_uv.cc
@@ -338,7 +338,6 @@ static void uv_socket_connect(grpc_custom_socket* socket,
static grpc_resolved_addresses* handle_addrinfo_result(
struct addrinfo* result) {
struct addrinfo* resp;
- struct addrinfo* prev;
size_t i;
grpc_resolved_addresses* addresses =
(grpc_resolved_addresses*)gpr_malloc(sizeof(grpc_resolved_addresses));
@@ -348,16 +347,13 @@ static grpc_resolved_addresses* handle_addrinfo_result(
}
addresses->addrs = (grpc_resolved_address*)gpr_malloc(
sizeof(grpc_resolved_address) * addresses->naddrs);
- i = 0;
- resp = result;
- while (resp != nullptr) {
+ for (resp = result, i = 0; resp != nullptr; resp = resp->ai_next, i++) {
memcpy(&addresses->addrs[i].addr, resp->ai_addr, resp->ai_addrlen);
addresses->addrs[i].len = resp->ai_addrlen;
- i++;
- prev = resp;
- resp = resp->ai_next;
- gpr_free(prev);
}
+ // addrinfo objects are allocated by libuv (e.g. in uv_getaddrinfo)
+ // and not by gpr_malloc
+ uv_freeaddrinfo(result);
return addresses;
}
diff --git a/src/core/lib/surface/version.cc b/src/core/lib/surface/version.cc
index be196a78bc..a712e10037 100644
--- a/src/core/lib/surface/version.cc
+++ b/src/core/lib/surface/version.cc
@@ -25,4 +25,4 @@
const char* grpc_version_string(void) { return "6.0.0-dev"; }
-const char* grpc_g_stands_for(void) { return "gorgeous"; }
+const char* grpc_g_stands_for(void) { return "glorious"; }
diff --git a/src/cpp/common/version_cc.cc b/src/cpp/common/version_cc.cc
index fb1723c816..d669ea21a9 100644
--- a/src/cpp/common/version_cc.cc
+++ b/src/cpp/common/version_cc.cc
@@ -22,5 +22,5 @@
#include <grpcpp/grpcpp.h>
namespace grpc {
-grpc::string Version() { return "1.11.0-dev"; }
+grpc::string Version() { return "1.12.0-dev"; }
} // namespace grpc
diff --git a/src/csharp/Grpc.Core/Version.csproj.include b/src/csharp/Grpc.Core/Version.csproj.include
index 9b55f2469a..f7a7a5cbe9 100755
--- a/src/csharp/Grpc.Core/Version.csproj.include
+++ b/src/csharp/Grpc.Core/Version.csproj.include
@@ -1,7 +1,7 @@
<!-- This file is generated -->
<Project>
<PropertyGroup>
- <GrpcCsharpVersion>1.11.0-dev</GrpcCsharpVersion>
+ <GrpcCsharpVersion>1.12.0-dev</GrpcCsharpVersion>
<GoogleProtobufVersion>3.3.0</GoogleProtobufVersion>
</PropertyGroup>
</Project>
diff --git a/src/csharp/Grpc.Core/VersionInfo.cs b/src/csharp/Grpc.Core/VersionInfo.cs
index 2902aee8d9..06a0396c34 100644
--- a/src/csharp/Grpc.Core/VersionInfo.cs
+++ b/src/csharp/Grpc.Core/VersionInfo.cs
@@ -33,11 +33,11 @@ namespace Grpc.Core
/// <summary>
/// Current <c>AssemblyFileVersion</c> of gRPC C# assemblies
/// </summary>
- public const string CurrentAssemblyFileVersion = "1.11.0.0";
+ public const string CurrentAssemblyFileVersion = "1.12.0.0";
/// <summary>
/// Current version of gRPC C#
/// </summary>
- public const string CurrentVersion = "1.11.0-dev";
+ public const string CurrentVersion = "1.12.0-dev";
}
}
diff --git a/src/csharp/build_packages_dotnetcli.bat b/src/csharp/build_packages_dotnetcli.bat
index 76391738ff..0d65748697 100755
--- a/src/csharp/build_packages_dotnetcli.bat
+++ b/src/csharp/build_packages_dotnetcli.bat
@@ -13,7 +13,7 @@
@rem limitations under the License.
@rem Current package versions
-set VERSION=1.11.0-dev
+set VERSION=1.12.0-dev
@rem Adjust the location of nuget.exe
set NUGET=C:\nuget\nuget.exe
diff --git a/src/csharp/build_packages_dotnetcli.sh b/src/csharp/build_packages_dotnetcli.sh
index 1b73614b91..66aba36089 100755
--- a/src/csharp/build_packages_dotnetcli.sh
+++ b/src/csharp/build_packages_dotnetcli.sh
@@ -45,7 +45,7 @@ dotnet pack --configuration Release Grpc.Auth --output ../../../artifacts
dotnet pack --configuration Release Grpc.HealthCheck --output ../../../artifacts
dotnet pack --configuration Release Grpc.Reflection --output ../../../artifacts
-nuget pack Grpc.nuspec -Version "1.11.0-dev" -OutputDirectory ../../artifacts
-nuget pack Grpc.Tools.nuspec -Version "1.11.0-dev" -OutputDirectory ../../artifacts
+nuget pack Grpc.nuspec -Version "1.12.0-dev" -OutputDirectory ../../artifacts
+nuget pack Grpc.Tools.nuspec -Version "1.12.0-dev" -OutputDirectory ../../artifacts
(cd ../../artifacts && zip csharp_nugets_dotnetcli.zip *.nupkg)
diff --git a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
index 954beed8e1..f06312bea9 100644
--- a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
+++ b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
@@ -42,7 +42,7 @@ Pod::Spec.new do |s|
# exclamation mark ensures that other "regular" pods will be able to find it as it'll be installed
# before them.
s.name = '!ProtoCompiler-gRPCPlugin'
- v = '1.11.0-dev'
+ v = '1.12.0-dev'
s.version = v
s.summary = 'The gRPC ProtoC plugin generates Objective-C files from .proto services.'
s.description = <<-DESC
diff --git a/src/objective-c/GRPCClient/private/version.h b/src/objective-c/GRPCClient/private/version.h
index 405c2fff9f..a99eb289c3 100644
--- a/src/objective-c/GRPCClient/private/version.h
+++ b/src/objective-c/GRPCClient/private/version.h
@@ -23,4 +23,4 @@
// `tools/buildgen/generate_projects.sh`.
-#define GRPC_OBJC_VERSION_STRING @"1.11.0-dev"
+#define GRPC_OBJC_VERSION_STRING @"1.12.0-dev"
diff --git a/src/objective-c/tests/version.h b/src/objective-c/tests/version.h
index 6f6cd25007..15fe1a59f3 100644
--- a/src/objective-c/tests/version.h
+++ b/src/objective-c/tests/version.h
@@ -23,5 +23,5 @@
// `tools/buildgen/generate_projects.sh`.
-#define GRPC_OBJC_VERSION_STRING @"1.11.0-dev"
+#define GRPC_OBJC_VERSION_STRING @"1.12.0-dev"
#define GRPC_C_VERSION_STRING @"6.0.0-dev"
diff --git a/src/php/composer.json b/src/php/composer.json
index dbf0cc35fd..57d911db79 100644
--- a/src/php/composer.json
+++ b/src/php/composer.json
@@ -2,7 +2,7 @@
"name": "grpc/grpc-dev",
"description": "gRPC library for PHP - for Developement use only",
"license": "Apache-2.0",
- "version": "1.11.0",
+ "version": "1.12.0",
"require": {
"php": ">=5.5.0",
"google/protobuf": "^v3.3.0"
diff --git a/src/php/ext/grpc/version.h b/src/php/ext/grpc/version.h
index dd2a701ada..37df2768bf 100644
--- a/src/php/ext/grpc/version.h
+++ b/src/php/ext/grpc/version.h
@@ -20,6 +20,6 @@
#ifndef VERSION_H
#define VERSION_H
-#define PHP_GRPC_VERSION "1.11.0dev"
+#define PHP_GRPC_VERSION "1.12.0dev"
#endif /* VERSION_H */
diff --git a/src/python/grpcio/grpc/_grpcio_metadata.py b/src/python/grpcio/grpc/_grpcio_metadata.py
index 4a69d859fc..cb5da72f1f 100644
--- a/src/python/grpcio/grpc/_grpcio_metadata.py
+++ b/src/python/grpcio/grpc/_grpcio_metadata.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc/_grpcio_metadata.py.template`!!!
-__version__ = """1.11.0.dev0"""
+__version__ = """1.12.0.dev0"""
diff --git a/src/python/grpcio/grpc_version.py b/src/python/grpcio/grpc_version.py
index 32e82493f3..de5a780abd 100644
--- a/src/python/grpcio/grpc_version.py
+++ b/src/python/grpcio/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc_version.py.template`!!!
-VERSION = '1.11.0.dev0'
+VERSION = '1.12.0.dev0'
diff --git a/src/python/grpcio_health_checking/grpc_version.py b/src/python/grpcio_health_checking/grpc_version.py
index ad4c85cc12..afcd316e5c 100644
--- a/src/python/grpcio_health_checking/grpc_version.py
+++ b/src/python/grpcio_health_checking/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_health_checking/grpc_version.py.template`!!!
-VERSION = '1.11.0.dev0'
+VERSION = '1.12.0.dev0'
diff --git a/src/python/grpcio_reflection/grpc_version.py b/src/python/grpcio_reflection/grpc_version.py
index 6322d847b1..824b73201d 100644
--- a/src/python/grpcio_reflection/grpc_version.py
+++ b/src/python/grpcio_reflection/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_reflection/grpc_version.py.template`!!!
-VERSION = '1.11.0.dev0'
+VERSION = '1.12.0.dev0'
diff --git a/src/python/grpcio_testing/grpc_version.py b/src/python/grpcio_testing/grpc_version.py
index 1e75fea12e..5b1f4c4cc0 100644
--- a/src/python/grpcio_testing/grpc_version.py
+++ b/src/python/grpcio_testing/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_testing/grpc_version.py.template`!!!
-VERSION = '1.11.0.dev0'
+VERSION = '1.12.0.dev0'
diff --git a/src/python/grpcio_tests/grpc_version.py b/src/python/grpcio_tests/grpc_version.py
index 0cd7bd257f..382f95018e 100644
--- a/src/python/grpcio_tests/grpc_version.py
+++ b/src/python/grpcio_tests/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_tests/grpc_version.py.template`!!!
-VERSION = '1.11.0.dev0'
+VERSION = '1.12.0.dev0'
diff --git a/src/ruby/lib/grpc/generic/bidi_call.rb b/src/ruby/lib/grpc/generic/bidi_call.rb
index 086455db0b..ffb232b827 100644
--- a/src/ruby/lib/grpc/generic/bidi_call.rb
+++ b/src/ruby/lib/grpc/generic/bidi_call.rb
@@ -124,12 +124,18 @@ module GRPC
def read_using_run_batch
ops = { RECV_MESSAGE => nil }
ops[RECV_INITIAL_METADATA] = nil unless @metadata_received
- batch_result = @call.run_batch(ops)
- unless @metadata_received
- @call.metadata = batch_result.metadata
- @metadata_received = true
+ begin
+ batch_result = @call.run_batch(ops)
+ unless @metadata_received
+ @call.metadata = batch_result.metadata
+ @metadata_received = true
+ end
+ batch_result
+ rescue GRPC::Core::CallError => e
+ GRPC.logger.warn('bidi call: read_using_run_batch failed')
+ GRPC.logger.warn(e)
+ nil
end
- batch_result
end
# set_output_stream_done is relevant on client-side
@@ -155,7 +161,12 @@ module GRPC
GRPC.logger.debug("bidi-write-loop: #{count} writes done")
if is_client
GRPC.logger.debug("bidi-write-loop: client sent #{count}, waiting")
- @call.run_batch(SEND_CLOSE_FROM_CLIENT => nil)
+ begin
+ @call.run_batch(SEND_CLOSE_FROM_CLIENT => nil)
+ rescue GRPC::Core::CallError => e
+ GRPC.logger.warn('bidi-write-loop: send close failed')
+ GRPC.logger.warn(e)
+ end
GRPC.logger.debug('bidi-write-loop: done')
end
GRPC.logger.debug('bidi-write-loop: finished')
@@ -187,7 +198,7 @@ module GRPC
batch_result = read_using_run_batch
# handle the next message
- if batch_result.message.nil?
+ if batch_result.nil? || batch_result.message.nil?
GRPC.logger.debug("bidi-read-loop: null batch #{batch_result}")
if is_client
diff --git a/src/ruby/lib/grpc/version.rb b/src/ruby/lib/grpc/version.rb
index 256a543a9f..2cb7c4be53 100644
--- a/src/ruby/lib/grpc/version.rb
+++ b/src/ruby/lib/grpc/version.rb
@@ -14,5 +14,5 @@
# GRPC contains the General RPC module.
module GRPC
- VERSION = '1.11.0.dev'
+ VERSION = '1.12.0.dev'
end
diff --git a/src/ruby/spec/generic/client_stub_spec.rb b/src/ruby/spec/generic/client_stub_spec.rb
index d858c4e3fe..da50f8d0c9 100644
--- a/src/ruby/spec/generic/client_stub_spec.rb
+++ b/src/ruby/spec/generic/client_stub_spec.rb
@@ -750,6 +750,90 @@ describe 'ClientStub' do # rubocop:disable Metrics/BlockLength
expected_error_message)
end
end
+
+ # Prompted by grpc/github #14853
+ describe 'client-side error handling on bidi streams' do
+ class EnumeratorQueue
+ def initialize(queue)
+ @queue = queue
+ end
+
+ def each
+ loop do
+ msg = @queue.pop
+ break if msg.nil?
+ yield msg
+ end
+ end
+ end
+
+ def run_server_bidi_shutdown_after_one_read
+ @server.start
+ recvd_rpc = @server.request_call
+ recvd_call = recvd_rpc.call
+ server_call = GRPC::ActiveCall.new(
+ recvd_call, noop, noop, INFINITE_FUTURE,
+ metadata_received: true, started: false)
+ expect(server_call.remote_read).to eq('first message')
+ @server.shutdown_and_notify(from_relative_time(0))
+ @server.close
+ end
+
+ it 'receives a grpc status code when writes to a bidi stream fail' do
+ # This test tries to trigger the case when a 'SEND_MESSAGE' op
+ # and subseqeunt 'SEND_CLOSE_FROM_CLIENT' op of a bidi stream fails.
+ # In this case, iteration through the response stream should result
+ # in a grpc status code, and the writer thread should not raise an
+ # exception.
+ server_thread = Thread.new do
+ run_server_bidi_shutdown_after_one_read
+ end
+ stub = GRPC::ClientStub.new(@host, :this_channel_is_insecure)
+ request_queue = Queue.new
+ @sent_msgs = EnumeratorQueue.new(request_queue)
+ responses = get_responses(stub)
+ request_queue.push('first message')
+ # Now wait for the server to shut down.
+ server_thread.join
+ # Sanity check. This test is not interesting if
+ # Thread.abort_on_exception is not set.
+ expect(Thread.abort_on_exception).to be(true)
+ # An attempt to send a second message should fail now that the
+ # server is down.
+ request_queue.push('second message')
+ request_queue.push(nil)
+ expect { responses.next }.to raise_error(GRPC::BadStatus)
+ end
+
+ def run_server_bidi_shutdown_after_one_write
+ @server.start
+ recvd_rpc = @server.request_call
+ recvd_call = recvd_rpc.call
+ server_call = GRPC::ActiveCall.new(
+ recvd_call, noop, noop, INFINITE_FUTURE,
+ metadata_received: true, started: false)
+ server_call.send_initial_metadata
+ server_call.remote_send('message')
+ @server.shutdown_and_notify(from_relative_time(0))
+ @server.close
+ end
+
+ it 'receives a grpc status code when reading from a failed bidi call' do
+ server_thread = Thread.new do
+ run_server_bidi_shutdown_after_one_write
+ end
+ stub = GRPC::ClientStub.new(@host, :this_channel_is_insecure)
+ request_queue = Queue.new
+ @sent_msgs = EnumeratorQueue.new(request_queue)
+ responses = get_responses(stub)
+ expect(responses.next).to eq('message')
+ # Wait for the server to shut down
+ server_thread.join
+ expect { responses.next }.to raise_error(GRPC::BadStatus)
+ # Push a sentinel to allow the writer thread to finish
+ request_queue.push(nil)
+ end
+ end
end
describe 'without a call operation' do
@@ -810,6 +894,55 @@ describe 'ClientStub' do # rubocop:disable Metrics/BlockLength
responses.each { |r| p r }
end
end
+
+ def run_server_bidi_expect_client_to_cancel(wait_for_shutdown_ok_callback)
+ @server.start
+ recvd_rpc = @server.request_call
+ recvd_call = recvd_rpc.call
+ server_call = GRPC::ActiveCall.new(
+ recvd_call, noop, noop, INFINITE_FUTURE,
+ metadata_received: true, started: false)
+ server_call.send_initial_metadata
+ server_call.remote_send('server call received')
+ wait_for_shutdown_ok_callback.call
+ # since the client is cancelling the call,
+ # we should be able to shut down cleanly
+ @server.shutdown_and_notify(nil)
+ @server.close
+ end
+
+ it 'receives a grpc status code when reading from a cancelled bidi call' do
+ # This test tries to trigger a 'RECV_INITIAL_METADATA' and/or
+ # 'RECV_MESSAGE' op failure.
+ # An attempt to read a message might fail; in that case, iteration
+ # through the response stream should still result in a grpc status.
+ server_can_shutdown = false
+ server_can_shutdown_mu = Mutex.new
+ server_can_shutdown_cv = ConditionVariable.new
+ wait_for_shutdown_ok_callback = proc do
+ server_can_shutdown_mu.synchronize do
+ server_can_shutdown_cv.wait(server_can_shutdown_mu) until server_can_shutdown
+ end
+ end
+ server_thread = Thread.new do
+ run_server_bidi_expect_client_to_cancel(wait_for_shutdown_ok_callback)
+ end
+ stub = GRPC::ClientStub.new(@host, :this_channel_is_insecure)
+ request_queue = Queue.new
+ @sent_msgs = EnumeratorQueue.new(request_queue)
+ responses = get_responses(stub)
+ expect(responses.next).to eq('server call received')
+ @op.cancel
+ expect { responses.next }.to raise_error(GRPC::Cancelled)
+ # Now let the server proceed to shut down.
+ server_can_shutdown_mu.synchronize do
+ server_can_shutdown = true
+ server_can_shutdown_cv.broadcast
+ end
+ server_thread.join
+ # Push a sentinel to allow the writer thread to finish
+ request_queue.push(nil)
+ end
end
end
diff --git a/src/ruby/tools/version.rb b/src/ruby/tools/version.rb
index 8dc1623d6f..822f70eb0a 100644
--- a/src/ruby/tools/version.rb
+++ b/src/ruby/tools/version.rb
@@ -14,6 +14,6 @@
module GRPC
module Tools
- VERSION = '1.11.0.dev'
+ VERSION = '1.12.0.dev'
end
end
diff --git a/tools/distrib/python/grpcio_tools/grpc_version.py b/tools/distrib/python/grpcio_tools/grpc_version.py
index e8ca6851eb..e71f836f6d 100644
--- a/tools/distrib/python/grpcio_tools/grpc_version.py
+++ b/tools/distrib/python/grpcio_tools/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!!
-VERSION = '1.11.0.dev0'
+VERSION = '1.12.0.dev0'
diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++
index eb6700d529..047b27ea57 100644
--- a/tools/doxygen/Doxyfile.c++
+++ b/tools/doxygen/Doxyfile.c++
@@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC C++"
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 1.11.0-dev
+PROJECT_NUMBER = 1.12.0-dev
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal
index 52a16d6e98..3e2c192864 100644
--- a/tools/doxygen/Doxyfile.c++.internal
+++ b/tools/doxygen/Doxyfile.c++.internal
@@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC C++"
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 1.11.0-dev
+PROJECT_NUMBER = 1.12.0-dev
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
diff --git a/tools/internal_ci/linux/pull_request/grpc_interop_alts.cfg b/tools/internal_ci/linux/pull_request/grpc_interop_alts.cfg
new file mode 100644
index 0000000000..c1253b30f7
--- /dev/null
+++ b/tools/internal_ci/linux/pull_request/grpc_interop_alts.cfg
@@ -0,0 +1,30 @@
+# Copyright 2018 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Config file for the internal CI (in protobuf text format)
+
+# Location of the continuous shell script in repository.
+build_file: "grpc/tools/internal_ci/linux/grpc_run_interop_tests.sh"
+timeout_mins: 60
+action {
+ define_artifacts {
+ regex: "**/sponge_log.xml"
+ regex: "github/grpc/reports/**"
+ }
+}
+
+env_vars {
+ key: "RUN_TESTS_FLAGS"
+ value: "-l all -s all --use_docker --transport_security alts --internal_ci -t -j 12"
+}