Merge remote-tracking branch 'upstream/master' into avoid_executor

pull/18501/head
Guantao Liu 6 years ago
commit b3c8d918d1
  1. 1
      BUILD
  2. 3
      CMakeLists.txt
  3. 4
      Makefile
  4. 4
      bazel/grpc_deps.bzl
  5. 1
      build.yaml
  6. 5
      doc/environment_variables.md
  7. 1
      gRPC-C++.podspec
  8. 1
      gRPC-Core.podspec
  9. 2
      grpc.gemspec
  10. 7
      include/grpcpp/impl/codegen/completion_queue.h
  11. 2
      include/grpcpp/impl/codegen/rpc_service_method.h
  12. 7
      include/grpcpp/impl/server_builder_plugin.h
  13. 2
      include/grpcpp/server.h
  14. 315
      include/grpcpp/server_builder.h
  15. 346
      include/grpcpp/server_builder_impl.h
  16. 2
      src/c-ares/gen_build_yaml.py
  17. 2
      src/core/README.md
  18. 3
      src/core/lib/security/credentials/jwt/jwt_verifier.cc
  19. 7
      src/core/lib/transport/transport.h
  20. 47
      src/cpp/server/server_builder.cc
  21. 7
      src/csharp/Grpc.Core/Version.csproj.include
  22. 10
      src/csharp/Grpc.Tools.Tests/ProtoCompileBasicTest.cs
  23. 81
      src/csharp/Grpc.Tools.Tests/ProtoCompileCommandLineGeneratorTest.cs
  24. 129
      src/csharp/Grpc.Tools/ProtoCompile.cs
  25. 1
      src/csharp/Grpc.Tools/build/_protobuf/Google.Protobuf.Tools.targets
  26. 3
      src/csharp/doc/docfx.json
  27. 2
      src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
  28. 3
      src/objective-c/!ProtoCompiler.podspec
  29. 2
      src/objective-c/BoringSSL-GRPC.podspec
  30. 5
      src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pyx.pxi
  31. 1
      src/python/grpcio/grpc_core_dependencies.py
  32. 2
      templates/gRPC-Core.podspec.template
  33. 2
      templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template
  34. 2
      templates/src/objective-c/BoringSSL-GRPC.podspec.template
  35. 5
      test/cpp/end2end/client_callback_end2end_test.cc
  36. 2
      test/distrib/cpp/run_distrib_test_cmake.sh
  37. 2
      third_party/cares/cares
  38. 2
      third_party/cares/cares.BUILD
  39. 3
      third_party/cares/config_android/ares_config.h
  40. 3
      third_party/cares/config_darwin/ares_config.h
  41. 3
      third_party/cares/config_freebsd/ares_config.h
  42. 3
      third_party/cares/config_linux/ares_config.h
  43. 3
      third_party/cares/config_openbsd/ares_config.h
  44. 3
      third_party/cares/config_windows/ares_config.h
  45. 1
      tools/doxygen/Doxyfile.c++
  46. 1
      tools/doxygen/Doxyfile.c++.internal
  47. 3
      tools/run_tests/generated/sources_and_headers.json
  48. 6
      tools/run_tests/run_interop_tests.py
  49. 2
      tools/run_tests/sanity/check_submodules.sh

@ -247,7 +247,6 @@ GRPCXX_PUBLIC_HDRS = [
"include/grpcpp/security/server_credentials.h", "include/grpcpp/security/server_credentials.h",
"include/grpcpp/server.h", "include/grpcpp/server.h",
"include/grpcpp/server_builder.h", "include/grpcpp/server_builder.h",
"include/grpcpp/server_builder_impl.h",
"include/grpcpp/server_context.h", "include/grpcpp/server_context.h",
"include/grpcpp/server_posix.h", "include/grpcpp/server_posix.h",
"include/grpcpp/support/async_stream.h", "include/grpcpp/support/async_stream.h",

@ -3025,7 +3025,6 @@ foreach(_hdr
include/grpcpp/security/server_credentials.h include/grpcpp/security/server_credentials.h
include/grpcpp/server.h include/grpcpp/server.h
include/grpcpp/server_builder.h include/grpcpp/server_builder.h
include/grpcpp/server_builder_impl.h
include/grpcpp/server_context.h include/grpcpp/server_context.h
include/grpcpp/server_posix.h include/grpcpp/server_posix.h
include/grpcpp/support/async_stream.h include/grpcpp/support/async_stream.h
@ -3617,7 +3616,6 @@ foreach(_hdr
include/grpcpp/security/server_credentials.h include/grpcpp/security/server_credentials.h
include/grpcpp/server.h include/grpcpp/server.h
include/grpcpp/server_builder.h include/grpcpp/server_builder.h
include/grpcpp/server_builder_impl.h
include/grpcpp/server_context.h include/grpcpp/server_context.h
include/grpcpp/server_posix.h include/grpcpp/server_posix.h
include/grpcpp/support/async_stream.h include/grpcpp/support/async_stream.h
@ -4581,7 +4579,6 @@ foreach(_hdr
include/grpcpp/security/server_credentials.h include/grpcpp/security/server_credentials.h
include/grpcpp/server.h include/grpcpp/server.h
include/grpcpp/server_builder.h include/grpcpp/server_builder.h
include/grpcpp/server_builder_impl.h
include/grpcpp/server_context.h include/grpcpp/server_context.h
include/grpcpp/server_posix.h include/grpcpp/server_posix.h
include/grpcpp/support/async_stream.h include/grpcpp/support/async_stream.h

@ -5352,7 +5352,6 @@ PUBLIC_HEADERS_CXX += \
include/grpcpp/security/server_credentials.h \ include/grpcpp/security/server_credentials.h \
include/grpcpp/server.h \ include/grpcpp/server.h \
include/grpcpp/server_builder.h \ include/grpcpp/server_builder.h \
include/grpcpp/server_builder_impl.h \
include/grpcpp/server_context.h \ include/grpcpp/server_context.h \
include/grpcpp/server_posix.h \ include/grpcpp/server_posix.h \
include/grpcpp/support/async_stream.h \ include/grpcpp/support/async_stream.h \
@ -5952,7 +5951,6 @@ PUBLIC_HEADERS_CXX += \
include/grpcpp/security/server_credentials.h \ include/grpcpp/security/server_credentials.h \
include/grpcpp/server.h \ include/grpcpp/server.h \
include/grpcpp/server_builder.h \ include/grpcpp/server_builder.h \
include/grpcpp/server_builder_impl.h \
include/grpcpp/server_context.h \ include/grpcpp/server_context.h \
include/grpcpp/server_posix.h \ include/grpcpp/server_posix.h \
include/grpcpp/support/async_stream.h \ include/grpcpp/support/async_stream.h \
@ -6865,7 +6863,6 @@ PUBLIC_HEADERS_CXX += \
include/grpcpp/security/server_credentials.h \ include/grpcpp/security/server_credentials.h \
include/grpcpp/server.h \ include/grpcpp/server.h \
include/grpcpp/server_builder.h \ include/grpcpp/server_builder.h \
include/grpcpp/server_builder_impl.h \
include/grpcpp/server_context.h \ include/grpcpp/server_context.h \
include/grpcpp/server_posix.h \ include/grpcpp/server_posix.h \
include/grpcpp/support/async_stream.h \ include/grpcpp/support/async_stream.h \
@ -8230,6 +8227,7 @@ LIBARES_SRC = \
third_party/cares/cares/ares_strcasecmp.c \ third_party/cares/cares/ares_strcasecmp.c \
third_party/cares/cares/ares_strdup.c \ third_party/cares/cares/ares_strdup.c \
third_party/cares/cares/ares_strerror.c \ third_party/cares/cares/ares_strerror.c \
third_party/cares/cares/ares_strsplit.c \
third_party/cares/cares/ares_timeout.c \ third_party/cares/cares/ares_timeout.c \
third_party/cares/cares/ares_version.c \ third_party/cares/cares/ares_version.c \
third_party/cares/cares/ares_writev.c \ third_party/cares/cares/ares_writev.c \

@ -162,8 +162,8 @@ def grpc_deps():
http_archive( http_archive(
name = "com_github_cares_cares", name = "com_github_cares_cares",
build_file = "@com_github_grpc_grpc//third_party:cares/cares.BUILD", build_file = "@com_github_grpc_grpc//third_party:cares/cares.BUILD",
strip_prefix = "c-ares-3be1924221e1326df520f8498d704a5c4c8d0cce", strip_prefix = "c-ares-e982924acee7f7313b4baa4ee5ec000c5e373c30",
url = "https://github.com/c-ares/c-ares/archive/3be1924221e1326df520f8498d704a5c4c8d0cce.tar.gz", url = "https://github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz",
) )
if "com_google_absl" not in native.existing_rules(): if "com_google_absl" not in native.existing_rules():

@ -1370,7 +1370,6 @@ filegroups:
- include/grpcpp/security/server_credentials.h - include/grpcpp/security/server_credentials.h
- include/grpcpp/server.h - include/grpcpp/server.h
- include/grpcpp/server_builder.h - include/grpcpp/server_builder.h
- include/grpcpp/server_builder_impl.h
- include/grpcpp/server_context.h - include/grpcpp/server_context.h
- include/grpcpp/server_posix.h - include/grpcpp/server_posix.h
- include/grpcpp/support/async_stream.h - include/grpcpp/support/async_stream.h

@ -124,9 +124,10 @@ some configuration as environment variables that can be set.
Declares which DNS resolver to use. The default is ares if gRPC is built with Declares which DNS resolver to use. The default is ares if gRPC is built with
c-ares support. Otherwise, the value of this environment variable is ignored. c-ares support. Otherwise, the value of this environment variable is ignored.
Available DNS resolver include: Available DNS resolver include:
- native (default)- a DNS resolver based around getaddrinfo(), creates a new thread to - ares (default on most platforms except iOS, Android or Node)- a DNS
resolver based around the c-ares library
- native - a DNS resolver based around getaddrinfo(), creates a new thread to
perform name resolution perform name resolution
- ares - a DNS resolver based around the c-ares library
* GRPC_CLIENT_CHANNEL_BACKUP_POLL_INTERVAL_MS * GRPC_CLIENT_CHANNEL_BACKUP_POLL_INTERVAL_MS
Default: 5000 Default: 5000

@ -111,7 +111,6 @@ Pod::Spec.new do |s|
'include/grpcpp/security/server_credentials.h', 'include/grpcpp/security/server_credentials.h',
'include/grpcpp/server.h', 'include/grpcpp/server.h',
'include/grpcpp/server_builder.h', 'include/grpcpp/server_builder.h',
'include/grpcpp/server_builder_impl.h',
'include/grpcpp/server_context.h', 'include/grpcpp/server_context.h',
'include/grpcpp/server_posix.h', 'include/grpcpp/server_posix.h',
'include/grpcpp/support/async_stream.h', 'include/grpcpp/support/async_stream.h',

@ -1235,7 +1235,6 @@ Pod::Spec.new do |s|
'test/core/util/port_isolated_runtime_environment.cc', 'test/core/util/port_isolated_runtime_environment.cc',
'test/core/util/port_server_client.cc', 'test/core/util/port_server_client.cc',
'test/core/util/slice_splitter.cc', 'test/core/util/slice_splitter.cc',
'test/core/util/subprocess_posix.cc',
'test/core/util/subprocess_windows.cc', 'test/core/util/subprocess_windows.cc',
'test/core/util/test_config.cc', 'test/core/util/test_config.cc',
'test/core/util/test_lb_policies.cc', 'test/core/util/test_lb_policies.cc',

@ -1266,6 +1266,7 @@ Gem::Specification.new do |s|
s.files += %w( third_party/cares/cares/ares_setup.h ) s.files += %w( third_party/cares/cares/ares_setup.h )
s.files += %w( third_party/cares/cares/ares_strcasecmp.h ) s.files += %w( third_party/cares/cares/ares_strcasecmp.h )
s.files += %w( third_party/cares/cares/ares_strdup.h ) s.files += %w( third_party/cares/cares/ares_strdup.h )
s.files += %w( third_party/cares/cares/ares_strsplit.h )
s.files += %w( third_party/cares/cares/ares_version.h ) s.files += %w( third_party/cares/cares/ares_version.h )
s.files += %w( third_party/cares/cares/bitncmp.h ) s.files += %w( third_party/cares/cares/bitncmp.h )
s.files += %w( third_party/cares/cares/config-win32.h ) s.files += %w( third_party/cares/cares/config-win32.h )
@ -1317,6 +1318,7 @@ Gem::Specification.new do |s|
s.files += %w( third_party/cares/cares/ares_strcasecmp.c ) s.files += %w( third_party/cares/cares/ares_strcasecmp.c )
s.files += %w( third_party/cares/cares/ares_strdup.c ) s.files += %w( third_party/cares/cares/ares_strdup.c )
s.files += %w( third_party/cares/cares/ares_strerror.c ) s.files += %w( third_party/cares/cares/ares_strerror.c )
s.files += %w( third_party/cares/cares/ares_strsplit.c )
s.files += %w( third_party/cares/cares/ares_timeout.c ) s.files += %w( third_party/cares/cares/ares_timeout.c )
s.files += %w( third_party/cares/cares/ares_version.c ) s.files += %w( third_party/cares/cares/ares_version.c )
s.files += %w( third_party/cares/cares/ares_writev.c ) s.files += %w( third_party/cares/cares/ares_writev.c )

@ -41,10 +41,6 @@
struct grpc_completion_queue; struct grpc_completion_queue;
namespace grpc_impl {
class ServerBuilder;
}
namespace grpc { namespace grpc {
template <class R> template <class R>
@ -67,6 +63,7 @@ class ChannelInterface;
class ClientContext; class ClientContext;
class CompletionQueue; class CompletionQueue;
class Server; class Server;
class ServerBuilder;
class ServerContext; class ServerContext;
class ServerInterface; class ServerInterface;
@ -408,7 +405,7 @@ class ServerCompletionQueue : public CompletionQueue {
polling_type_(polling_type) {} polling_type_(polling_type) {}
grpc_cq_polling_type polling_type_; grpc_cq_polling_type polling_type_;
friend class ::grpc_impl::ServerBuilder; friend class ServerBuilder;
friend class Server; friend class Server;
}; };

@ -46,7 +46,7 @@ class MethodHandler {
/// \param context : the ServerContext structure for this server call /// \param context : the ServerContext structure for this server call
/// \param req : the request payload, if appropriate for this RPC /// \param req : the request payload, if appropriate for this RPC
/// \param req_status : the request status after any interceptors have run /// \param req_status : the request status after any interceptors have run
/// \param rpc_requester : used only by the callback API. It is a function /// \param requester : used only by the callback API. It is a function
/// called by the RPC Controller to request another RPC (and also /// called by the RPC Controller to request another RPC (and also
/// to set up the state required to make that request possible) /// to set up the state required to make that request possible)
HandlerParameter(Call* c, ServerContext* context, void* req, HandlerParameter(Call* c, ServerContext* context, void* req,

@ -23,12 +23,9 @@
#include <grpcpp/support/config.h> #include <grpcpp/support/config.h>
namespace grpc_impl {
class ServerBuilder;
}
namespace grpc { namespace grpc {
class ServerBuilder;
class ServerInitializer; class ServerInitializer;
class ChannelArguments; class ChannelArguments;
@ -43,7 +40,7 @@ class ServerBuilderPlugin {
/// UpdateServerBuilder will be called at an early stage in /// UpdateServerBuilder will be called at an early stage in
/// ServerBuilder::BuildAndStart(), right after the ServerBuilderOptions have /// ServerBuilder::BuildAndStart(), right after the ServerBuilderOptions have
/// done their updates. /// done their updates.
virtual void UpdateServerBuilder(grpc_impl::ServerBuilder* builder) {} virtual void UpdateServerBuilder(ServerBuilder* builder) {}
/// InitServer will be called in ServerBuilder::BuildAndStart(), after the /// InitServer will be called in ServerBuilder::BuildAndStart(), after the
/// Server instance is created. /// Server instance is created.

@ -198,7 +198,7 @@ class Server : public ServerInterface, private GrpcLibraryCodegen {
} }
friend class AsyncGenericService; friend class AsyncGenericService;
friend class ::grpc_impl::ServerBuilder; friend class ServerBuilder;
friend class ServerInitializer; friend class ServerInitializer;
class SyncRequest; class SyncRequest;

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2019 gRPC authors. * Copyright 2015-2016 gRPC authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -19,11 +19,320 @@
#ifndef GRPCPP_SERVER_BUILDER_H #ifndef GRPCPP_SERVER_BUILDER_H
#define GRPCPP_SERVER_BUILDER_H #define GRPCPP_SERVER_BUILDER_H
#include <grpcpp/server_builder_impl.h> #include <climits>
#include <map>
#include <memory>
#include <vector>
#include <grpc/compression.h>
#include <grpc/support/cpu.h>
#include <grpc/support/workaround_list.h>
#include <grpcpp/impl/channel_argument_option.h>
#include <grpcpp/impl/codegen/server_interceptor.h>
#include <grpcpp/impl/server_builder_option.h>
#include <grpcpp/impl/server_builder_plugin.h>
#include <grpcpp/support/config.h>
struct grpc_resource_quota;
namespace grpc { namespace grpc {
typedef ::grpc_impl::ServerBuilder ServerBuilder; class AsyncGenericService;
class ResourceQuota;
class CompletionQueue;
class Server;
class ServerCompletionQueue;
class ServerCredentials;
class Service;
namespace testing {
class ServerBuilderPluginTest;
} // namespace testing
namespace experimental {
class CallbackGenericService;
} // namespace experimental
/// A builder class for the creation and startup of \a grpc::Server instances.
class ServerBuilder {
public:
ServerBuilder();
virtual ~ServerBuilder();
//////////////////////////////////////////////////////////////////////////////
// Primary API's
/// Return a running server which is ready for processing calls.
/// Before calling, one typically needs to ensure that:
/// 1. a service is registered - so that the server knows what to serve
/// (via RegisterService, or RegisterAsyncGenericService)
/// 2. a listening port has been added - so the server knows where to receive
/// traffic (via AddListeningPort)
/// 3. [for async api only] completion queues have been added via
/// AddCompletionQueue
virtual std::unique_ptr<Server> BuildAndStart();
/// Register a service. This call does not take ownership of the service.
/// The service must exist for the lifetime of the \a Server instance returned
/// by \a BuildAndStart().
/// Matches requests with any :authority
ServerBuilder& RegisterService(Service* service);
/// Enlists an endpoint \a addr (port with an optional IP address) to
/// bind the \a grpc::Server object to be created to.
///
/// It can be invoked multiple times.
///
/// \param addr_uri The address to try to bind to the server in URI form. If
/// the scheme name is omitted, "dns:///" is assumed. To bind to any address,
/// please use IPv6 any, i.e., [::]:<port>, which also accepts IPv4
/// connections. Valid values include dns:///localhost:1234, /
/// 192.168.1.1:31416, dns:///[::1]:27182, etc.).
/// \param creds The credentials associated with the server.
/// \param selected_port[out] If not `nullptr`, gets populated with the port
/// number bound to the \a grpc::Server for the corresponding endpoint after
/// it is successfully bound by BuildAndStart(), 0 otherwise. AddListeningPort
/// does not modify this pointer.
ServerBuilder& AddListeningPort(const grpc::string& addr_uri,
std::shared_ptr<ServerCredentials> creds,
int* selected_port = nullptr);
/// Add a completion queue for handling asynchronous services.
///
/// Best performance is typically obtained by using one thread per polling
/// completion queue.
///
/// Caller is required to shutdown the server prior to shutting down the
/// returned completion queue. Caller is also required to drain the
/// completion queue after shutting it down. A typical usage scenario:
///
/// // While building the server:
/// ServerBuilder builder;
/// ...
/// cq_ = builder.AddCompletionQueue();
/// server_ = builder.BuildAndStart();
///
/// // While shutting down the server;
/// server_->Shutdown();
/// cq_->Shutdown(); // Always *after* the associated server's Shutdown()!
/// // Drain the cq_ that was created
/// void* ignored_tag;
/// bool ignored_ok;
/// while (cq_->Next(&ignored_tag, &ignored_ok)) { }
///
/// \param is_frequently_polled This is an optional parameter to inform gRPC
/// library about whether this completion queue would be frequently polled
/// (i.e. by calling \a Next() or \a AsyncNext()). The default value is
/// 'true' and is the recommended setting. Setting this to 'false' (i.e.
/// not polling the completion queue frequently) will have a significantly
/// negative performance impact and hence should not be used in production
/// use cases.
std::unique_ptr<ServerCompletionQueue> AddCompletionQueue(
bool is_frequently_polled = true);
//////////////////////////////////////////////////////////////////////////////
// Less commonly used RegisterService variants
/// Register a service. This call does not take ownership of the service.
/// The service must exist for the lifetime of the \a Server instance returned
/// by \a BuildAndStart().
/// Only matches requests with :authority \a host
ServerBuilder& RegisterService(const grpc::string& host, Service* service);
/// Register a generic service.
/// Matches requests with any :authority
/// This is mostly useful for writing generic gRPC Proxies where the exact
/// serialization format is unknown
ServerBuilder& RegisterAsyncGenericService(AsyncGenericService* service);
//////////////////////////////////////////////////////////////////////////////
// Fine control knobs
/// Set max receive message size in bytes.
/// The default is GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH.
ServerBuilder& SetMaxReceiveMessageSize(int max_receive_message_size) {
max_receive_message_size_ = max_receive_message_size;
return *this;
}
/// Set max send message size in bytes.
/// The default is GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH.
ServerBuilder& SetMaxSendMessageSize(int max_send_message_size) {
max_send_message_size_ = max_send_message_size;
return *this;
}
/// \deprecated For backward compatibility.
ServerBuilder& SetMaxMessageSize(int max_message_size) {
return SetMaxReceiveMessageSize(max_message_size);
}
/// Set the support status for compression algorithms. All algorithms are
/// enabled by default.
///
/// Incoming calls compressed with an unsupported algorithm will fail with
/// \a GRPC_STATUS_UNIMPLEMENTED.
ServerBuilder& SetCompressionAlgorithmSupportStatus(
grpc_compression_algorithm algorithm, bool enabled);
/// The default compression level to use for all channel calls in the
/// absence of a call-specific level.
ServerBuilder& SetDefaultCompressionLevel(grpc_compression_level level);
/// The default compression algorithm to use for all channel calls in the
/// absence of a call-specific level. Note that it overrides any compression
/// level set by \a SetDefaultCompressionLevel.
ServerBuilder& SetDefaultCompressionAlgorithm(
grpc_compression_algorithm algorithm);
/// Set the attached buffer pool for this server
ServerBuilder& SetResourceQuota(const ResourceQuota& resource_quota);
ServerBuilder& SetOption(std::unique_ptr<ServerBuilderOption> option);
/// Options for synchronous servers.
enum SyncServerOption {
NUM_CQS, ///< Number of completion queues.
MIN_POLLERS, ///< Minimum number of polling threads.
MAX_POLLERS, ///< Maximum number of polling threads.
CQ_TIMEOUT_MSEC ///< Completion queue timeout in milliseconds.
};
/// Only useful if this is a Synchronous server.
ServerBuilder& SetSyncServerOption(SyncServerOption option, int value);
/// Add a channel argument (an escape hatch to tuning core library parameters
/// directly)
template <class T>
ServerBuilder& AddChannelArgument(const grpc::string& arg, const T& value) {
return SetOption(MakeChannelArgumentOption(arg, value));
}
/// For internal use only: Register a ServerBuilderPlugin factory function.
static void InternalAddPluginFactory(
std::unique_ptr<ServerBuilderPlugin> (*CreatePlugin)());
/// Enable a server workaround. Do not use unless you know what the workaround
/// does. For explanation and detailed descriptions of workarounds, see
/// doc/workarounds.md.
ServerBuilder& EnableWorkaround(grpc_workaround_list id);
/// NOTE: class experimental_type is not part of the public API of this class.
/// TODO(yashykt): Integrate into public API when this is no longer
/// experimental.
class experimental_type {
public:
explicit experimental_type(ServerBuilder* builder) : builder_(builder) {}
void SetInterceptorCreators(
std::vector<
std::unique_ptr<experimental::ServerInterceptorFactoryInterface>>
interceptor_creators) {
builder_->interceptor_creators_ = std::move(interceptor_creators);
}
ServerBuilder& RegisterCallbackGenericService(
experimental::CallbackGenericService* service);
private:
ServerBuilder* builder_;
};
/// NOTE: The function experimental() is not stable public API. It is a view
/// to the experimental components of this class. It may be changed or removed
/// at any time.
experimental_type experimental() { return experimental_type(this); }
protected:
/// Experimental, to be deprecated
struct Port {
grpc::string addr;
std::shared_ptr<ServerCredentials> creds;
int* selected_port;
};
/// Experimental, to be deprecated
typedef std::unique_ptr<grpc::string> HostString;
struct NamedService {
explicit NamedService(Service* s) : service(s) {}
NamedService(const grpc::string& h, Service* s)
: host(new grpc::string(h)), service(s) {}
HostString host;
Service* service;
};
/// Experimental, to be deprecated
std::vector<Port> ports() { return ports_; }
/// Experimental, to be deprecated
std::vector<NamedService*> services() {
std::vector<NamedService*> service_refs;
for (auto& ptr : services_) {
service_refs.push_back(ptr.get());
}
return service_refs;
}
/// Experimental, to be deprecated
std::vector<ServerBuilderOption*> options() {
std::vector<ServerBuilderOption*> option_refs;
for (auto& ptr : options_) {
option_refs.push_back(ptr.get());
}
return option_refs;
}
private:
friend class ::grpc::testing::ServerBuilderPluginTest;
struct SyncServerSettings {
SyncServerSettings()
: num_cqs(1), min_pollers(1), max_pollers(2), cq_timeout_msec(10000) {}
/// Number of server completion queues to create to listen to incoming RPCs.
int num_cqs;
/// Minimum number of threads per completion queue that should be listening
/// to incoming RPCs.
int min_pollers;
/// Maximum number of threads per completion queue that can be listening to
/// incoming RPCs.
int max_pollers;
/// The timeout for server completion queue's AsyncNext call.
int cq_timeout_msec;
};
int max_receive_message_size_;
int max_send_message_size_;
std::vector<std::unique_ptr<ServerBuilderOption>> options_;
std::vector<std::unique_ptr<NamedService>> services_;
std::vector<Port> ports_;
SyncServerSettings sync_server_settings_;
/// List of completion queues added via \a AddCompletionQueue method.
std::vector<ServerCompletionQueue*> cqs_;
std::shared_ptr<ServerCredentials> creds_;
std::vector<std::unique_ptr<ServerBuilderPlugin>> plugins_;
grpc_resource_quota* resource_quota_;
AsyncGenericService* generic_service_{nullptr};
experimental::CallbackGenericService* callback_generic_service_{nullptr};
struct {
bool is_set;
grpc_compression_level level;
} maybe_default_compression_level_;
struct {
bool is_set;
grpc_compression_algorithm algorithm;
} maybe_default_compression_algorithm_;
uint32_t enabled_compression_algorithms_bitset_;
std::vector<std::unique_ptr<experimental::ServerInterceptorFactoryInterface>>
interceptor_creators_;
};
} // namespace grpc } // namespace grpc
#endif // GRPCPP_SERVER_BUILDER_H #endif // GRPCPP_SERVER_BUILDER_H

@ -1,346 +0,0 @@
/*
*
* Copyright 2015-2016 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.
*
*/
#ifndef GRPCPP_SERVER_BUILDER_IMPL_H
#define GRPCPP_SERVER_BUILDER_IMPL_H
#include <climits>
#include <map>
#include <memory>
#include <vector>
#include <grpc/compression.h>
#include <grpc/support/cpu.h>
#include <grpc/support/workaround_list.h>
#include <grpcpp/impl/channel_argument_option.h>
#include <grpcpp/impl/codegen/server_interceptor.h>
#include <grpcpp/impl/server_builder_option.h>
#include <grpcpp/impl/server_builder_plugin.h>
#include <grpcpp/support/config.h>
struct grpc_resource_quota;
namespace grpc {
class AsyncGenericService;
class ResourceQuota;
class CompletionQueue;
class Server;
class ServerCompletionQueue;
class ServerCredentials;
class Service;
namespace testing {
class ServerBuilderPluginTest;
} // namespace testing
namespace experimental {
class CallbackGenericService;
}
} // namespace grpc
namespace grpc_impl {
/// A builder class for the creation and startup of \a grpc::Server instances.
class ServerBuilder {
public:
ServerBuilder();
virtual ~ServerBuilder();
//////////////////////////////////////////////////////////////////////////////
// Primary API's
/// Return a running server which is ready for processing calls.
/// Before calling, one typically needs to ensure that:
/// 1. a service is registered - so that the server knows what to serve
/// (via RegisterService, or RegisterAsyncGenericService)
/// 2. a listening port has been added - so the server knows where to receive
/// traffic (via AddListeningPort)
/// 3. [for async api only] completion queues have been added via
/// AddCompletionQueue
virtual std::unique_ptr<grpc::Server> BuildAndStart();
/// Register a service. This call does not take ownership of the service.
/// The service must exist for the lifetime of the \a Server instance returned
/// by \a BuildAndStart().
/// Matches requests with any :authority
ServerBuilder& RegisterService(grpc::Service* service);
/// Enlists an endpoint \a addr (port with an optional IP address) to
/// bind the \a grpc::Server object to be created to.
///
/// It can be invoked multiple times.
///
/// \param addr_uri The address to try to bind to the server in URI form. If
/// the scheme name is omitted, "dns:///" is assumed. To bind to any address,
/// please use IPv6 any, i.e., [::]:<port>, which also accepts IPv4
/// connections. Valid values include dns:///localhost:1234, /
/// 192.168.1.1:31416, dns:///[::1]:27182, etc.).
/// \param creds The credentials associated with the server.
/// \param selected_port[out] If not `nullptr`, gets populated with the port
/// number bound to the \a grpc::Server for the corresponding endpoint after
/// it is successfully bound by BuildAndStart(), 0 otherwise. AddListeningPort
/// does not modify this pointer.
ServerBuilder& AddListeningPort(
const grpc::string& addr_uri,
std::shared_ptr<grpc::ServerCredentials> creds,
int* selected_port = nullptr);
/// Add a completion queue for handling asynchronous services.
///
/// Best performance is typically obtained by using one thread per polling
/// completion queue.
///
/// Caller is required to shutdown the server prior to shutting down the
/// returned completion queue. Caller is also required to drain the
/// completion queue after shutting it down. A typical usage scenario:
///
/// // While building the server:
/// ServerBuilder builder;
/// ...
/// cq_ = builder.AddCompletionQueue();
/// server_ = builder.BuildAndStart();
///
/// // While shutting down the server;
/// server_->Shutdown();
/// cq_->Shutdown(); // Always *after* the associated server's Shutdown()!
/// // Drain the cq_ that was created
/// void* ignored_tag;
/// bool ignored_ok;
/// while (cq_->Next(&ignored_tag, &ignored_ok)) { }
///
/// \param is_frequently_polled This is an optional parameter to inform gRPC
/// library about whether this completion queue would be frequently polled
/// (i.e. by calling \a Next() or \a AsyncNext()). The default value is
/// 'true' and is the recommended setting. Setting this to 'false' (i.e.
/// not polling the completion queue frequently) will have a significantly
/// negative performance impact and hence should not be used in production
/// use cases.
std::unique_ptr<grpc::ServerCompletionQueue> AddCompletionQueue(
bool is_frequently_polled = true);
//////////////////////////////////////////////////////////////////////////////
// Less commonly used RegisterService variants
/// Register a service. This call does not take ownership of the service.
/// The service must exist for the lifetime of the \a Server instance
/// returned by \a BuildAndStart(). Only matches requests with :authority \a
/// host
ServerBuilder& RegisterService(const grpc::string& host,
grpc::Service* service);
/// Register a generic service.
/// Matches requests with any :authority
/// This is mostly useful for writing generic gRPC Proxies where the exact
/// serialization format is unknown
ServerBuilder& RegisterAsyncGenericService(
grpc::AsyncGenericService* service);
//////////////////////////////////////////////////////////////////////////////
// Fine control knobs
/// Set max receive message size in bytes.
/// The default is GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH.
ServerBuilder& SetMaxReceiveMessageSize(int max_receive_message_size) {
max_receive_message_size_ = max_receive_message_size;
return *this;
}
/// Set max send message size in bytes.
/// The default is GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH.
ServerBuilder& SetMaxSendMessageSize(int max_send_message_size) {
max_send_message_size_ = max_send_message_size;
return *this;
}
/// \deprecated For backward compatibility.
ServerBuilder& SetMaxMessageSize(int max_message_size) {
return SetMaxReceiveMessageSize(max_message_size);
}
/// Set the support status for compression algorithms. All algorithms are
/// enabled by default.
///
/// Incoming calls compressed with an unsupported algorithm will fail with
/// \a GRPC_STATUS_UNIMPLEMENTED.
ServerBuilder& SetCompressionAlgorithmSupportStatus(
grpc_compression_algorithm algorithm, bool enabled);
/// The default compression level to use for all channel calls in the
/// absence of a call-specific level.
ServerBuilder& SetDefaultCompressionLevel(grpc_compression_level level);
/// The default compression algorithm to use for all channel calls in the
/// absence of a call-specific level. Note that it overrides any compression
/// level set by \a SetDefaultCompressionLevel.
ServerBuilder& SetDefaultCompressionAlgorithm(
grpc_compression_algorithm algorithm);
/// Set the attached buffer pool for this server
ServerBuilder& SetResourceQuota(const grpc::ResourceQuota& resource_quota);
ServerBuilder& SetOption(std::unique_ptr<grpc::ServerBuilderOption> option);
/// Options for synchronous servers.
enum SyncServerOption {
NUM_CQS, ///< Number of completion queues.
MIN_POLLERS, ///< Minimum number of polling threads.
MAX_POLLERS, ///< Maximum number of polling threads.
CQ_TIMEOUT_MSEC ///< Completion queue timeout in milliseconds.
};
/// Only useful if this is a Synchronous server.
ServerBuilder& SetSyncServerOption(SyncServerOption option, int value);
/// Add a channel argument (an escape hatch to tuning core library parameters
/// directly)
template <class T>
ServerBuilder& AddChannelArgument(const grpc::string& arg, const T& value) {
return SetOption(grpc::MakeChannelArgumentOption(arg, value));
}
/// For internal use only: Register a ServerBuilderPlugin factory function.
static void InternalAddPluginFactory(
std::unique_ptr<grpc::ServerBuilderPlugin> (*CreatePlugin)());
/// Enable a server workaround. Do not use unless you know what the workaround
/// does. For explanation and detailed descriptions of workarounds, see
/// doc/workarounds.md.
ServerBuilder& EnableWorkaround(grpc_workaround_list id);
/// NOTE: class experimental_type is not part of the public API of this class.
/// TODO(yashykt): Integrate into public API when this is no longer
/// experimental.
class experimental_type {
public:
explicit experimental_type(grpc_impl::ServerBuilder* builder)
: builder_(builder) {}
void SetInterceptorCreators(
std::vector<std::unique_ptr<
grpc::experimental::ServerInterceptorFactoryInterface>>
interceptor_creators) {
builder_->interceptor_creators_ = std::move(interceptor_creators);
}
ServerBuilder& RegisterCallbackGenericService(
grpc::experimental::CallbackGenericService* service);
private:
ServerBuilder* builder_;
};
/// NOTE: The function experimental() is not stable public API. It is a view
/// to the experimental components of this class. It may be changed or removed
/// at any time.
experimental_type experimental() { return experimental_type(this); }
protected:
/// Experimental, to be deprecated
struct Port {
grpc::string addr;
std::shared_ptr<grpc::ServerCredentials> creds;
int* selected_port;
};
/// Experimental, to be deprecated
typedef std::unique_ptr<grpc::string> HostString;
struct NamedService {
explicit NamedService(grpc::Service* s) : service(s) {}
NamedService(const grpc::string& h, grpc::Service* s)
: host(new grpc::string(h)), service(s) {}
HostString host;
grpc::Service* service;
};
/// Experimental, to be deprecated
std::vector<Port> ports() { return ports_; }
/// Experimental, to be deprecated
std::vector<NamedService*> services() {
std::vector<NamedService*> service_refs;
for (auto& ptr : services_) {
service_refs.push_back(ptr.get());
}
return service_refs;
}
/// Experimental, to be deprecated
std::vector<grpc::ServerBuilderOption*> options() {
std::vector<grpc::ServerBuilderOption*> option_refs;
for (auto& ptr : options_) {
option_refs.push_back(ptr.get());
}
return option_refs;
}
private:
friend class ::grpc::testing::ServerBuilderPluginTest;
struct SyncServerSettings {
SyncServerSettings()
: num_cqs(1), min_pollers(1), max_pollers(2), cq_timeout_msec(10000) {}
/// Number of server completion queues to create to listen to incoming RPCs.
int num_cqs;
/// Minimum number of threads per completion queue that should be listening
/// to incoming RPCs.
int min_pollers;
/// Maximum number of threads per completion queue that can be listening to
/// incoming RPCs.
int max_pollers;
/// The timeout for server completion queue's AsyncNext call.
int cq_timeout_msec;
};
int max_receive_message_size_;
int max_send_message_size_;
std::vector<std::unique_ptr<grpc::ServerBuilderOption>> options_;
std::vector<std::unique_ptr<NamedService>> services_;
std::vector<Port> ports_;
SyncServerSettings sync_server_settings_;
/// List of completion queues added via \a AddCompletionQueue method.
std::vector<grpc::ServerCompletionQueue*> cqs_;
std::shared_ptr<grpc::ServerCredentials> creds_;
std::vector<std::unique_ptr<grpc::ServerBuilderPlugin>> plugins_;
grpc_resource_quota* resource_quota_;
grpc::AsyncGenericService* generic_service_{nullptr};
grpc::experimental::CallbackGenericService* callback_generic_service_{
nullptr};
struct {
bool is_set;
grpc_compression_level level;
} maybe_default_compression_level_;
struct {
bool is_set;
grpc_compression_algorithm algorithm;
} maybe_default_compression_algorithm_;
uint32_t enabled_compression_algorithms_bitset_;
std::vector<
std::unique_ptr<grpc::experimental::ServerInterceptorFactoryInterface>>
interceptor_creators_;
};
} // namespace grpc_impl
#endif // GRPCPP_SERVER_BUILDER_IMPL_H

@ -97,6 +97,7 @@ try:
"third_party/cares/cares/ares_strcasecmp.c", "third_party/cares/cares/ares_strcasecmp.c",
"third_party/cares/cares/ares_strdup.c", "third_party/cares/cares/ares_strdup.c",
"third_party/cares/cares/ares_strerror.c", "third_party/cares/cares/ares_strerror.c",
"third_party/cares/cares/ares_strsplit.c",
"third_party/cares/cares/ares_timeout.c", "third_party/cares/cares/ares_timeout.c",
"third_party/cares/cares/ares_version.c", "third_party/cares/cares/ares_version.c",
"third_party/cares/cares/ares_writev.c", "third_party/cares/cares/ares_writev.c",
@ -123,6 +124,7 @@ try:
"third_party/cares/cares/ares_setup.h", "third_party/cares/cares/ares_setup.h",
"third_party/cares/cares/ares_strcasecmp.h", "third_party/cares/cares/ares_strcasecmp.h",
"third_party/cares/cares/ares_strdup.h", "third_party/cares/cares/ares_strdup.h",
"third_party/cares/cares/ares_strsplit.h",
"third_party/cares/cares/ares_version.h", "third_party/cares/cares/ares_version.h",
"third_party/cares/cares/bitncmp.h", "third_party/cares/cares/bitncmp.h",
"third_party/cares/cares/config-win32.h", "third_party/cares/cares/config-win32.h",

@ -1,4 +1,4 @@
# Overview # Overview
This directory contains source code for C library (a.k.a the *gRPC C core*) that provides all gRPC's core functionality through a low level API. Libraries in other languages in this repository (C++, Ruby, This directory contains source code for C library (a.k.a the *gRPC C core*) that provides all gRPC's core functionality through a low level API. Libraries in other languages in this repository (C++, C#, Ruby,
Python, PHP, NodeJS, Objective-C) are layered on top of this library. Python, PHP, NodeJS, Objective-C) are layered on top of this library.

@ -624,7 +624,8 @@ static int verify_jwt_signature(EVP_PKEY* key, const char* alg,
gpr_log(GPR_ERROR, "EVP_DigestVerifyUpdate failed."); gpr_log(GPR_ERROR, "EVP_DigestVerifyUpdate failed.");
goto end; goto end;
} }
if (EVP_DigestVerifyFinal(md_ctx, GRPC_SLICE_START_PTR(signature), if (EVP_DigestVerifyFinal(
md_ctx, const_cast<uint8_t*>(GRPC_SLICE_START_PTR(signature)),
GRPC_SLICE_LENGTH(signature)) != 1) { GRPC_SLICE_LENGTH(signature)) != 1) {
gpr_log(GPR_ERROR, "JWT signature verification failed."); gpr_log(GPR_ERROR, "JWT signature verification failed.");
goto end; goto end;

@ -111,10 +111,11 @@ void grpc_transport_move_stats(grpc_transport_stream_stats* from,
// currently handling the batch). Once a filter or transport passes control // currently handling the batch). Once a filter or transport passes control
// of the batch to the next handler, it cannot depend on the contents of // of the batch to the next handler, it cannot depend on the contents of
// this struct anymore, because the next handler may reuse it. // this struct anymore, because the next handler may reuse it.
typedef struct { struct grpc_handler_private_op_data {
void* extra_arg; void* extra_arg = nullptr;
grpc_closure closure; grpc_closure closure;
} grpc_handler_private_op_data; grpc_handler_private_op_data() { memset(&closure, 0, sizeof(closure)); }
};
typedef struct grpc_transport_stream_op_batch_payload typedef struct grpc_transport_stream_op_batch_payload
grpc_transport_stream_op_batch_payload; grpc_transport_stream_op_batch_payload;

@ -29,15 +29,15 @@
#include "src/core/lib/gpr/useful.h" #include "src/core/lib/gpr/useful.h"
#include "src/cpp/server/thread_pool_interface.h" #include "src/cpp/server/thread_pool_interface.h"
namespace grpc_impl { namespace grpc {
static std::vector<std::unique_ptr<grpc::ServerBuilderPlugin> (*)()>* static std::vector<std::unique_ptr<ServerBuilderPlugin> (*)()>*
g_plugin_factory_list; g_plugin_factory_list;
static gpr_once once_init_plugin_list = GPR_ONCE_INIT; static gpr_once once_init_plugin_list = GPR_ONCE_INIT;
static void do_plugin_list_init(void) { static void do_plugin_list_init(void) {
g_plugin_factory_list = g_plugin_factory_list =
new std::vector<std::unique_ptr<grpc::ServerBuilderPlugin> (*)()>(); new std::vector<std::unique_ptr<ServerBuilderPlugin> (*)()>();
} }
ServerBuilder::ServerBuilder() ServerBuilder::ServerBuilder()
@ -67,29 +67,29 @@ ServerBuilder::~ServerBuilder() {
} }
} }
std::unique_ptr<grpc::ServerCompletionQueue> ServerBuilder::AddCompletionQueue( std::unique_ptr<ServerCompletionQueue> ServerBuilder::AddCompletionQueue(
bool is_frequently_polled) { bool is_frequently_polled) {
grpc::ServerCompletionQueue* cq = new grpc::ServerCompletionQueue( ServerCompletionQueue* cq = new ServerCompletionQueue(
GRPC_CQ_NEXT, GRPC_CQ_NEXT,
is_frequently_polled ? GRPC_CQ_DEFAULT_POLLING : GRPC_CQ_NON_LISTENING, is_frequently_polled ? GRPC_CQ_DEFAULT_POLLING : GRPC_CQ_NON_LISTENING,
nullptr); nullptr);
cqs_.push_back(cq); cqs_.push_back(cq);
return std::unique_ptr<grpc::ServerCompletionQueue>(cq); return std::unique_ptr<ServerCompletionQueue>(cq);
} }
ServerBuilder& ServerBuilder::RegisterService(grpc::Service* service) { ServerBuilder& ServerBuilder::RegisterService(Service* service) {
services_.emplace_back(new NamedService(service)); services_.emplace_back(new NamedService(service));
return *this; return *this;
} }
ServerBuilder& ServerBuilder::RegisterService(const grpc::string& addr, ServerBuilder& ServerBuilder::RegisterService(const grpc::string& addr,
grpc::Service* service) { Service* service) {
services_.emplace_back(new NamedService(addr, service)); services_.emplace_back(new NamedService(addr, service));
return *this; return *this;
} }
ServerBuilder& ServerBuilder::RegisterAsyncGenericService( ServerBuilder& ServerBuilder::RegisterAsyncGenericService(
grpc::AsyncGenericService* service) { AsyncGenericService* service) {
if (generic_service_ || callback_generic_service_) { if (generic_service_ || callback_generic_service_) {
gpr_log(GPR_ERROR, gpr_log(GPR_ERROR,
"Adding multiple generic services is unsupported for now. " "Adding multiple generic services is unsupported for now. "
@ -102,7 +102,7 @@ ServerBuilder& ServerBuilder::RegisterAsyncGenericService(
} }
ServerBuilder& ServerBuilder::experimental_type::RegisterCallbackGenericService( ServerBuilder& ServerBuilder::experimental_type::RegisterCallbackGenericService(
grpc::experimental::CallbackGenericService* service) { experimental::CallbackGenericService* service) {
if (builder_->generic_service_ || builder_->callback_generic_service_) { if (builder_->generic_service_ || builder_->callback_generic_service_) {
gpr_log(GPR_ERROR, gpr_log(GPR_ERROR,
"Adding multiple generic services is unsupported for now. " "Adding multiple generic services is unsupported for now. "
@ -115,7 +115,7 @@ ServerBuilder& ServerBuilder::experimental_type::RegisterCallbackGenericService(
} }
ServerBuilder& ServerBuilder::SetOption( ServerBuilder& ServerBuilder::SetOption(
std::unique_ptr<grpc::ServerBuilderOption> option) { std::unique_ptr<ServerBuilderOption> option) {
options_.push_back(std::move(option)); options_.push_back(std::move(option));
return *this; return *this;
} }
@ -174,8 +174,8 @@ ServerBuilder& ServerBuilder::SetResourceQuota(
} }
ServerBuilder& ServerBuilder::AddListeningPort( ServerBuilder& ServerBuilder::AddListeningPort(
const grpc::string& addr_uri, const grpc::string& addr_uri, std::shared_ptr<ServerCredentials> creds,
std::shared_ptr<grpc::ServerCredentials> creds, int* selected_port) { int* selected_port) {
const grpc::string uri_scheme = "dns:"; const grpc::string uri_scheme = "dns:";
grpc::string addr = addr_uri; grpc::string addr = addr_uri;
if (addr_uri.compare(0, uri_scheme.size(), uri_scheme) == 0) { if (addr_uri.compare(0, uri_scheme.size(), uri_scheme) == 0) {
@ -188,8 +188,8 @@ ServerBuilder& ServerBuilder::AddListeningPort(
return *this; return *this;
} }
std::unique_ptr<grpc::Server> ServerBuilder::BuildAndStart() { std::unique_ptr<Server> ServerBuilder::BuildAndStart() {
grpc::ChannelArguments args; ChannelArguments args;
for (auto option = options_.begin(); option != options_.end(); ++option) { for (auto option = options_.begin(); option != options_.end(); ++option) {
(*option)->UpdateArguments(&args); (*option)->UpdateArguments(&args);
(*option)->UpdatePlugins(&plugins_); (*option)->UpdatePlugins(&plugins_);
@ -251,10 +251,9 @@ std::unique_ptr<grpc::Server> ServerBuilder::BuildAndStart() {
// This is different from the completion queues added to the server via // This is different from the completion queues added to the server via
// ServerBuilder's AddCompletionQueue() method (those completion queues // ServerBuilder's AddCompletionQueue() method (those completion queues
// are in 'cqs_' member variable of ServerBuilder object) // are in 'cqs_' member variable of ServerBuilder object)
std::shared_ptr<std::vector<std::unique_ptr<grpc::ServerCompletionQueue>>> std::shared_ptr<std::vector<std::unique_ptr<ServerCompletionQueue>>>
sync_server_cqs( sync_server_cqs(std::make_shared<
std::make_shared< std::vector<std::unique_ptr<ServerCompletionQueue>>>());
std::vector<std::unique_ptr<grpc::ServerCompletionQueue>>>());
bool has_frequently_polled_cqs = false; bool has_frequently_polled_cqs = false;
for (auto it = cqs_.begin(); it != cqs_.end(); ++it) { for (auto it = cqs_.begin(); it != cqs_.end(); ++it) {
@ -283,7 +282,7 @@ std::unique_ptr<grpc::Server> ServerBuilder::BuildAndStart() {
// Create completion queues to listen to incoming rpc requests // Create completion queues to listen to incoming rpc requests
for (int i = 0; i < sync_server_settings_.num_cqs; i++) { for (int i = 0; i < sync_server_settings_.num_cqs; i++) {
sync_server_cqs->emplace_back( sync_server_cqs->emplace_back(
new grpc::ServerCompletionQueue(GRPC_CQ_NEXT, polling_type, nullptr)); new ServerCompletionQueue(GRPC_CQ_NEXT, polling_type, nullptr));
} }
} }
@ -304,13 +303,13 @@ std::unique_ptr<grpc::Server> ServerBuilder::BuildAndStart() {
gpr_log(GPR_INFO, "Callback server."); gpr_log(GPR_INFO, "Callback server.");
} }
std::unique_ptr<grpc::Server> server(new grpc::Server( std::unique_ptr<Server> server(new Server(
max_receive_message_size_, &args, sync_server_cqs, max_receive_message_size_, &args, sync_server_cqs,
sync_server_settings_.min_pollers, sync_server_settings_.max_pollers, sync_server_settings_.min_pollers, sync_server_settings_.max_pollers,
sync_server_settings_.cq_timeout_msec, resource_quota_, sync_server_settings_.cq_timeout_msec, resource_quota_,
std::move(interceptor_creators_))); std::move(interceptor_creators_)));
grpc::ServerInitializer* initializer = server->initializer(); ServerInitializer* initializer = server->initializer();
// Register all the completion queues with the server. i.e // Register all the completion queues with the server. i.e
// 1. sync_server_cqs: internal completion queues created IF this is a sync // 1. sync_server_cqs: internal completion queues created IF this is a sync
@ -394,7 +393,7 @@ std::unique_ptr<grpc::Server> ServerBuilder::BuildAndStart() {
} }
void ServerBuilder::InternalAddPluginFactory( void ServerBuilder::InternalAddPluginFactory(
std::unique_ptr<grpc::ServerBuilderPlugin> (*CreatePlugin)()) { std::unique_ptr<ServerBuilderPlugin> (*CreatePlugin)()) {
gpr_once_init(&once_init_plugin_list, do_plugin_list_init); gpr_once_init(&once_init_plugin_list, do_plugin_list_init);
(*g_plugin_factory_list).push_back(CreatePlugin); (*g_plugin_factory_list).push_back(CreatePlugin);
} }
@ -409,4 +408,4 @@ ServerBuilder& ServerBuilder::EnableWorkaround(grpc_workaround_list id) {
} }
} }
} // namespace grpc_impl } // namespace grpc

@ -0,0 +1,7 @@
<!-- This file is generated -->
<Project>
<PropertyGroup>
<GrpcCsharpVersion>1.19.1</GrpcCsharpVersion>
<GoogleProtobufVersion>3.6.1</GoogleProtobufVersion>
</PropertyGroup>
</Project>

@ -16,6 +16,8 @@
#endregion #endregion
using System.Collections.Generic;
using System.Linq;
using System.Reflection; // UWYU: Object.GetType() extension. using System.Reflection; // UWYU: Object.GetType() extension.
using Microsoft.Build.Framework; using Microsoft.Build.Framework;
using Moq; using Moq;
@ -30,6 +32,7 @@ namespace Grpc.Tools.Tests
{ {
public string LastPathToTool { get; private set; } public string LastPathToTool { get; private set; }
public string[] LastResponseFile { get; private set; } public string[] LastResponseFile { get; private set; }
public List<string> StdErrMessages { get; } = new List<string>();
protected override int ExecuteTool(string pathToTool, protected override int ExecuteTool(string pathToTool,
string response, string response,
@ -45,8 +48,13 @@ namespace Grpc.Tools.Tests
LastPathToTool = pathToTool; LastPathToTool = pathToTool;
LastResponseFile = response.Remove(response.Length - 1).Split('\n'); LastResponseFile = response.Remove(response.Length - 1).Split('\n');
foreach (string message in StdErrMessages)
{
LogEventsFromTextOutput(message, MessageImportance.High);
}
// Do not run the tool, but pretend it ran successfully. // Do not run the tool, but pretend it ran successfully.
return 0; return StdErrMessages.Any() ? -1 : 0;
} }
}; };

@ -175,5 +175,86 @@ namespace Grpc.Tools.Tests
Assert.That(_task.LastResponseFile, Assert.That(_task.LastResponseFile,
Does.Contain("--csharp_out=" + expect)); Does.Contain("--csharp_out=" + expect));
} }
[TestCase(
"../Protos/greet.proto(19) : warning in column=5 : warning : When enum name is stripped and label is PascalCased (Zero) this value label conflicts with Zero.",
"../Protos/greet.proto",
19,
5,
"warning : When enum name is stripped and label is PascalCased (Zero) this value label conflicts with Zero.")]
[TestCase(
"../Protos/greet.proto: warning: Import google/protobuf/empty.proto but not used.",
"../Protos/greet.proto",
0,
0,
"Import google/protobuf/empty.proto but not used.")]
[TestCase("../Protos/greet.proto(14) : error in column=10: \"name\" is already defined in \"Greet.HelloRequest\".", null, 0, 0, null)]
[TestCase("../Protos/greet.proto: Import \"google / protobuf / empty.proto\" was listed twice.", null, 0, 0, null)]
public void WarningsParsed(string stderr, string file, int line, int col, string message)
{
_task.StdErrMessages.Add(stderr);
_mockEngine
.Setup(me => me.LogWarningEvent(It.IsAny<BuildWarningEventArgs>()))
.Callback((BuildWarningEventArgs e) => {
if (file != null)
{
Assert.AreEqual(file, e.File);
Assert.AreEqual(line, e.LineNumber);
Assert.AreEqual(col, e.ColumnNumber);
Assert.AreEqual(message, e.Message);
}
else
{
Assert.Fail($"Error logged by build engine:\n{e.Message}");
}
});
bool result = _task.Execute();
Assert.IsFalse(result);
}
[TestCase(
"../Protos/greet.proto(14) : error in column=10: \"name\" is already defined in \"Greet.HelloRequest\".",
"../Protos/greet.proto",
14,
10,
"\"name\" is already defined in \"Greet.HelloRequest\".")]
[TestCase(
"../Protos/greet.proto: Import \"google / protobuf / empty.proto\" was listed twice.",
"../Protos/greet.proto",
0,
0,
"Import \"google / protobuf / empty.proto\" was listed twice.")]
[TestCase("../Protos/greet.proto(19) : warning in column=5 : warning : When enum name is stripped and label is PascalCased (Zero) this value label conflicts with Zero.", null, 0, 0, null)]
[TestCase("../Protos/greet.proto: warning: Import google/protobuf/empty.proto but not used.", null, 0, 0, null)]
public void ErrorsParsed(string stderr, string file, int line, int col, string message)
{
_task.StdErrMessages.Add(stderr);
_mockEngine
.Setup(me => me.LogErrorEvent(It.IsAny<BuildErrorEventArgs>()))
.Callback((BuildErrorEventArgs e) => {
if (file != null)
{
Assert.AreEqual(file, e.File);
Assert.AreEqual(line, e.LineNumber);
Assert.AreEqual(col, e.ColumnNumber);
Assert.AreEqual(message, e.Message);
}
else
{
// Ignore expected error
// "protoc/protoc.exe" existed with code -1.
if (!e.Message.EndsWith("exited with code -1."))
{
Assert.Fail($"Error logged by build engine:\n{e.Message}");
}
}
});
bool result = _task.Execute();
Assert.IsFalse(result);
}
}; };
} }

@ -16,7 +16,10 @@
#endregion #endregion
using System;
using System.Collections.Generic;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
using Microsoft.Build.Framework; using Microsoft.Build.Framework;
using Microsoft.Build.Utilities; using Microsoft.Build.Utilities;
@ -123,6 +126,110 @@ namespace Grpc.Tools
"javanano", "js", "objc", "javanano", "js", "objc",
"php", "python", "ruby" }; "php", "python", "ruby" };
static readonly TimeSpan s_regexTimeout = TimeSpan.FromMilliseconds(100);
static readonly List<ErrorListFilter> s_errorListFilters = new List<ErrorListFilter>()
{
// Example warning with location
//../Protos/greet.proto(19) : warning in column=5 : warning : When enum name is stripped and label is PascalCased (Zero),
// this value label conflicts with Zero. This will make the proto fail to compile for some languages, such as C#.
new ErrorListFilter
{
Pattern = new Regex(
pattern: "(?'FILENAME'.+)\\((?'LINE'\\d+)\\) ?: ?warning in column=(?'COLUMN'\\d+) ?: ?(?'TEXT'.*)",
options: RegexOptions.Compiled | RegexOptions.IgnoreCase,
matchTimeout: s_regexTimeout),
LogAction = (log, match) =>
{
int.TryParse(match.Groups["LINE"].Value, out var line);
int.TryParse(match.Groups["COLUMN"].Value, out var column);
log.LogWarning(
subcategory: null,
warningCode: null,
helpKeyword: null,
file: match.Groups["FILENAME"].Value,
lineNumber: line,
columnNumber: column,
endLineNumber: 0,
endColumnNumber: 0,
message: match.Groups["TEXT"].Value);
}
},
// Example error with location
//../Protos/greet.proto(14) : error in column=10: "name" is already defined in "Greet.HelloRequest".
new ErrorListFilter
{
Pattern = new Regex(
pattern: "(?'FILENAME'.+)\\((?'LINE'\\d+)\\) ?: ?error in column=(?'COLUMN'\\d+) ?: ?(?'TEXT'.*)",
options: RegexOptions.Compiled | RegexOptions.IgnoreCase,
matchTimeout: s_regexTimeout),
LogAction = (log, match) =>
{
int.TryParse(match.Groups["LINE"].Value, out var line);
int.TryParse(match.Groups["COLUMN"].Value, out var column);
log.LogError(
subcategory: null,
errorCode: null,
helpKeyword: null,
file: match.Groups["FILENAME"].Value,
lineNumber: line,
columnNumber: column,
endLineNumber: 0,
endColumnNumber: 0,
message: match.Groups["TEXT"].Value);
}
},
// Example warning without location
//../Protos/greet.proto: warning: Import google/protobuf/empty.proto but not used.
new ErrorListFilter
{
Pattern = new Regex(
pattern: "(?'FILENAME'.+): ?warning: ?(?'TEXT'.*)",
options: RegexOptions.Compiled | RegexOptions.IgnoreCase,
matchTimeout: s_regexTimeout),
LogAction = (log, match) =>
{
log.LogWarning(
subcategory: null,
warningCode: null,
helpKeyword: null,
file: match.Groups["FILENAME"].Value,
lineNumber: 0,
columnNumber: 0,
endLineNumber: 0,
endColumnNumber: 0,
message: match.Groups["TEXT"].Value);
}
},
// Example error without location
//../Protos/greet.proto: Import "google/protobuf/empty.proto" was listed twice.
new ErrorListFilter
{
Pattern = new Regex(
pattern: "(?'FILENAME'.+): ?(?'TEXT'.*)",
options: RegexOptions.Compiled | RegexOptions.IgnoreCase,
matchTimeout: s_regexTimeout),
LogAction = (log, match) =>
{
log.LogError(
subcategory: null,
errorCode: null,
helpKeyword: null,
file: match.Groups["FILENAME"].Value,
lineNumber: 0,
columnNumber: 0,
endLineNumber: 0,
endColumnNumber: 0,
message: match.Groups["TEXT"].Value);
}
}
};
/// <summary> /// <summary>
/// Code generator. /// Code generator.
/// </summary> /// </summary>
@ -406,6 +513,22 @@ namespace Grpc.Tools
base.LogToolCommand(printer.ToString()); base.LogToolCommand(printer.ToString());
} }
protected override void LogEventsFromTextOutput(string singleLine, MessageImportance messageImportance)
{
foreach (ErrorListFilter filter in s_errorListFilters)
{
Match match = filter.Pattern.Match(singleLine);
if (match.Success)
{
filter.LogAction(Log, match);
return;
}
}
base.LogEventsFromTextOutput(singleLine, messageImportance);
}
// Main task entry point. // Main task entry point.
public override bool Execute() public override bool Execute()
{ {
@ -438,5 +561,11 @@ namespace Grpc.Tools
return true; return true;
} }
class ErrorListFilter
{
public Regex Pattern { get; set; }
public Action<TaskLoggingHelper, Match> LogAction { get; set; }
}
}; };
} }

@ -271,7 +271,6 @@
GrpcPluginExe="%(_Protobuf_OutOfDateProto.GrpcPluginExe)" GrpcPluginExe="%(_Protobuf_OutOfDateProto.GrpcPluginExe)"
GrpcOutputDir="%(_Protobuf_OutOfDateProto.GrpcOutputDir)" GrpcOutputDir="%(_Protobuf_OutOfDateProto.GrpcOutputDir)"
GrpcOutputOptions="%(_Protobuf_OutOfDateProto._GrpcOutputOptions)" GrpcOutputOptions="%(_Protobuf_OutOfDateProto._GrpcOutputOptions)"
LogStandardErrorAsError="true"
> >
<Output TaskParameter="GeneratedFiles" ItemName="_Protobuf_GeneratedFiles"/> <Output TaskParameter="GeneratedFiles" ItemName="_Protobuf_GeneratedFiles"/>
</ProtoCompile> </ProtoCompile>

@ -3,7 +3,8 @@
{ {
"src": [ "src": [
{ {
"files": ["Grpc.Core/Grpc.Core.csproj", "files": ["Grpc.Core.Api/Grpc.Core.Api.csproj",
"Grpc.Core/Grpc.Core.csproj",
"Grpc.Auth/Grpc.Auth.csproj", "Grpc.Auth/Grpc.Auth.csproj",
"Grpc.Core.Testing/Grpc.Core.Testing.csproj", "Grpc.Core.Testing/Grpc.Core.Testing.csproj",
"Grpc.HealthCheck/Grpc.HealthCheck.csproj", "Grpc.HealthCheck/Grpc.HealthCheck.csproj",

@ -101,7 +101,7 @@ Pod::Spec.new do |s|
s.preserve_paths = plugin s.preserve_paths = plugin
# Restrict the protoc version to the one supported by this plugin. # Restrict the protoc version to the one supported by this plugin.
s.dependency '!ProtoCompiler', '3.6.0' s.dependency '!ProtoCompiler', '3.6.1'
# For the Protobuf dependency not to complain: # For the Protobuf dependency not to complain:
s.ios.deployment_target = '7.0' s.ios.deployment_target = '7.0'
s.osx.deployment_target = '10.9' s.osx.deployment_target = '10.9'

@ -36,7 +36,7 @@ Pod::Spec.new do |s|
# exclamation mark ensures that other "regular" pods will be able to find it as it'll be installed # exclamation mark ensures that other "regular" pods will be able to find it as it'll be installed
# before them. # before them.
s.name = '!ProtoCompiler' s.name = '!ProtoCompiler'
v = '3.6.0' v = '3.6.1'
s.version = v s.version = v
s.summary = 'The Protobuf Compiler (protoc) generates Objective-C files from .proto files' s.summary = 'The Protobuf Compiler (protoc) generates Objective-C files from .proto files'
s.description = <<-DESC s.description = <<-DESC
@ -112,6 +112,7 @@ Pod::Spec.new do |s|
# For the Protobuf dependency not to complain: # For the Protobuf dependency not to complain:
s.ios.deployment_target = '7.0' s.ios.deployment_target = '7.0'
s.osx.deployment_target = '10.9' s.osx.deployment_target = '10.9'
s.tvos.deployment_target = '10.0'
# This is only for local development of protoc: If the Podfile brings this pod from a local # This is only for local development of protoc: If the Podfile brings this pod from a local
# directory using `:path`, CocoaPods won't download the zip file and so the compiler won't be # directory using `:path`, CocoaPods won't download the zip file and so the compiler won't be

@ -79,7 +79,7 @@ Pod::Spec.new do |s|
:commit => "b29b21a81b32ec273f118f589f46d56ad3332420", :commit => "b29b21a81b32ec273f118f589f46d56ad3332420",
} }
s.ios.deployment_target = '5.0' s.ios.deployment_target = '7.0'
s.osx.deployment_target = '10.7' s.osx.deployment_target = '10.7'
s.tvos.deployment_target = '10.0' s.tvos.deployment_target = '10.0'

@ -30,18 +30,19 @@ cdef grpc_event _next(grpc_completion_queue *c_completion_queue, deadline):
else: else:
c_deadline = _timespec_from_time(deadline) c_deadline = _timespec_from_time(deadline)
with nogil:
while True: while True:
with nogil:
c_timeout = gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), c_increment) c_timeout = gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), c_increment)
if gpr_time_cmp(c_timeout, c_deadline) > 0: if gpr_time_cmp(c_timeout, c_deadline) > 0:
c_timeout = c_deadline c_timeout = c_deadline
c_event = grpc_completion_queue_next(c_completion_queue, c_timeout, NULL) c_event = grpc_completion_queue_next(c_completion_queue, c_timeout, NULL)
if (c_event.type != GRPC_QUEUE_TIMEOUT or if (c_event.type != GRPC_QUEUE_TIMEOUT or
gpr_time_cmp(c_timeout, c_deadline) == 0): gpr_time_cmp(c_timeout, c_deadline) == 0):
break break
# Handle any signals # Handle any signals
with gil:
cpython.PyErr_CheckSignals() cpython.PyErr_CheckSignals()
return c_event return c_event

@ -699,6 +699,7 @@ CORE_SOURCE_FILES = [
'third_party/cares/cares/ares_strcasecmp.c', 'third_party/cares/cares/ares_strcasecmp.c',
'third_party/cares/cares/ares_strdup.c', 'third_party/cares/cares/ares_strdup.c',
'third_party/cares/cares/ares_strerror.c', 'third_party/cares/cares/ares_strerror.c',
'third_party/cares/cares/ares_strsplit.c',
'third_party/cares/cares/ares_timeout.c', 'third_party/cares/cares/ares_timeout.c',
'third_party/cares/cares/ares_version.c', 'third_party/cares/cares/ares_version.c',
'third_party/cares/cares/ares_writev.c', 'third_party/cares/cares/ares_writev.c',

@ -61,6 +61,8 @@
def grpc_test_util_files(libs): def grpc_test_util_files(libs):
out = grpc_lib_files(libs, ("grpc_test_util",), ("src", "headers")) out = grpc_lib_files(libs, ("grpc_test_util",), ("src", "headers"))
excl = grpc_private_files(libs) excl = grpc_private_files(libs)
# Subprocess is not supported in tvOS and not needed by our tests.
excl += ["test/core/util/subprocess_posix.cc"]
return [file for file in out if not file in excl] return [file for file in out if not file in excl]
def end2end_tests_files(libs): def end2end_tests_files(libs):

@ -103,7 +103,7 @@
s.preserve_paths = plugin s.preserve_paths = plugin
# Restrict the protoc version to the one supported by this plugin. # Restrict the protoc version to the one supported by this plugin.
s.dependency '!ProtoCompiler', '3.6.0' s.dependency '!ProtoCompiler', '3.6.1'
# For the Protobuf dependency not to complain: # For the Protobuf dependency not to complain:
s.ios.deployment_target = '7.0' s.ios.deployment_target = '7.0'
s.osx.deployment_target = '10.9' s.osx.deployment_target = '10.9'

@ -84,7 +84,7 @@
:commit => "b29b21a81b32ec273f118f589f46d56ad3332420", :commit => "b29b21a81b32ec273f118f589f46d56ad3332420",
} }
s.ios.deployment_target = '5.0' s.ios.deployment_target = '7.0'
s.osx.deployment_target = '10.7' s.osx.deployment_target = '10.7'
s.tvos.deployment_target = '10.0' s.tvos.deployment_target = '10.0'

@ -79,7 +79,10 @@ class TestScenario {
static std::ostream& operator<<(std::ostream& out, static std::ostream& operator<<(std::ostream& out,
const TestScenario& scenario) { const TestScenario& scenario) {
return out << "TestScenario{callback_server=" return out << "TestScenario{callback_server="
<< (scenario.callback_server ? "true" : "false") << "}"; << (scenario.callback_server ? "true" : "false") << ",protocol="
<< (scenario.protocol == Protocol::INPROC ? "INPROC" : "TCP")
<< ",intercept=" << (scenario.use_interceptors ? "true" : "false")
<< ",creds=" << scenario.credentials_type << "}";
} }
void TestScenario::Log() const { void TestScenario::Log() const {

@ -24,7 +24,7 @@ apt-get install -t jessie-backports -y libssl-dev
# Install c-ares # Install c-ares
cd third_party/cares/cares cd third_party/cares/cares
git fetch origin git fetch origin
git checkout cares-1_13_0 git checkout cares-1_15_0
mkdir -p cmake/build mkdir -p cmake/build
cd cmake/build cd cmake/build
cmake -DCMAKE_BUILD_TYPE=Release ../.. cmake -DCMAKE_BUILD_TYPE=Release ../..

@ -1 +1 @@
Subproject commit 3be1924221e1326df520f8498d704a5c4c8d0cce Subproject commit e982924acee7f7313b4baa4ee5ec000c5e373c30

@ -112,6 +112,7 @@ cc_library(
"ares_send.c", "ares_send.c",
"ares_strcasecmp.c", "ares_strcasecmp.c",
"ares_strdup.c", "ares_strdup.c",
"ares_strsplit.c",
"ares_strerror.c", "ares_strerror.c",
"ares_timeout.c", "ares_timeout.c",
"ares_version.c", "ares_version.c",
@ -141,6 +142,7 @@ cc_library(
"ares_setup.h", "ares_setup.h",
"ares_strcasecmp.h", "ares_strcasecmp.h",
"ares_strdup.h", "ares_strdup.h",
"ares_strsplit.h",
"ares_version.h", "ares_version.h",
"bitncmp.h", "bitncmp.h",
"config-win32.h", "config-win32.h",

@ -338,6 +338,9 @@
/* Define to 1 if you have the ws2tcpip.h header file. */ /* Define to 1 if you have the ws2tcpip.h header file. */
/* #undef HAVE_WS2TCPIP_H */ /* #undef HAVE_WS2TCPIP_H */
/* Define if __system_property_get exists. */
/* #undef HAVE___SYSTEM_PROPERTY_GET */
/* Define to 1 if you need the malloc.h header file even with stdlib.h */ /* Define to 1 if you need the malloc.h header file even with stdlib.h */
/* #undef NEED_MALLOC_H */ /* #undef NEED_MALLOC_H */

@ -333,6 +333,9 @@
/* Define to 1 if you have the ws2tcpip.h header file. */ /* Define to 1 if you have the ws2tcpip.h header file. */
/* #undef HAVE_WS2TCPIP_H */ /* #undef HAVE_WS2TCPIP_H */
/* Define if __system_property_get exists. */
/* #undef HAVE___SYSTEM_PROPERTY_GET */
/* Define to 1 if you need the malloc.h header file even with stdlib.h */ /* Define to 1 if you need the malloc.h header file even with stdlib.h */
/* #undef NEED_MALLOC_H */ /* #undef NEED_MALLOC_H */

@ -338,6 +338,9 @@
/* Define to 1 if you have the ws2tcpip.h header file. */ /* Define to 1 if you have the ws2tcpip.h header file. */
/* #undef HAVE_WS2TCPIP_H */ /* #undef HAVE_WS2TCPIP_H */
/* Define if __system_property_get exists. */
/* #undef HAVE___SYSTEM_PROPERTY_GET */
/* Define to the sub-directory where libtool stores uninstalled libraries. */ /* Define to the sub-directory where libtool stores uninstalled libraries. */
#define LT_OBJDIR ".libs/" #define LT_OBJDIR ".libs/"

@ -338,6 +338,9 @@
/* Define to 1 if you have the ws2tcpip.h header file. */ /* Define to 1 if you have the ws2tcpip.h header file. */
/* #undef HAVE_WS2TCPIP_H */ /* #undef HAVE_WS2TCPIP_H */
/* Define if __system_property_get exists. */
/* #undef HAVE___SYSTEM_PROPERTY_GET */
/* Define to 1 if you need the malloc.h header file even with stdlib.h */ /* Define to 1 if you need the malloc.h header file even with stdlib.h */
/* #undef NEED_MALLOC_H */ /* #undef NEED_MALLOC_H */

@ -338,6 +338,9 @@
/* Define to 1 if you have the ws2tcpip.h header file. */ /* Define to 1 if you have the ws2tcpip.h header file. */
/* #undef HAVE_WS2TCPIP_H */ /* #undef HAVE_WS2TCPIP_H */
/* Define if __system_property_get exists. */
/* #undef HAVE___SYSTEM_PROPERTY_GET */
/* Define to the sub-directory where libtool stores uninstalled libraries. */ /* Define to the sub-directory where libtool stores uninstalled libraries. */
#define LT_OBJDIR ".libs/" #define LT_OBJDIR ".libs/"

@ -331,6 +331,9 @@
/* Define to 1 if you have the ws2tcpip.h header file. */ /* Define to 1 if you have the ws2tcpip.h header file. */
#define HAVE_WS2TCPIP_H #define HAVE_WS2TCPIP_H
/* Define if __system_property_get exists. */
/* #undef HAVE___SYSTEM_PROPERTY_GET */
/* Define to 1 if you need the malloc.h header file even with stdlib.h */ /* Define to 1 if you need the malloc.h header file even with stdlib.h */
/* #undef NEED_MALLOC_H */ /* #undef NEED_MALLOC_H */

@ -1001,7 +1001,6 @@ include/grpcpp/security/credentials.h \
include/grpcpp/security/server_credentials.h \ include/grpcpp/security/server_credentials.h \
include/grpcpp/server.h \ include/grpcpp/server.h \
include/grpcpp/server_builder.h \ include/grpcpp/server_builder.h \
include/grpcpp/server_builder_impl.h \
include/grpcpp/server_context.h \ include/grpcpp/server_context.h \
include/grpcpp/server_posix.h \ include/grpcpp/server_posix.h \
include/grpcpp/support/async_stream.h \ include/grpcpp/support/async_stream.h \

@ -1003,7 +1003,6 @@ include/grpcpp/security/credentials.h \
include/grpcpp/security/server_credentials.h \ include/grpcpp/security/server_credentials.h \
include/grpcpp/server.h \ include/grpcpp/server.h \
include/grpcpp/server_builder.h \ include/grpcpp/server_builder.h \
include/grpcpp/server_builder_impl.h \
include/grpcpp/server_context.h \ include/grpcpp/server_context.h \
include/grpcpp/server_posix.h \ include/grpcpp/server_posix.h \
include/grpcpp/support/async_stream.h \ include/grpcpp/support/async_stream.h \

@ -7468,6 +7468,7 @@
"third_party/cares/cares/ares_setup.h", "third_party/cares/cares/ares_setup.h",
"third_party/cares/cares/ares_strcasecmp.h", "third_party/cares/cares/ares_strcasecmp.h",
"third_party/cares/cares/ares_strdup.h", "third_party/cares/cares/ares_strdup.h",
"third_party/cares/cares/ares_strsplit.h",
"third_party/cares/cares/ares_version.h", "third_party/cares/cares/ares_version.h",
"third_party/cares/cares/bitncmp.h", "third_party/cares/cares/bitncmp.h",
"third_party/cares/cares/config-win32.h", "third_party/cares/cares/config-win32.h",
@ -10089,7 +10090,6 @@
"include/grpcpp/security/server_credentials.h", "include/grpcpp/security/server_credentials.h",
"include/grpcpp/server.h", "include/grpcpp/server.h",
"include/grpcpp/server_builder.h", "include/grpcpp/server_builder.h",
"include/grpcpp/server_builder_impl.h",
"include/grpcpp/server_context.h", "include/grpcpp/server_context.h",
"include/grpcpp/server_posix.h", "include/grpcpp/server_posix.h",
"include/grpcpp/support/async_stream.h", "include/grpcpp/support/async_stream.h",
@ -10199,7 +10199,6 @@
"include/grpcpp/security/server_credentials.h", "include/grpcpp/security/server_credentials.h",
"include/grpcpp/server.h", "include/grpcpp/server.h",
"include/grpcpp/server_builder.h", "include/grpcpp/server_builder.h",
"include/grpcpp/server_builder_impl.h",
"include/grpcpp/server_context.h", "include/grpcpp/server_context.h",
"include/grpcpp/server_posix.h", "include/grpcpp/server_posix.h",
"include/grpcpp/support/async_stream.h", "include/grpcpp/support/async_stream.h",

@ -335,7 +335,7 @@ class GoLanguage:
return {} return {}
def unimplemented_test_cases(self): def unimplemented_test_cases(self):
return _SKIP_COMPRESSION + _SKIP_COMPUTE_ENGINE_CHANNEL_CREDS return _SKIP_COMPRESSION
def unimplemented_test_cases_server(self): def unimplemented_test_cases_server(self):
return _SKIP_COMPRESSION return _SKIP_COMPRESSION
@ -887,7 +887,7 @@ def cloud_to_prod_jobspec(language,
'--custom_credentials_type=google_default_credentials' '--custom_credentials_type=google_default_credentials'
] ]
elif transport_security == 'compute_engine_channel_creds' and str( elif transport_security == 'compute_engine_channel_creds' and str(
language) in ['java', 'javaokhttp']: language) in ['go', 'java', 'javaokhttp']:
transport_security_options = [ transport_security_options = [
'--custom_credentials_type=compute_engine_channel_creds' '--custom_credentials_type=compute_engine_channel_creds'
] ]
@ -1465,7 +1465,7 @@ try:
transport_security= transport_security=
'google_default_credentials') 'google_default_credentials')
jobs.append(google_default_creds_test_job) jobs.append(google_default_creds_test_job)
if str(language) in ['java', 'javaokhttp']: if str(language) in ['go', 'java', 'javaokhttp']:
compute_engine_channel_creds_test_job = cloud_to_prod_jobspec( compute_engine_channel_creds_test_job = cloud_to_prod_jobspec(
language, language,
test_case, test_case,

@ -31,7 +31,7 @@ cat << EOF | awk '{ print $1 }' | sort > "$want_submodules"
73594cde8c9a52a102c4341c244c833aa61b9c06 third_party/bloaty (remotes/origin/wide-14-g73594cd) 73594cde8c9a52a102c4341c244c833aa61b9c06 third_party/bloaty (remotes/origin/wide-14-g73594cd)
b29b21a81b32ec273f118f589f46d56ad3332420 third_party/boringssl (remotes/origin/chromium-stable) b29b21a81b32ec273f118f589f46d56ad3332420 third_party/boringssl (remotes/origin/chromium-stable)
afc30d43eef92979b05776ec0963c9cede5fb80f third_party/boringssl-with-bazel (fips-20180716-116-gafc30d43e) afc30d43eef92979b05776ec0963c9cede5fb80f third_party/boringssl-with-bazel (fips-20180716-116-gafc30d43e)
3be1924221e1326df520f8498d704a5c4c8d0cce third_party/cares/cares (cares-1_13_0) e982924acee7f7313b4baa4ee5ec000c5e373c30 third_party/cares/cares (cares-1_15_0)
911001cdca003337bdb93fab32740cde61bafee3 third_party/data-plane-api (heads/master) 911001cdca003337bdb93fab32740cde61bafee3 third_party/data-plane-api (heads/master)
28f50e0fed19872e0fd50dd23ce2ee8cd759338e third_party/gflags (v2.2.0-5-g30dbc81) 28f50e0fed19872e0fd50dd23ce2ee8cd759338e third_party/gflags (v2.2.0-5-g30dbc81)
80ed4d0bbf65d57cc267dfc63bd2584557f11f9b third_party/googleapis (common-protos-1_3_1-915-g80ed4d0bb) 80ed4d0bbf65d57cc267dfc63bd2584557f11f9b third_party/googleapis (common-protos-1_3_1-915-g80ed4d0bb)

Loading…
Cancel
Save