grpc 1.16.0 → 1.17.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +299 -133
- data/include/grpc/grpc.h +11 -1
- data/include/grpc/grpc_posix.h +0 -8
- data/include/grpc/impl/codegen/grpc_types.h +3 -0
- data/src/core/ext/filters/client_channel/client_channel.cc +336 -345
- data/src/core/ext/filters/client_channel/client_channel.h +6 -2
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -1
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -7
- data/src/core/ext/filters/client_channel/health/health.pb.c +23 -0
- data/src/core/ext/filters/client_channel/health/health.pb.h +73 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +652 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.h +173 -0
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -1
- data/src/core/ext/filters/client_channel/http_proxy.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +17 -14
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +15 -11
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +21 -15
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +18 -10
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +12 -9
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +19 -8
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +1832 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +36 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h +36 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +107 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc +85 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h +72 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +307 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +89 -0
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +5 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +4 -0
- data/src/core/ext/filters/client_channel/parse_address.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +19 -22
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +41 -39
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +3 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +4 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +15 -2
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -1
- data/src/core/ext/filters/client_channel/resolver_factory.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +384 -0
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +146 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +361 -103
- data/src/core/ext/filters/client_channel/subchannel.h +14 -8
- data/src/core/ext/filters/deadline/deadline_filter.cc +19 -23
- data/src/core/ext/filters/deadline/deadline_filter.h +9 -13
- data/src/core/ext/filters/http/client/http_client_filter.cc +29 -19
- data/src/core/ext/filters/http/client_authority_filter.cc +2 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +28 -16
- data/src/core/ext/filters/http/server/http_server_filter.cc +31 -20
- data/src/core/ext/filters/message_size/message_size_filter.cc +50 -45
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +13 -6
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +58 -8
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +175 -173
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -10
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -12
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +28 -25
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -12
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +12 -9
- data/src/core/ext/transport/chttp2/transport/internal.h +109 -94
- data/src/core/ext/transport/chttp2/transport/parsing.cc +4 -2
- data/src/core/ext/transport/inproc/inproc_transport.cc +280 -300
- data/src/core/lib/channel/channel_stack.cc +5 -4
- data/src/core/lib/channel/channel_stack.h +4 -4
- data/src/core/lib/channel/channel_stack_builder.cc +14 -2
- data/src/core/lib/channel/channel_stack_builder.h +8 -0
- data/src/core/lib/channel/channel_trace.cc +6 -2
- data/src/core/lib/channel/channelz.cc +137 -5
- data/src/core/lib/channel/channelz.h +32 -6
- data/src/core/lib/channel/channelz_registry.cc +134 -28
- data/src/core/lib/channel/channelz_registry.h +25 -3
- data/src/core/lib/channel/context.h +4 -4
- data/src/core/lib/channel/handshaker.cc +7 -6
- data/src/core/lib/channel/handshaker.h +7 -8
- data/src/core/lib/channel/handshaker_factory.cc +3 -2
- data/src/core/lib/channel/handshaker_factory.h +2 -0
- data/src/core/lib/channel/handshaker_registry.cc +6 -2
- data/src/core/lib/channel/handshaker_registry.h +1 -0
- data/src/core/lib/gpr/arena.cc +84 -37
- data/src/core/lib/gpr/arena.h +2 -0
- data/src/core/lib/gpr/mpscq.h +4 -2
- data/src/core/lib/gprpp/inlined_vector.h +8 -0
- data/src/core/lib/gprpp/ref_counted.h +105 -18
- data/src/core/lib/gprpp/ref_counted_ptr.h +11 -0
- data/src/core/lib/http/httpcli_security_connector.cc +7 -4
- data/src/core/lib/iomgr/call_combiner.cc +2 -0
- data/src/core/lib/iomgr/call_combiner.h +2 -2
- data/src/core/lib/iomgr/closure.h +1 -0
- data/src/core/lib/iomgr/error.cc +16 -31
- data/src/core/lib/iomgr/error.h +29 -4
- data/src/core/lib/iomgr/error_internal.h +0 -2
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -3
- data/src/core/lib/iomgr/ev_posix.cc +0 -2
- data/src/core/lib/iomgr/polling_entity.h +4 -4
- data/src/core/lib/iomgr/resource_quota.cc +64 -10
- data/src/core/lib/iomgr/resource_quota.h +21 -6
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +11 -5
- data/src/core/lib/iomgr/tcp_client_custom.cc +14 -3
- data/src/core/lib/iomgr/tcp_client_posix.cc +2 -0
- data/src/core/lib/iomgr/tcp_posix.cc +4 -2
- data/src/core/lib/iomgr/timer_manager.cc +1 -1
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -4
- data/src/core/lib/security/context/security_context.cc +20 -13
- data/src/core/lib/security/context/security_context.h +27 -19
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +1 -1
- data/src/core/lib/security/credentials/credentials.h +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +39 -54
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +3 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +1 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +1 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -0
- data/src/core/lib/security/security_connector/{alts_security_connector.cc → alts/alts_security_connector.cc} +10 -9
- data/src/core/lib/security/security_connector/{alts_security_connector.h → alts/alts_security_connector.h} +3 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +310 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +42 -0
- data/src/core/lib/security/security_connector/{local_security_connector.cc → local/local_security_connector.cc} +4 -3
- data/src/core/lib/security/security_connector/{local_security_connector.h → local/local_security_connector.h} +3 -3
- data/src/core/lib/security/security_connector/security_connector.cc +4 -1039
- data/src/core/lib/security/security_connector/security_connector.h +6 -114
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +474 -0
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +77 -0
- data/src/core/lib/security/security_connector/ssl_utils.cc +345 -0
- data/src/core/lib/security/security_connector/ssl_utils.h +93 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +28 -17
- data/src/core/lib/security/transport/secure_endpoint.cc +51 -41
- data/src/core/lib/security/transport/security_handshaker.cc +6 -7
- data/src/core/lib/security/transport/server_auth_filter.cc +39 -31
- data/src/core/lib/surface/call.cc +100 -80
- data/src/core/lib/surface/call.h +4 -0
- data/src/core/lib/surface/channel.cc +27 -13
- data/src/core/lib/surface/channel.h +4 -3
- data/src/core/lib/surface/completion_queue.cc +8 -1
- data/src/core/lib/surface/init.cc +1 -0
- data/src/core/lib/surface/server.cc +111 -46
- data/src/core/lib/surface/server.h +16 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +4 -2
- data/src/core/lib/transport/metadata.cc +3 -2
- data/src/core/lib/transport/metadata.h +3 -2
- data/src/core/lib/transport/metadata_batch.cc +1 -0
- data/src/core/lib/transport/metadata_batch.h +4 -2
- data/src/core/lib/transport/static_metadata.cc +225 -221
- data/src/core/lib/transport/static_metadata.h +74 -71
- data/src/core/lib/transport/transport.h +44 -26
- data/src/core/{ext/filters/client_channel → lib/uri}/uri_parser.cc +1 -1
- data/src/core/{ext/filters/client_channel → lib/uri}/uri_parser.h +3 -3
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -4
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +356 -77
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +46 -36
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +83 -0
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +73 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +122 -175
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +33 -22
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +38 -10
- data/src/core/tsi/transport_security.cc +18 -1
- data/src/core/tsi/transport_security.h +2 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -3
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options.proto +28 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -3
- metadata +58 -40
- data/src/core/ext/filters/client_channel/method_params.cc +0 -178
- data/src/core/ext/filters/client_channel/method_params.h +0 -78
- data/src/core/tsi/alts/handshaker/alts_tsi_event.cc +0 -75
- data/src/core/tsi/alts/handshaker/alts_tsi_event.h +0 -93
- data/src/core/tsi/alts_transport_security.cc +0 -65
- data/src/core/tsi/alts_transport_security.h +0 -47
@@ -0,0 +1,89 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2018 gRPC authors.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*
|
17
|
+
*/
|
18
|
+
|
19
|
+
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_LOAD_BALANCER_API_H
|
20
|
+
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_LOAD_BALANCER_API_H
|
21
|
+
|
22
|
+
#include <grpc/support/port_platform.h>
|
23
|
+
|
24
|
+
#include <grpc/slice_buffer.h>
|
25
|
+
|
26
|
+
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h"
|
27
|
+
#include "src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h"
|
28
|
+
#include "src/core/ext/filters/client_channel/lb_policy_factory.h"
|
29
|
+
|
30
|
+
#define XDS_SERVICE_NAME_MAX_LENGTH 128
|
31
|
+
|
32
|
+
typedef grpc_lb_v1_Server_ip_address_t xds_grpclb_ip_address;
|
33
|
+
typedef grpc_lb_v1_LoadBalanceRequest xds_grpclb_request;
|
34
|
+
typedef grpc_lb_v1_InitialLoadBalanceResponse xds_grpclb_initial_response;
|
35
|
+
typedef grpc_lb_v1_Server xds_grpclb_server;
|
36
|
+
typedef google_protobuf_Duration xds_grpclb_duration;
|
37
|
+
typedef google_protobuf_Timestamp xds_grpclb_timestamp;
|
38
|
+
|
39
|
+
typedef struct {
|
40
|
+
xds_grpclb_server** servers;
|
41
|
+
size_t num_servers;
|
42
|
+
} xds_grpclb_serverlist;
|
43
|
+
|
44
|
+
/** Create a request for a gRPC LB service under \a lb_service_name */
|
45
|
+
xds_grpclb_request* xds_grpclb_request_create(const char* lb_service_name);
|
46
|
+
xds_grpclb_request* xds_grpclb_load_report_request_create_locked(
|
47
|
+
grpc_core::XdsLbClientStats* client_stats);
|
48
|
+
|
49
|
+
/** Protocol Buffers v3-encode \a request */
|
50
|
+
grpc_slice xds_grpclb_request_encode(const xds_grpclb_request* request);
|
51
|
+
|
52
|
+
/** Destroy \a request */
|
53
|
+
void xds_grpclb_request_destroy(xds_grpclb_request* request);
|
54
|
+
|
55
|
+
/** Parse (ie, decode) the bytes in \a encoded_xds_grpclb_response as a \a
|
56
|
+
* xds_grpclb_initial_response */
|
57
|
+
xds_grpclb_initial_response* xds_grpclb_initial_response_parse(
|
58
|
+
grpc_slice encoded_xds_grpclb_response);
|
59
|
+
|
60
|
+
/** Parse the list of servers from an encoded \a xds_grpclb_response */
|
61
|
+
xds_grpclb_serverlist* xds_grpclb_response_parse_serverlist(
|
62
|
+
grpc_slice encoded_xds_grpclb_response);
|
63
|
+
|
64
|
+
/** Return a copy of \a sl. The caller is responsible for calling \a
|
65
|
+
* xds_grpclb_destroy_serverlist on the returned copy. */
|
66
|
+
xds_grpclb_serverlist* xds_grpclb_serverlist_copy(
|
67
|
+
const xds_grpclb_serverlist* sl);
|
68
|
+
|
69
|
+
bool xds_grpclb_serverlist_equals(const xds_grpclb_serverlist* lhs,
|
70
|
+
const xds_grpclb_serverlist* rhs);
|
71
|
+
|
72
|
+
bool xds_grpclb_server_equals(const xds_grpclb_server* lhs,
|
73
|
+
const xds_grpclb_server* rhs);
|
74
|
+
|
75
|
+
/** Destroy \a serverlist */
|
76
|
+
void xds_grpclb_destroy_serverlist(xds_grpclb_serverlist* serverlist);
|
77
|
+
|
78
|
+
/** Compare \a lhs against \a rhs and return 0 if \a lhs and \a rhs are equal,
|
79
|
+
* < 0 if \a lhs represents a duration shorter than \a rhs and > 0 otherwise */
|
80
|
+
int xds_grpclb_duration_compare(const xds_grpclb_duration* lhs,
|
81
|
+
const xds_grpclb_duration* rhs);
|
82
|
+
|
83
|
+
grpc_millis xds_grpclb_duration_to_millis(xds_grpclb_duration* duration_pb);
|
84
|
+
|
85
|
+
/** Destroy \a initial_response */
|
86
|
+
void xds_grpclb_initial_response_destroy(xds_grpclb_initial_response* response);
|
87
|
+
|
88
|
+
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_LOAD_BALANCER_API_H \
|
89
|
+
*/
|
@@ -25,7 +25,7 @@
|
|
25
25
|
|
26
26
|
#include "src/core/ext/filters/client_channel/client_channel_factory.h"
|
27
27
|
#include "src/core/ext/filters/client_channel/lb_policy.h"
|
28
|
-
#include "src/core/
|
28
|
+
#include "src/core/lib/uri/uri_parser.h"
|
29
29
|
|
30
30
|
//
|
31
31
|
// representation of an LB address
|
@@ -94,4 +94,9 @@ LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
|
|
94
94
|
return factory->CreateLoadBalancingPolicy(args);
|
95
95
|
}
|
96
96
|
|
97
|
+
bool LoadBalancingPolicyRegistry::LoadBalancingPolicyExists(const char* name) {
|
98
|
+
GPR_ASSERT(g_state != nullptr);
|
99
|
+
return g_state->GetLoadBalancingPolicyFactory(name) != nullptr;
|
100
|
+
}
|
101
|
+
|
97
102
|
} // namespace grpc_core
|
@@ -47,6 +47,10 @@ class LoadBalancingPolicyRegistry {
|
|
47
47
|
/// Creates an LB policy of the type specified by \a name.
|
48
48
|
static OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
|
49
49
|
const char* name, const LoadBalancingPolicy::Args& args);
|
50
|
+
|
51
|
+
/// Returns true if the LB policy factory specified by \a name exists in this
|
52
|
+
/// registry.
|
53
|
+
static bool LoadBalancingPolicyExists(const char* name);
|
50
54
|
};
|
51
55
|
|
52
56
|
} // namespace grpc_core
|
@@ -23,8 +23,8 @@
|
|
23
23
|
|
24
24
|
#include <stddef.h>
|
25
25
|
|
26
|
-
#include "src/core/ext/filters/client_channel/uri_parser.h"
|
27
26
|
#include "src/core/lib/iomgr/resolve_address.h"
|
27
|
+
#include "src/core/lib/uri/uri_parser.h"
|
28
28
|
|
29
29
|
/** Populate \a resolved_addr from \a uri, whose path is expected to contain a
|
30
30
|
* unix socket path. Returns true upon success. */
|
@@ -120,6 +120,8 @@ class AresDnsResolver : public Resolver {
|
|
120
120
|
grpc_lb_addresses* lb_addresses_ = nullptr;
|
121
121
|
/// currently resolving service config
|
122
122
|
char* service_config_json_ = nullptr;
|
123
|
+
// has shutdown been initiated
|
124
|
+
bool shutdown_initiated_ = false;
|
123
125
|
};
|
124
126
|
|
125
127
|
AresDnsResolver::AresDnsResolver(const ResolverArgs& args)
|
@@ -197,11 +199,12 @@ void AresDnsResolver::ResetBackoffLocked() {
|
|
197
199
|
}
|
198
200
|
|
199
201
|
void AresDnsResolver::ShutdownLocked() {
|
202
|
+
shutdown_initiated_ = true;
|
200
203
|
if (have_next_resolution_timer_) {
|
201
204
|
grpc_timer_cancel(&next_resolution_timer_);
|
202
205
|
}
|
203
206
|
if (pending_request_ != nullptr) {
|
204
|
-
|
207
|
+
grpc_cancel_ares_request_locked(pending_request_);
|
205
208
|
}
|
206
209
|
if (next_completion_ != nullptr) {
|
207
210
|
*target_result_ = nullptr;
|
@@ -213,9 +216,13 @@ void AresDnsResolver::ShutdownLocked() {
|
|
213
216
|
|
214
217
|
void AresDnsResolver::OnNextResolutionLocked(void* arg, grpc_error* error) {
|
215
218
|
AresDnsResolver* r = static_cast<AresDnsResolver*>(arg);
|
219
|
+
GRPC_CARES_TRACE_LOG(
|
220
|
+
"%p re-resolution timer fired. error: %s. shutdown_initiated_: %d", r,
|
221
|
+
grpc_error_string(error), r->shutdown_initiated_);
|
216
222
|
r->have_next_resolution_timer_ = false;
|
217
|
-
if (error == GRPC_ERROR_NONE) {
|
223
|
+
if (error == GRPC_ERROR_NONE && !r->shutdown_initiated_) {
|
218
224
|
if (!r->resolving_) {
|
225
|
+
GRPC_CARES_TRACE_LOG("%p start resolving due to re-resolution timer", r);
|
219
226
|
r->StartResolvingLocked();
|
220
227
|
}
|
221
228
|
}
|
@@ -298,15 +305,15 @@ void AresDnsResolver::OnResolvedLocked(void* arg, grpc_error* error) {
|
|
298
305
|
grpc_channel_args* result = nullptr;
|
299
306
|
GPR_ASSERT(r->resolving_);
|
300
307
|
r->resolving_ = false;
|
308
|
+
gpr_free(r->pending_request_);
|
301
309
|
r->pending_request_ = nullptr;
|
302
310
|
if (r->lb_addresses_ != nullptr) {
|
303
|
-
static const char* args_to_remove[
|
311
|
+
static const char* args_to_remove[1];
|
304
312
|
size_t num_args_to_remove = 0;
|
305
|
-
grpc_arg
|
313
|
+
grpc_arg args_to_add[2];
|
306
314
|
size_t num_args_to_add = 0;
|
307
|
-
|
315
|
+
args_to_add[num_args_to_add++] =
|
308
316
|
grpc_lb_addresses_create_channel_arg(r->lb_addresses_);
|
309
|
-
grpc_core::UniquePtr<grpc_core::ServiceConfig> service_config;
|
310
317
|
char* service_config_string = nullptr;
|
311
318
|
if (r->service_config_json_ != nullptr) {
|
312
319
|
service_config_string = ChooseServiceConfig(r->service_config_json_);
|
@@ -315,31 +322,19 @@ void AresDnsResolver::OnResolvedLocked(void* arg, grpc_error* error) {
|
|
315
322
|
gpr_log(GPR_INFO, "selected service config choice: %s",
|
316
323
|
service_config_string);
|
317
324
|
args_to_remove[num_args_to_remove++] = GRPC_ARG_SERVICE_CONFIG;
|
318
|
-
|
325
|
+
args_to_add[num_args_to_add++] = grpc_channel_arg_string_create(
|
319
326
|
(char*)GRPC_ARG_SERVICE_CONFIG, service_config_string);
|
320
|
-
service_config =
|
321
|
-
grpc_core::ServiceConfig::Create(service_config_string);
|
322
|
-
if (service_config != nullptr) {
|
323
|
-
const char* lb_policy_name =
|
324
|
-
service_config->GetLoadBalancingPolicyName();
|
325
|
-
if (lb_policy_name != nullptr) {
|
326
|
-
args_to_remove[num_args_to_remove++] = GRPC_ARG_LB_POLICY_NAME;
|
327
|
-
new_args[num_args_to_add++] = grpc_channel_arg_string_create(
|
328
|
-
(char*)GRPC_ARG_LB_POLICY_NAME,
|
329
|
-
const_cast<char*>(lb_policy_name));
|
330
|
-
}
|
331
|
-
}
|
332
327
|
}
|
333
328
|
}
|
334
329
|
result = grpc_channel_args_copy_and_add_and_remove(
|
335
|
-
r->channel_args_, args_to_remove, num_args_to_remove,
|
330
|
+
r->channel_args_, args_to_remove, num_args_to_remove, args_to_add,
|
336
331
|
num_args_to_add);
|
337
332
|
gpr_free(service_config_string);
|
338
333
|
grpc_lb_addresses_destroy(r->lb_addresses_);
|
339
334
|
// Reset backoff state so that we start from the beginning when the
|
340
335
|
// next request gets triggered.
|
341
336
|
r->backoff_.Reset();
|
342
|
-
} else {
|
337
|
+
} else if (!r->shutdown_initiated_) {
|
343
338
|
const char* msg = grpc_error_string(error);
|
344
339
|
gpr_log(GPR_DEBUG, "dns resolution failed: %s", msg);
|
345
340
|
grpc_millis next_try = r->backoff_.NextAttemptTime();
|
@@ -473,7 +468,9 @@ void grpc_resolver_dns_ares_init() {
|
|
473
468
|
GRPC_LOG_IF_ERROR("ares_library_init() failed", error);
|
474
469
|
return;
|
475
470
|
}
|
476
|
-
default_resolver
|
471
|
+
if (default_resolver == nullptr) {
|
472
|
+
default_resolver = grpc_resolve_address_impl;
|
473
|
+
}
|
477
474
|
grpc_set_resolver_impl(&ares_resolver);
|
478
475
|
grpc_core::ResolverRegistry::Builder::RegisterResolverFactory(
|
479
476
|
grpc_core::UniquePtr<grpc_core::ResolverFactory>(
|
@@ -144,12 +144,12 @@ static void grpc_ares_request_unref_locked(grpc_ares_request* r) {
|
|
144
144
|
void grpc_ares_complete_request_locked(grpc_ares_request* r) {
|
145
145
|
/* Invoke on_done callback and destroy the
|
146
146
|
request */
|
147
|
+
r->ev_driver = nullptr;
|
147
148
|
grpc_lb_addresses* lb_addrs = *(r->lb_addrs_out);
|
148
149
|
if (lb_addrs != nullptr) {
|
149
150
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs);
|
150
151
|
}
|
151
152
|
GRPC_CLOSURE_SCHED(r->on_done, r->error);
|
152
|
-
gpr_free(r);
|
153
153
|
}
|
154
154
|
|
155
155
|
static grpc_ares_hostbyname_request* create_hostbyname_request_locked(
|
@@ -356,15 +356,12 @@ done:
|
|
356
356
|
grpc_ares_request_unref_locked(r);
|
357
357
|
}
|
358
358
|
|
359
|
-
|
360
|
-
|
361
|
-
const char*
|
362
|
-
|
363
|
-
grpc_lb_addresses** addrs, bool check_grpclb, char** service_config_json,
|
364
|
-
grpc_combiner* combiner) {
|
359
|
+
void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
|
360
|
+
grpc_ares_request* r, const char* dns_server, const char* name,
|
361
|
+
const char* default_port, grpc_pollset_set* interested_parties,
|
362
|
+
bool check_grpclb, grpc_combiner* combiner) {
|
365
363
|
grpc_error* error = GRPC_ERROR_NONE;
|
366
364
|
grpc_ares_hostbyname_request* hr = nullptr;
|
367
|
-
grpc_ares_request* r = nullptr;
|
368
365
|
ares_channel* channel = nullptr;
|
369
366
|
/* TODO(zyc): Enable tracing after #9603 is checked in */
|
370
367
|
/* if (grpc_dns_trace) {
|
@@ -390,14 +387,6 @@ grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
|
|
390
387
|
}
|
391
388
|
port = gpr_strdup(default_port);
|
392
389
|
}
|
393
|
-
r = static_cast<grpc_ares_request*>(gpr_zalloc(sizeof(grpc_ares_request)));
|
394
|
-
r->ev_driver = nullptr;
|
395
|
-
r->on_done = on_done;
|
396
|
-
r->lb_addrs_out = addrs;
|
397
|
-
r->service_config_json_out = service_config_json;
|
398
|
-
r->success = false;
|
399
|
-
r->error = GRPC_ERROR_NONE;
|
400
|
-
r->pending_queries = 0;
|
401
390
|
error = grpc_ares_ev_driver_create_locked(&r->ev_driver, interested_parties,
|
402
391
|
combiner, r);
|
403
392
|
if (error != GRPC_ERROR_NONE) goto error_cleanup;
|
@@ -458,7 +447,7 @@ grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
|
|
458
447
|
on_srv_query_done_locked, r);
|
459
448
|
gpr_free(service_name);
|
460
449
|
}
|
461
|
-
if (
|
450
|
+
if (r->service_config_json_out != nullptr) {
|
462
451
|
grpc_ares_request_ref_locked(r);
|
463
452
|
char* config_name;
|
464
453
|
gpr_asprintf(&config_name, "_grpc_config.%s", host);
|
@@ -470,14 +459,12 @@ grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
|
|
470
459
|
grpc_ares_request_unref_locked(r);
|
471
460
|
gpr_free(host);
|
472
461
|
gpr_free(port);
|
473
|
-
return
|
462
|
+
return;
|
474
463
|
|
475
464
|
error_cleanup:
|
476
|
-
GRPC_CLOSURE_SCHED(on_done, error);
|
477
|
-
gpr_free(r);
|
465
|
+
GRPC_CLOSURE_SCHED(r->on_done, error);
|
478
466
|
gpr_free(host);
|
479
467
|
gpr_free(port);
|
480
|
-
return nullptr;
|
481
468
|
}
|
482
469
|
|
483
470
|
static bool inner_resolve_as_ip_literal_locked(const char* name,
|
@@ -536,21 +523,31 @@ static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
|
|
536
523
|
grpc_pollset_set* interested_parties, grpc_closure* on_done,
|
537
524
|
grpc_lb_addresses** addrs, bool check_grpclb, char** service_config_json,
|
538
525
|
grpc_combiner* combiner) {
|
526
|
+
grpc_ares_request* r =
|
527
|
+
static_cast<grpc_ares_request*>(gpr_zalloc(sizeof(grpc_ares_request)));
|
528
|
+
r->ev_driver = nullptr;
|
529
|
+
r->on_done = on_done;
|
530
|
+
r->lb_addrs_out = addrs;
|
531
|
+
r->service_config_json_out = service_config_json;
|
532
|
+
r->success = false;
|
533
|
+
r->error = GRPC_ERROR_NONE;
|
534
|
+
r->pending_queries = 0;
|
539
535
|
// Early out if the target is an ipv4 or ipv6 literal.
|
540
536
|
if (resolve_as_ip_literal_locked(name, default_port, addrs)) {
|
541
537
|
GRPC_CLOSURE_SCHED(on_done, GRPC_ERROR_NONE);
|
542
|
-
return
|
538
|
+
return r;
|
543
539
|
}
|
544
540
|
// Early out if the target is localhost and we're on Windows.
|
545
541
|
if (grpc_ares_maybe_resolve_localhost_manually_locked(name, default_port,
|
546
542
|
addrs)) {
|
547
543
|
GRPC_CLOSURE_SCHED(on_done, GRPC_ERROR_NONE);
|
548
|
-
return
|
544
|
+
return r;
|
549
545
|
}
|
550
546
|
// Look up name using c-ares lib.
|
551
|
-
|
552
|
-
dns_server, name, default_port, interested_parties,
|
553
|
-
|
547
|
+
grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
|
548
|
+
r, dns_server, name, default_port, interested_parties, check_grpclb,
|
549
|
+
combiner);
|
550
|
+
return r;
|
554
551
|
}
|
555
552
|
|
556
553
|
grpc_ares_request* (*grpc_dns_lookup_ares_locked)(
|
@@ -559,14 +556,16 @@ grpc_ares_request* (*grpc_dns_lookup_ares_locked)(
|
|
559
556
|
grpc_lb_addresses** addrs, bool check_grpclb, char** service_config_json,
|
560
557
|
grpc_combiner* combiner) = grpc_dns_lookup_ares_locked_impl;
|
561
558
|
|
562
|
-
void
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
}
|
559
|
+
static void grpc_cancel_ares_request_locked_impl(grpc_ares_request* r) {
|
560
|
+
GPR_ASSERT(r != nullptr);
|
561
|
+
if (r->ev_driver != nullptr) {
|
562
|
+
grpc_ares_ev_driver_shutdown_locked(r->ev_driver);
|
567
563
|
}
|
568
564
|
}
|
569
565
|
|
566
|
+
void (*grpc_cancel_ares_request_locked)(grpc_ares_request* r) =
|
567
|
+
grpc_cancel_ares_request_locked_impl;
|
568
|
+
|
570
569
|
grpc_error* grpc_ares_init(void) {
|
571
570
|
gpr_once_init(&g_basic_init, do_basic_init);
|
572
571
|
gpr_mu_lock(&g_init_mu);
|
@@ -603,20 +602,23 @@ typedef struct grpc_resolve_address_ares_request {
|
|
603
602
|
grpc_lb_addresses* lb_addrs;
|
604
603
|
/** closure to call when the resolve_address_ares request completes */
|
605
604
|
grpc_closure* on_resolve_address_done;
|
606
|
-
/** a closure wrapping
|
607
|
-
|
608
|
-
grpc_closure
|
605
|
+
/** a closure wrapping on_resolve_address_done, which should be invoked when
|
606
|
+
the grpc_dns_lookup_ares_locked operation is done. */
|
607
|
+
grpc_closure on_dns_lookup_done_locked;
|
609
608
|
/* target name */
|
610
609
|
const char* name;
|
611
610
|
/* default port to use if none is specified */
|
612
611
|
const char* default_port;
|
613
612
|
/* pollset_set to be driven by */
|
614
613
|
grpc_pollset_set* interested_parties;
|
614
|
+
/* underlying ares_request that the query is performed on */
|
615
|
+
grpc_ares_request* ares_request;
|
615
616
|
} grpc_resolve_address_ares_request;
|
616
617
|
|
617
|
-
static void
|
618
|
+
static void on_dns_lookup_done_locked(void* arg, grpc_error* error) {
|
618
619
|
grpc_resolve_address_ares_request* r =
|
619
620
|
static_cast<grpc_resolve_address_ares_request*>(arg);
|
621
|
+
gpr_free(r->ares_request);
|
620
622
|
grpc_resolved_addresses** resolved_addresses = r->addrs_out;
|
621
623
|
if (r->lb_addrs == nullptr || r->lb_addrs->num_addresses == 0) {
|
622
624
|
*resolved_addresses = nullptr;
|
@@ -643,9 +645,9 @@ static void grpc_resolve_address_invoke_dns_lookup_ares_locked(
|
|
643
645
|
void* arg, grpc_error* unused_error) {
|
644
646
|
grpc_resolve_address_ares_request* r =
|
645
647
|
static_cast<grpc_resolve_address_ares_request*>(arg);
|
646
|
-
grpc_dns_lookup_ares_locked(
|
648
|
+
r->ares_request = grpc_dns_lookup_ares_locked(
|
647
649
|
nullptr /* dns_server */, r->name, r->default_port, r->interested_parties,
|
648
|
-
&r->
|
650
|
+
&r->on_dns_lookup_done_locked, &r->lb_addrs, false /* check_grpclb */,
|
649
651
|
nullptr /* service_config_json */, r->combiner);
|
650
652
|
}
|
651
653
|
|
@@ -660,8 +662,8 @@ static void grpc_resolve_address_ares_impl(const char* name,
|
|
660
662
|
r->combiner = grpc_combiner_create();
|
661
663
|
r->addrs_out = addrs;
|
662
664
|
r->on_resolve_address_done = on_done;
|
663
|
-
GRPC_CLOSURE_INIT(&r->
|
664
|
-
|
665
|
+
GRPC_CLOSURE_INIT(&r->on_dns_lookup_done_locked, on_dns_lookup_done_locked, r,
|
666
|
+
grpc_combiner_scheduler(r->combiner));
|
665
667
|
r->name = name;
|
666
668
|
r->default_port = default_port;
|
667
669
|
r->interested_parties = interested_parties;
|
@@ -54,7 +54,8 @@ extern void (*grpc_resolve_address_ares)(const char* name,
|
|
54
54
|
port in \a name. grpc_ares_init() must be called at least once before this
|
55
55
|
function. \a on_done may be called directly in this function without being
|
56
56
|
scheduled with \a exec_ctx, so it must not try to acquire locks that are
|
57
|
-
being held by the caller.
|
57
|
+
being held by the caller. The returned grpc_ares_request object is owned
|
58
|
+
by the caller and it is safe to free after on_done is called back. */
|
58
59
|
extern grpc_ares_request* (*grpc_dns_lookup_ares_locked)(
|
59
60
|
const char* dns_server, const char* name, const char* default_port,
|
60
61
|
grpc_pollset_set* interested_parties, grpc_closure* on_done,
|
@@ -62,7 +63,7 @@ extern grpc_ares_request* (*grpc_dns_lookup_ares_locked)(
|
|
62
63
|
char** service_config_json, grpc_combiner* combiner);
|
63
64
|
|
64
65
|
/* Cancel the pending grpc_ares_request \a request */
|
65
|
-
void
|
66
|
+
extern void (*grpc_cancel_ares_request_locked)(grpc_ares_request* request);
|
66
67
|
|
67
68
|
/* Initialize gRPC ares wrapper. Must be called at least once before
|
68
69
|
grpc_resolve_address_ares(). */
|
@@ -40,7 +40,10 @@ grpc_ares_request* (*grpc_dns_lookup_ares_locked)(
|
|
40
40
|
grpc_lb_addresses** addrs, bool check_grpclb, char** service_config_json,
|
41
41
|
grpc_combiner* combiner) = grpc_dns_lookup_ares_locked_impl;
|
42
42
|
|
43
|
-
void
|
43
|
+
static void grpc_cancel_ares_request_locked_impl(grpc_ares_request* r) {}
|
44
|
+
|
45
|
+
void (*grpc_cancel_ares_request_locked)(grpc_ares_request* r) =
|
46
|
+
grpc_cancel_ares_request_locked_impl;
|
44
47
|
|
45
48
|
grpc_error* grpc_ares_init(void) { return GRPC_ERROR_NONE; }
|
46
49
|
|
@@ -103,7 +103,7 @@ void FakeResolver::NextLocked(grpc_channel_args** target_result,
|
|
103
103
|
}
|
104
104
|
|
105
105
|
void FakeResolver::RequestReresolutionLocked() {
|
106
|
-
if (reresolution_results_ != nullptr) {
|
106
|
+
if (reresolution_results_ != nullptr || return_failure_) {
|
107
107
|
grpc_channel_args_destroy(next_results_);
|
108
108
|
next_results_ = grpc_channel_args_copy(reresolution_results_);
|
109
109
|
MaybeFinishNextLocked();
|
@@ -141,6 +141,7 @@ struct SetResponseClosureArg {
|
|
141
141
|
grpc_closure set_response_closure;
|
142
142
|
FakeResolverResponseGenerator* generator;
|
143
143
|
grpc_channel_args* response;
|
144
|
+
bool immediate = true;
|
144
145
|
};
|
145
146
|
|
146
147
|
void FakeResolverResponseGenerator::SetResponseLocked(void* arg,
|
@@ -194,7 +195,7 @@ void FakeResolverResponseGenerator::SetFailureLocked(void* arg,
|
|
194
195
|
SetResponseClosureArg* closure_arg = static_cast<SetResponseClosureArg*>(arg);
|
195
196
|
FakeResolver* resolver = closure_arg->generator->resolver_;
|
196
197
|
resolver->return_failure_ = true;
|
197
|
-
resolver->MaybeFinishNextLocked();
|
198
|
+
if (closure_arg->immediate) resolver->MaybeFinishNextLocked();
|
198
199
|
Delete(closure_arg);
|
199
200
|
}
|
200
201
|
|
@@ -209,6 +210,18 @@ void FakeResolverResponseGenerator::SetFailure() {
|
|
209
210
|
GRPC_ERROR_NONE);
|
210
211
|
}
|
211
212
|
|
213
|
+
void FakeResolverResponseGenerator::SetFailureOnReresolution() {
|
214
|
+
GPR_ASSERT(resolver_ != nullptr);
|
215
|
+
SetResponseClosureArg* closure_arg = New<SetResponseClosureArg>();
|
216
|
+
closure_arg->generator = this;
|
217
|
+
closure_arg->immediate = false;
|
218
|
+
GRPC_CLOSURE_SCHED(
|
219
|
+
GRPC_CLOSURE_INIT(&closure_arg->set_response_closure, SetFailureLocked,
|
220
|
+
closure_arg,
|
221
|
+
grpc_combiner_scheduler(resolver_->combiner())),
|
222
|
+
GRPC_ERROR_NONE);
|
223
|
+
}
|
224
|
+
|
212
225
|
namespace {
|
213
226
|
|
214
227
|
static void* response_generator_arg_copy(void* p) {
|