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
data/src/core/lib/surface/call.h
CHANGED
@@ -81,6 +81,10 @@ grpc_call_error grpc_call_start_batch_and_execute(grpc_call* call,
|
|
81
81
|
size_t nops,
|
82
82
|
grpc_closure* closure);
|
83
83
|
|
84
|
+
/* gRPC core internal version of grpc_call_cancel that does not create
|
85
|
+
* exec_ctx. */
|
86
|
+
void grpc_call_cancel_internal(grpc_call* call);
|
87
|
+
|
84
88
|
/* Given the top call_element, get the call object. */
|
85
89
|
grpc_call* grpc_call_from_top_element(grpc_call_element* surface_element);
|
86
90
|
|
@@ -39,6 +39,7 @@
|
|
39
39
|
#include "src/core/lib/gprpp/memory.h"
|
40
40
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
41
41
|
#include "src/core/lib/iomgr/iomgr.h"
|
42
|
+
#include "src/core/lib/iomgr/resource_quota.h"
|
42
43
|
#include "src/core/lib/slice/slice_internal.h"
|
43
44
|
#include "src/core/lib/surface/api_trace.h"
|
44
45
|
#include "src/core/lib/surface/call.h"
|
@@ -63,6 +64,7 @@ struct grpc_channel {
|
|
63
64
|
grpc_compression_options compression_options;
|
64
65
|
|
65
66
|
gpr_atm call_size_estimate;
|
67
|
+
grpc_resource_user* resource_user;
|
66
68
|
|
67
69
|
gpr_mu registered_call_mu;
|
68
70
|
registered_call* registered_calls;
|
@@ -82,6 +84,8 @@ grpc_channel* grpc_channel_create_with_builder(
|
|
82
84
|
char* target = gpr_strdup(grpc_channel_stack_builder_get_target(builder));
|
83
85
|
grpc_channel_args* args = grpc_channel_args_copy(
|
84
86
|
grpc_channel_stack_builder_get_channel_arguments(builder));
|
87
|
+
grpc_resource_user* resource_user =
|
88
|
+
grpc_channel_stack_builder_get_resource_user(builder);
|
85
89
|
grpc_channel* channel;
|
86
90
|
if (channel_stack_type == GRPC_SERVER_CHANNEL) {
|
87
91
|
GRPC_STATS_INC_SERVER_CHANNELS_CREATED();
|
@@ -101,9 +105,11 @@ grpc_channel* grpc_channel_create_with_builder(
|
|
101
105
|
}
|
102
106
|
|
103
107
|
channel->target = target;
|
108
|
+
channel->resource_user = resource_user;
|
104
109
|
channel->is_client = grpc_channel_stack_type_is_client(channel_stack_type);
|
105
110
|
bool channelz_enabled = GRPC_ENABLE_CHANNELZ_DEFAULT;
|
106
|
-
size_t channel_tracer_max_memory =
|
111
|
+
size_t channel_tracer_max_memory =
|
112
|
+
GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT;
|
107
113
|
bool internal_channel = false;
|
108
114
|
// this creates the default ChannelNode. Different types of channels may
|
109
115
|
// override this to ensure a correct ChannelNode is created.
|
@@ -142,7 +148,6 @@ grpc_channel* grpc_channel_create_with_builder(
|
|
142
148
|
0x1; /* always support no compression */
|
143
149
|
} else if (0 == strcmp(args->args[i].key,
|
144
150
|
GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE)) {
|
145
|
-
GPR_ASSERT(channel_tracer_max_memory == 0);
|
146
151
|
const grpc_integer_options options = {
|
147
152
|
GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT, 0, INT_MAX};
|
148
153
|
channel_tracer_max_memory =
|
@@ -217,7 +222,8 @@ grpc_core::channelz::ChannelNode* grpc_channel_get_channelz_node(
|
|
217
222
|
grpc_channel* grpc_channel_create(const char* target,
|
218
223
|
const grpc_channel_args* input_args,
|
219
224
|
grpc_channel_stack_type channel_stack_type,
|
220
|
-
grpc_transport* optional_transport
|
225
|
+
grpc_transport* optional_transport,
|
226
|
+
grpc_resource_user* resource_user) {
|
221
227
|
grpc_channel_stack_builder* builder = grpc_channel_stack_builder_create();
|
222
228
|
const grpc_core::UniquePtr<char> default_authority =
|
223
229
|
get_default_authority(input_args);
|
@@ -227,11 +233,17 @@ grpc_channel* grpc_channel_create(const char* target,
|
|
227
233
|
grpc_channel_args_destroy(args);
|
228
234
|
grpc_channel_stack_builder_set_target(builder, target);
|
229
235
|
grpc_channel_stack_builder_set_transport(builder, optional_transport);
|
236
|
+
grpc_channel_stack_builder_set_resource_user(builder, resource_user);
|
230
237
|
if (!grpc_channel_init_create_stack(builder, channel_stack_type)) {
|
231
238
|
grpc_channel_stack_builder_destroy(builder);
|
239
|
+
if (resource_user != nullptr) {
|
240
|
+
grpc_resource_user_free(resource_user, GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
|
241
|
+
}
|
232
242
|
return nullptr;
|
233
243
|
}
|
234
|
-
|
244
|
+
grpc_channel* channel =
|
245
|
+
grpc_channel_create_with_builder(builder, channel_stack_type);
|
246
|
+
return channel;
|
235
247
|
}
|
236
248
|
|
237
249
|
size_t grpc_channel_get_call_size_estimate(grpc_channel* channel) {
|
@@ -310,8 +322,8 @@ static grpc_call* grpc_channel_create_call_internal(
|
|
310
322
|
}
|
311
323
|
|
312
324
|
grpc_call_create_args args;
|
313
|
-
memset(&args, 0, sizeof(args));
|
314
325
|
args.channel = channel;
|
326
|
+
args.server = nullptr;
|
315
327
|
args.parent = parent_call;
|
316
328
|
args.propagation_mask = propagation_mask;
|
317
329
|
args.cq = cq;
|
@@ -336,9 +348,8 @@ grpc_call* grpc_channel_create_call(grpc_channel* channel,
|
|
336
348
|
grpc_core::ExecCtx exec_ctx;
|
337
349
|
grpc_call* call = grpc_channel_create_call_internal(
|
338
350
|
channel, parent_call, propagation_mask, cq, nullptr,
|
339
|
-
|
340
|
-
host != nullptr ?
|
341
|
-
grpc_slice_ref_internal(*host))
|
351
|
+
grpc_mdelem_create(GRPC_MDSTR_PATH, method, nullptr),
|
352
|
+
host != nullptr ? grpc_mdelem_create(GRPC_MDSTR_AUTHORITY, *host, nullptr)
|
342
353
|
: GRPC_MDNULL,
|
343
354
|
grpc_timespec_to_millis_round_up(deadline));
|
344
355
|
|
@@ -347,14 +358,13 @@ grpc_call* grpc_channel_create_call(grpc_channel* channel,
|
|
347
358
|
|
348
359
|
grpc_call* grpc_channel_create_pollset_set_call(
|
349
360
|
grpc_channel* channel, grpc_call* parent_call, uint32_t propagation_mask,
|
350
|
-
grpc_pollset_set* pollset_set,
|
351
|
-
grpc_millis deadline, void* reserved) {
|
361
|
+
grpc_pollset_set* pollset_set, const grpc_slice& method,
|
362
|
+
const grpc_slice* host, grpc_millis deadline, void* reserved) {
|
352
363
|
GPR_ASSERT(!reserved);
|
353
364
|
return grpc_channel_create_call_internal(
|
354
365
|
channel, parent_call, propagation_mask, nullptr, pollset_set,
|
355
|
-
|
356
|
-
host != nullptr ?
|
357
|
-
grpc_slice_ref_internal(*host))
|
366
|
+
grpc_mdelem_create(GRPC_MDSTR_PATH, method, nullptr),
|
367
|
+
host != nullptr ? grpc_mdelem_create(GRPC_MDSTR_AUTHORITY, *host, nullptr)
|
358
368
|
: GRPC_MDNULL,
|
359
369
|
deadline);
|
360
370
|
}
|
@@ -443,6 +453,10 @@ static void destroy_channel(void* arg, grpc_error* error) {
|
|
443
453
|
GRPC_MDELEM_UNREF(rc->authority);
|
444
454
|
gpr_free(rc);
|
445
455
|
}
|
456
|
+
if (channel->resource_user != nullptr) {
|
457
|
+
grpc_resource_user_free(channel->resource_user,
|
458
|
+
GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
|
459
|
+
}
|
446
460
|
gpr_mu_destroy(&channel->registered_call_mu);
|
447
461
|
gpr_free(channel->target);
|
448
462
|
gpr_free(channel);
|
@@ -29,7 +29,8 @@
|
|
29
29
|
grpc_channel* grpc_channel_create(const char* target,
|
30
30
|
const grpc_channel_args* args,
|
31
31
|
grpc_channel_stack_type channel_stack_type,
|
32
|
-
grpc_transport* optional_transport
|
32
|
+
grpc_transport* optional_transport,
|
33
|
+
grpc_resource_user* resource_user = nullptr);
|
33
34
|
|
34
35
|
grpc_channel* grpc_channel_create_with_builder(
|
35
36
|
grpc_channel_stack_builder* builder,
|
@@ -45,8 +46,8 @@ grpc_channel* grpc_channel_create_with_builder(
|
|
45
46
|
value of \a propagation_mask (see propagation_bits.h for possible values) */
|
46
47
|
grpc_call* grpc_channel_create_pollset_set_call(
|
47
48
|
grpc_channel* channel, grpc_call* parent_call, uint32_t propagation_mask,
|
48
|
-
grpc_pollset_set* pollset_set,
|
49
|
-
grpc_millis deadline, void* reserved);
|
49
|
+
grpc_pollset_set* pollset_set, const grpc_slice& method,
|
50
|
+
const grpc_slice* host, grpc_millis deadline, void* reserved);
|
50
51
|
|
51
52
|
/** Get a (borrowed) pointer to this channels underlying channel stack */
|
52
53
|
grpc_channel_stack* grpc_channel_get_channel_stack(grpc_channel* channel);
|
@@ -79,6 +79,7 @@ typedef struct non_polling_worker {
|
|
79
79
|
|
80
80
|
typedef struct {
|
81
81
|
gpr_mu mu;
|
82
|
+
bool kicked_without_poller;
|
82
83
|
non_polling_worker* root;
|
83
84
|
grpc_closure* shutdown;
|
84
85
|
} non_polling_poller;
|
@@ -103,6 +104,10 @@ static grpc_error* non_polling_poller_work(grpc_pollset* pollset,
|
|
103
104
|
grpc_millis deadline) {
|
104
105
|
non_polling_poller* npp = reinterpret_cast<non_polling_poller*>(pollset);
|
105
106
|
if (npp->shutdown) return GRPC_ERROR_NONE;
|
107
|
+
if (npp->kicked_without_poller) {
|
108
|
+
npp->kicked_without_poller = false;
|
109
|
+
return GRPC_ERROR_NONE;
|
110
|
+
}
|
106
111
|
non_polling_worker w;
|
107
112
|
gpr_cv_init(&w.cv);
|
108
113
|
if (worker != nullptr) *worker = reinterpret_cast<grpc_pollset_worker*>(&w);
|
@@ -148,6 +153,8 @@ static grpc_error* non_polling_poller_kick(
|
|
148
153
|
w->kicked = true;
|
149
154
|
gpr_cv_signal(&w->cv);
|
150
155
|
}
|
156
|
+
} else {
|
157
|
+
p->kicked_without_poller = true;
|
151
158
|
}
|
152
159
|
return GRPC_ERROR_NONE;
|
153
160
|
}
|
@@ -852,8 +859,8 @@ static void cq_end_op_for_callback(
|
|
852
859
|
|
853
860
|
gpr_atm_no_barrier_fetch_add(&cqd->things_queued_ever, 1);
|
854
861
|
if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
|
855
|
-
cq_finish_shutdown_callback(cq);
|
856
862
|
gpr_mu_unlock(cq->mu);
|
863
|
+
cq_finish_shutdown_callback(cq);
|
857
864
|
} else {
|
858
865
|
gpr_mu_unlock(cq->mu);
|
859
866
|
}
|
@@ -47,6 +47,10 @@
|
|
47
47
|
|
48
48
|
grpc_core::TraceFlag grpc_server_channel_trace(false, "server_channel");
|
49
49
|
|
50
|
+
static void server_on_recv_initial_metadata(void* ptr, grpc_error* error);
|
51
|
+
static void server_recv_trailing_metadata_ready(void* user_data,
|
52
|
+
grpc_error* error);
|
53
|
+
|
50
54
|
namespace {
|
51
55
|
struct listener {
|
52
56
|
void* arg;
|
@@ -54,6 +58,7 @@ struct listener {
|
|
54
58
|
size_t pollset_count);
|
55
59
|
void (*destroy)(grpc_server* server, void* arg, grpc_closure* closure);
|
56
60
|
struct listener* next;
|
61
|
+
intptr_t socket_uuid;
|
57
62
|
grpc_closure destroy_done;
|
58
63
|
};
|
59
64
|
|
@@ -104,6 +109,7 @@ struct channel_data {
|
|
104
109
|
uint32_t registered_method_max_probes;
|
105
110
|
grpc_closure finish_destroy_channel_closure;
|
106
111
|
grpc_closure channel_connectivity_changed;
|
112
|
+
intptr_t socket_uuid;
|
107
113
|
};
|
108
114
|
|
109
115
|
typedef struct shutdown_tag {
|
@@ -126,38 +132,62 @@ typedef enum {
|
|
126
132
|
typedef struct request_matcher request_matcher;
|
127
133
|
|
128
134
|
struct call_data {
|
135
|
+
call_data(grpc_call_element* elem, const grpc_call_element_args& args)
|
136
|
+
: call(grpc_call_from_top_element(elem)),
|
137
|
+
call_combiner(args.call_combiner) {
|
138
|
+
GRPC_CLOSURE_INIT(&server_on_recv_initial_metadata,
|
139
|
+
::server_on_recv_initial_metadata, elem,
|
140
|
+
grpc_schedule_on_exec_ctx);
|
141
|
+
GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready,
|
142
|
+
server_recv_trailing_metadata_ready, elem,
|
143
|
+
grpc_schedule_on_exec_ctx);
|
144
|
+
}
|
145
|
+
~call_data() {
|
146
|
+
GPR_ASSERT(state != PENDING);
|
147
|
+
GRPC_ERROR_UNREF(recv_initial_metadata_error);
|
148
|
+
if (host_set) {
|
149
|
+
grpc_slice_unref_internal(host);
|
150
|
+
}
|
151
|
+
if (path_set) {
|
152
|
+
grpc_slice_unref_internal(path);
|
153
|
+
}
|
154
|
+
grpc_metadata_array_destroy(&initial_metadata);
|
155
|
+
grpc_byte_buffer_destroy(payload);
|
156
|
+
}
|
157
|
+
|
129
158
|
grpc_call* call;
|
130
159
|
|
131
|
-
gpr_atm state;
|
160
|
+
gpr_atm state = NOT_STARTED;
|
132
161
|
|
133
|
-
bool path_set;
|
134
|
-
bool host_set;
|
162
|
+
bool path_set = false;
|
163
|
+
bool host_set = false;
|
135
164
|
grpc_slice path;
|
136
165
|
grpc_slice host;
|
137
|
-
grpc_millis deadline;
|
166
|
+
grpc_millis deadline = GRPC_MILLIS_INF_FUTURE;
|
138
167
|
|
139
|
-
grpc_completion_queue* cq_new;
|
168
|
+
grpc_completion_queue* cq_new = nullptr;
|
140
169
|
|
141
|
-
grpc_metadata_batch* recv_initial_metadata;
|
142
|
-
uint32_t recv_initial_metadata_flags;
|
143
|
-
grpc_metadata_array initial_metadata
|
170
|
+
grpc_metadata_batch* recv_initial_metadata = nullptr;
|
171
|
+
uint32_t recv_initial_metadata_flags = 0;
|
172
|
+
grpc_metadata_array initial_metadata =
|
173
|
+
grpc_metadata_array(); // Zero-initialize the C struct.
|
144
174
|
|
145
|
-
request_matcher* matcher;
|
146
|
-
grpc_byte_buffer* payload;
|
175
|
+
request_matcher* matcher = nullptr;
|
176
|
+
grpc_byte_buffer* payload = nullptr;
|
147
177
|
|
148
178
|
grpc_closure got_initial_metadata;
|
149
179
|
grpc_closure server_on_recv_initial_metadata;
|
150
180
|
grpc_closure kill_zombie_closure;
|
151
181
|
grpc_closure* on_done_recv_initial_metadata;
|
152
182
|
grpc_closure recv_trailing_metadata_ready;
|
153
|
-
grpc_error* recv_initial_metadata_error;
|
183
|
+
grpc_error* recv_initial_metadata_error = GRPC_ERROR_NONE;
|
154
184
|
grpc_closure* original_recv_trailing_metadata_ready;
|
155
|
-
grpc_error* recv_trailing_metadata_error;
|
156
|
-
bool seen_recv_trailing_metadata_ready;
|
185
|
+
grpc_error* recv_trailing_metadata_error = GRPC_ERROR_NONE;
|
186
|
+
bool seen_recv_trailing_metadata_ready = false;
|
157
187
|
|
158
188
|
grpc_closure publish;
|
159
189
|
|
160
|
-
call_data* pending_next;
|
190
|
+
call_data* pending_next = nullptr;
|
161
191
|
grpc_call_combiner* call_combiner;
|
162
192
|
};
|
163
193
|
|
@@ -187,6 +217,8 @@ typedef struct {
|
|
187
217
|
struct grpc_server {
|
188
218
|
grpc_channel_args* channel_args;
|
189
219
|
|
220
|
+
grpc_resource_user* default_resource_user;
|
221
|
+
|
190
222
|
grpc_completion_queue** cqs;
|
191
223
|
grpc_pollset** pollsets;
|
192
224
|
size_t cq_count;
|
@@ -820,11 +852,16 @@ static void accept_stream(void* cd, grpc_transport* transport,
|
|
820
852
|
channel_data* chand = static_cast<channel_data*>(cd);
|
821
853
|
/* create a call */
|
822
854
|
grpc_call_create_args args;
|
823
|
-
memset(&args, 0, sizeof(args));
|
824
855
|
args.channel = chand->channel;
|
856
|
+
args.server = chand->server;
|
857
|
+
args.parent = nullptr;
|
858
|
+
args.propagation_mask = 0;
|
859
|
+
args.cq = nullptr;
|
860
|
+
args.pollset_set_alternative = nullptr;
|
825
861
|
args.server_transport_data = transport_server_data;
|
862
|
+
args.add_initial_metadata = nullptr;
|
863
|
+
args.add_initial_metadata_count = 0;
|
826
864
|
args.send_deadline = GRPC_MILLIS_INF_FUTURE;
|
827
|
-
args.server = chand->server;
|
828
865
|
grpc_call* call;
|
829
866
|
grpc_error* error = grpc_call_create(&args, &call);
|
830
867
|
grpc_call_element* elem =
|
@@ -836,8 +873,9 @@ static void accept_stream(void* cd, grpc_transport* transport,
|
|
836
873
|
}
|
837
874
|
call_data* calld = static_cast<call_data*>(elem->call_data);
|
838
875
|
grpc_op op;
|
839
|
-
memset(&op, 0, sizeof(op));
|
840
876
|
op.op = GRPC_OP_RECV_INITIAL_METADATA;
|
877
|
+
op.flags = 0;
|
878
|
+
op.reserved = nullptr;
|
841
879
|
op.data.recv_initial_metadata.recv_initial_metadata =
|
842
880
|
&calld->initial_metadata;
|
843
881
|
GRPC_CLOSURE_INIT(&calld->got_initial_metadata, got_initial_metadata, elem,
|
@@ -865,40 +903,18 @@ static void channel_connectivity_changed(void* cd, grpc_error* error) {
|
|
865
903
|
|
866
904
|
static grpc_error* init_call_elem(grpc_call_element* elem,
|
867
905
|
const grpc_call_element_args* args) {
|
868
|
-
call_data* calld = static_cast<call_data*>(elem->call_data);
|
869
906
|
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
870
|
-
memset(calld, 0, sizeof(call_data));
|
871
|
-
calld->deadline = GRPC_MILLIS_INF_FUTURE;
|
872
|
-
calld->call = grpc_call_from_top_element(elem);
|
873
|
-
calld->call_combiner = args->call_combiner;
|
874
|
-
|
875
|
-
GRPC_CLOSURE_INIT(&calld->server_on_recv_initial_metadata,
|
876
|
-
server_on_recv_initial_metadata, elem,
|
877
|
-
grpc_schedule_on_exec_ctx);
|
878
|
-
GRPC_CLOSURE_INIT(&calld->recv_trailing_metadata_ready,
|
879
|
-
server_recv_trailing_metadata_ready, elem,
|
880
|
-
grpc_schedule_on_exec_ctx);
|
881
907
|
server_ref(chand->server);
|
908
|
+
new (elem->call_data) call_data(elem, *args);
|
882
909
|
return GRPC_ERROR_NONE;
|
883
910
|
}
|
884
911
|
|
885
912
|
static void destroy_call_elem(grpc_call_element* elem,
|
886
913
|
const grpc_call_final_info* final_info,
|
887
914
|
grpc_closure* ignored) {
|
888
|
-
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
889
915
|
call_data* calld = static_cast<call_data*>(elem->call_data);
|
890
|
-
|
891
|
-
|
892
|
-
GRPC_ERROR_UNREF(calld->recv_initial_metadata_error);
|
893
|
-
if (calld->host_set) {
|
894
|
-
grpc_slice_unref_internal(calld->host);
|
895
|
-
}
|
896
|
-
if (calld->path_set) {
|
897
|
-
grpc_slice_unref_internal(calld->path);
|
898
|
-
}
|
899
|
-
grpc_metadata_array_destroy(&calld->initial_metadata);
|
900
|
-
grpc_byte_buffer_destroy(calld->payload);
|
901
|
-
|
916
|
+
calld->~call_data();
|
917
|
+
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
902
918
|
server_unref(chand->server);
|
903
919
|
}
|
904
920
|
|
@@ -1016,12 +1032,21 @@ grpc_server* grpc_server_create(const grpc_channel_args* args, void* reserved) {
|
|
1016
1032
|
{GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT, 0, INT_MAX});
|
1017
1033
|
server->channelz_server =
|
1018
1034
|
grpc_core::MakeRefCounted<grpc_core::channelz::ServerNode>(
|
1019
|
-
channel_tracer_max_memory);
|
1035
|
+
server, channel_tracer_max_memory);
|
1020
1036
|
server->channelz_server->AddTraceEvent(
|
1021
1037
|
grpc_core::channelz::ChannelTrace::Severity::Info,
|
1022
1038
|
grpc_slice_from_static_string("Server created"));
|
1023
1039
|
}
|
1024
1040
|
|
1041
|
+
if (args != nullptr) {
|
1042
|
+
grpc_resource_quota* resource_quota =
|
1043
|
+
grpc_resource_quota_from_channel_args(args, false /* create */);
|
1044
|
+
if (resource_quota != nullptr) {
|
1045
|
+
server->default_resource_user =
|
1046
|
+
grpc_resource_user_create(resource_quota, "default");
|
1047
|
+
}
|
1048
|
+
}
|
1049
|
+
|
1025
1050
|
return server;
|
1026
1051
|
}
|
1027
1052
|
|
@@ -1119,7 +1144,9 @@ void grpc_server_get_pollsets(grpc_server* server, grpc_pollset*** pollsets,
|
|
1119
1144
|
|
1120
1145
|
void grpc_server_setup_transport(grpc_server* s, grpc_transport* transport,
|
1121
1146
|
grpc_pollset* accepting_pollset,
|
1122
|
-
const grpc_channel_args* args
|
1147
|
+
const grpc_channel_args* args,
|
1148
|
+
intptr_t socket_uuid,
|
1149
|
+
grpc_resource_user* resource_user) {
|
1123
1150
|
size_t num_registered_methods;
|
1124
1151
|
size_t alloc;
|
1125
1152
|
registered_method* rm;
|
@@ -1132,13 +1159,15 @@ void grpc_server_setup_transport(grpc_server* s, grpc_transport* transport,
|
|
1132
1159
|
uint32_t max_probes = 0;
|
1133
1160
|
grpc_transport_op* op = nullptr;
|
1134
1161
|
|
1135
|
-
channel = grpc_channel_create(nullptr, args, GRPC_SERVER_CHANNEL, transport
|
1162
|
+
channel = grpc_channel_create(nullptr, args, GRPC_SERVER_CHANNEL, transport,
|
1163
|
+
resource_user);
|
1136
1164
|
chand = static_cast<channel_data*>(
|
1137
1165
|
grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0)
|
1138
1166
|
->channel_data);
|
1139
1167
|
chand->server = s;
|
1140
1168
|
server_ref(s);
|
1141
1169
|
chand->channel = channel;
|
1170
|
+
chand->socket_uuid = socket_uuid;
|
1142
1171
|
|
1143
1172
|
size_t cq_idx;
|
1144
1173
|
for (cq_idx = 0; cq_idx < s->cq_count; cq_idx++) {
|
@@ -1213,6 +1242,29 @@ void grpc_server_setup_transport(grpc_server* s, grpc_transport* transport,
|
|
1213
1242
|
grpc_transport_perform_op(transport, op);
|
1214
1243
|
}
|
1215
1244
|
|
1245
|
+
void grpc_server_populate_server_sockets(
|
1246
|
+
grpc_server* s, grpc_core::channelz::ChildRefsList* server_sockets,
|
1247
|
+
intptr_t start_idx) {
|
1248
|
+
gpr_mu_lock(&s->mu_global);
|
1249
|
+
channel_data* c = nullptr;
|
1250
|
+
for (c = s->root_channel_data.next; c != &s->root_channel_data; c = c->next) {
|
1251
|
+
intptr_t socket_uuid = c->socket_uuid;
|
1252
|
+
if (socket_uuid >= start_idx) {
|
1253
|
+
server_sockets->push_back(socket_uuid);
|
1254
|
+
}
|
1255
|
+
}
|
1256
|
+
gpr_mu_unlock(&s->mu_global);
|
1257
|
+
}
|
1258
|
+
|
1259
|
+
void grpc_server_populate_listen_sockets(
|
1260
|
+
grpc_server* server, grpc_core::channelz::ChildRefsList* listen_sockets) {
|
1261
|
+
gpr_mu_lock(&server->mu_global);
|
1262
|
+
for (listener* l = server->listeners; l != nullptr; l = l->next) {
|
1263
|
+
listen_sockets->push_back(l->socket_uuid);
|
1264
|
+
}
|
1265
|
+
gpr_mu_unlock(&server->mu_global);
|
1266
|
+
}
|
1267
|
+
|
1216
1268
|
void done_published_shutdown(void* done_arg, grpc_cq_completion* storage) {
|
1217
1269
|
(void)done_arg;
|
1218
1270
|
gpr_free(storage);
|
@@ -1303,6 +1355,13 @@ void grpc_server_shutdown_and_notify(grpc_server* server,
|
|
1303
1355
|
|
1304
1356
|
channel_broadcaster_shutdown(&broadcaster, true /* send_goaway */,
|
1305
1357
|
GRPC_ERROR_NONE);
|
1358
|
+
|
1359
|
+
if (server->default_resource_user != nullptr) {
|
1360
|
+
grpc_resource_quota_unref(
|
1361
|
+
grpc_resource_user_quota(server->default_resource_user));
|
1362
|
+
grpc_resource_user_shutdown(server->default_resource_user);
|
1363
|
+
grpc_resource_user_unref(server->default_resource_user);
|
1364
|
+
}
|
1306
1365
|
}
|
1307
1366
|
|
1308
1367
|
void grpc_server_cancel_all_calls(grpc_server* server) {
|
@@ -1346,11 +1405,13 @@ void grpc_server_add_listener(grpc_server* server, void* arg,
|
|
1346
1405
|
grpc_pollset** pollsets,
|
1347
1406
|
size_t pollset_count),
|
1348
1407
|
void (*destroy)(grpc_server* server, void* arg,
|
1349
|
-
grpc_closure* on_done)
|
1408
|
+
grpc_closure* on_done),
|
1409
|
+
intptr_t socket_uuid) {
|
1350
1410
|
listener* l = static_cast<listener*>(gpr_malloc(sizeof(listener)));
|
1351
1411
|
l->arg = arg;
|
1352
1412
|
l->start = start;
|
1353
1413
|
l->destroy = destroy;
|
1414
|
+
l->socket_uuid = socket_uuid;
|
1354
1415
|
l->next = server->listeners;
|
1355
1416
|
server->listeners = l;
|
1356
1417
|
}
|
@@ -1517,6 +1578,10 @@ const grpc_channel_args* grpc_server_get_channel_args(grpc_server* server) {
|
|
1517
1578
|
return server->channel_args;
|
1518
1579
|
}
|
1519
1580
|
|
1581
|
+
grpc_resource_user* grpc_server_get_default_resource_user(grpc_server* server) {
|
1582
|
+
return server->default_resource_user;
|
1583
|
+
}
|
1584
|
+
|
1520
1585
|
int grpc_server_has_open_connections(grpc_server* server) {
|
1521
1586
|
int r;
|
1522
1587
|
gpr_mu_lock(&server->mu_global);
|