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
@@ -85,9 +85,11 @@ class ConnectedSubchannel : public RefCountedWithTracing<ConnectedSubchannel> {
|
|
85
85
|
size_t parent_data_size;
|
86
86
|
};
|
87
87
|
|
88
|
-
explicit ConnectedSubchannel(
|
89
|
-
|
90
|
-
|
88
|
+
explicit ConnectedSubchannel(
|
89
|
+
grpc_channel_stack* channel_stack,
|
90
|
+
grpc_core::RefCountedPtr<grpc_core::channelz::SubchannelNode>
|
91
|
+
channelz_subchannel,
|
92
|
+
intptr_t socket_uuid);
|
91
93
|
~ConnectedSubchannel();
|
92
94
|
|
93
95
|
grpc_channel_stack* channel_stack() { return channel_stack_; }
|
@@ -97,15 +99,18 @@ class ConnectedSubchannel : public RefCountedWithTracing<ConnectedSubchannel> {
|
|
97
99
|
void Ping(grpc_closure* on_initiate, grpc_closure* on_ack);
|
98
100
|
grpc_error* CreateCall(const CallArgs& args, grpc_subchannel_call** call);
|
99
101
|
channelz::SubchannelNode* channelz_subchannel() {
|
100
|
-
return channelz_subchannel_;
|
102
|
+
return channelz_subchannel_.get();
|
101
103
|
}
|
102
104
|
intptr_t socket_uuid() { return socket_uuid_; }
|
103
105
|
|
106
|
+
size_t GetInitialCallSizeEstimate(size_t parent_data_size) const;
|
107
|
+
|
104
108
|
private:
|
105
109
|
grpc_channel_stack* channel_stack_;
|
106
|
-
//
|
110
|
+
// ref counted pointer to the channelz node in this connected subchannel's
|
107
111
|
// owning subchannel.
|
108
|
-
channelz::SubchannelNode
|
112
|
+
grpc_core::RefCountedPtr<grpc_core::channelz::SubchannelNode>
|
113
|
+
channelz_subchannel_;
|
109
114
|
// uuid of this subchannel's socket. 0 if this subchannel is not connected.
|
110
115
|
const intptr_t socket_uuid_;
|
111
116
|
};
|
@@ -140,13 +145,14 @@ void* grpc_connected_subchannel_call_get_parent_data(
|
|
140
145
|
|
141
146
|
/** poll the current connectivity state of a channel */
|
142
147
|
grpc_connectivity_state grpc_subchannel_check_connectivity(
|
143
|
-
grpc_subchannel* channel, grpc_error** error);
|
148
|
+
grpc_subchannel* channel, grpc_error** error, bool inhibit_health_checking);
|
144
149
|
|
145
150
|
/** Calls notify when the connectivity state of a channel becomes different
|
146
151
|
from *state. Updates *state with the new state of the channel. */
|
147
152
|
void grpc_subchannel_notify_on_state_change(
|
148
153
|
grpc_subchannel* channel, grpc_pollset_set* interested_parties,
|
149
|
-
grpc_connectivity_state* state, grpc_closure* notify
|
154
|
+
grpc_connectivity_state* state, grpc_closure* notify,
|
155
|
+
bool inhibit_health_checks);
|
150
156
|
|
151
157
|
/** retrieve the grpc_core::ConnectedSubchannel - or nullptr if not connected
|
152
158
|
* (which may happen before it initially connects or during transient failures)
|
@@ -27,6 +27,7 @@
|
|
27
27
|
#include <grpc/support/time.h>
|
28
28
|
|
29
29
|
#include "src/core/lib/channel/channel_stack_builder.h"
|
30
|
+
#include "src/core/lib/gprpp/memory.h"
|
30
31
|
#include "src/core/lib/iomgr/timer.h"
|
31
32
|
#include "src/core/lib/slice/slice_internal.h"
|
32
33
|
#include "src/core/lib/surface/channel_init.h"
|
@@ -152,7 +153,11 @@ static void inject_recv_trailing_metadata_ready(
|
|
152
153
|
// Callback and associated state for starting the timer after call stack
|
153
154
|
// initialization has been completed.
|
154
155
|
struct start_timer_after_init_state {
|
155
|
-
|
156
|
+
start_timer_after_init_state(grpc_call_element* elem, grpc_millis deadline)
|
157
|
+
: elem(elem), deadline(deadline) {}
|
158
|
+
~start_timer_after_init_state() { start_timer_if_needed(elem, deadline); }
|
159
|
+
|
160
|
+
bool in_call_combiner = false;
|
156
161
|
grpc_call_element* elem;
|
157
162
|
grpc_millis deadline;
|
158
163
|
grpc_closure closure;
|
@@ -171,20 +176,16 @@ static void start_timer_after_init(void* arg, grpc_error* error) {
|
|
171
176
|
"scheduling deadline timer");
|
172
177
|
return;
|
173
178
|
}
|
174
|
-
|
175
|
-
gpr_free(state);
|
179
|
+
grpc_core::Delete(state);
|
176
180
|
GRPC_CALL_COMBINER_STOP(deadline_state->call_combiner,
|
177
181
|
"done scheduling deadline timer");
|
178
182
|
}
|
179
183
|
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
static_cast<grpc_deadline_state*>(elem->call_data);
|
186
|
-
deadline_state->call_stack = call_stack;
|
187
|
-
deadline_state->call_combiner = call_combiner;
|
184
|
+
grpc_deadline_state::grpc_deadline_state(grpc_call_element* elem,
|
185
|
+
grpc_call_stack* call_stack,
|
186
|
+
grpc_call_combiner* call_combiner,
|
187
|
+
grpc_millis deadline)
|
188
|
+
: call_stack(call_stack), call_combiner(call_combiner) {
|
188
189
|
// Deadline will always be infinite on servers, so the timer will only be
|
189
190
|
// set on clients with a finite deadline.
|
190
191
|
if (deadline != GRPC_MILLIS_INF_FUTURE) {
|
@@ -196,21 +197,14 @@ void grpc_deadline_state_init(grpc_call_element* elem,
|
|
196
197
|
// create a closure to start the timer, and we schedule that closure
|
197
198
|
// to be run after call stack initialization is done.
|
198
199
|
struct start_timer_after_init_state* state =
|
199
|
-
|
200
|
-
gpr_zalloc(sizeof(*state)));
|
201
|
-
state->elem = elem;
|
202
|
-
state->deadline = deadline;
|
200
|
+
grpc_core::New<start_timer_after_init_state>(elem, deadline);
|
203
201
|
GRPC_CLOSURE_INIT(&state->closure, start_timer_after_init, state,
|
204
202
|
grpc_schedule_on_exec_ctx);
|
205
203
|
GRPC_CLOSURE_SCHED(&state->closure, GRPC_ERROR_NONE);
|
206
204
|
}
|
207
205
|
}
|
208
206
|
|
209
|
-
|
210
|
-
grpc_deadline_state* deadline_state =
|
211
|
-
static_cast<grpc_deadline_state*>(elem->call_data);
|
212
|
-
cancel_timer_if_needed(deadline_state);
|
213
|
-
}
|
207
|
+
grpc_deadline_state::~grpc_deadline_state() { cancel_timer_if_needed(this); }
|
214
208
|
|
215
209
|
void grpc_deadline_state_reset(grpc_call_element* elem,
|
216
210
|
grpc_millis new_deadline) {
|
@@ -269,8 +263,8 @@ typedef struct server_call_data {
|
|
269
263
|
// Constructor for call_data. Used for both client and server filters.
|
270
264
|
static grpc_error* init_call_elem(grpc_call_element* elem,
|
271
265
|
const grpc_call_element_args* args) {
|
272
|
-
|
273
|
-
|
266
|
+
new (elem->call_data) grpc_deadline_state(
|
267
|
+
elem, args->call_stack, args->call_combiner, args->deadline);
|
274
268
|
return GRPC_ERROR_NONE;
|
275
269
|
}
|
276
270
|
|
@@ -278,7 +272,9 @@ static grpc_error* init_call_elem(grpc_call_element* elem,
|
|
278
272
|
static void destroy_call_elem(grpc_call_element* elem,
|
279
273
|
const grpc_call_final_info* final_info,
|
280
274
|
grpc_closure* ignored) {
|
281
|
-
|
275
|
+
grpc_deadline_state* deadline_state =
|
276
|
+
static_cast<grpc_deadline_state*>(elem->call_data);
|
277
|
+
deadline_state->~grpc_deadline_state();
|
282
278
|
}
|
283
279
|
|
284
280
|
// Method for starting a call op for client filter.
|
@@ -22,19 +22,23 @@
|
|
22
22
|
#include "src/core/lib/channel/channel_stack.h"
|
23
23
|
#include "src/core/lib/iomgr/timer.h"
|
24
24
|
|
25
|
-
|
25
|
+
enum grpc_deadline_timer_state {
|
26
26
|
GRPC_DEADLINE_STATE_INITIAL,
|
27
27
|
GRPC_DEADLINE_STATE_PENDING,
|
28
28
|
GRPC_DEADLINE_STATE_FINISHED
|
29
|
-
}
|
29
|
+
};
|
30
30
|
|
31
31
|
// State used for filters that enforce call deadlines.
|
32
32
|
// Must be the first field in the filter's call_data.
|
33
|
-
|
33
|
+
struct grpc_deadline_state {
|
34
|
+
grpc_deadline_state(grpc_call_element* elem, grpc_call_stack* call_stack,
|
35
|
+
grpc_call_combiner* call_combiner, grpc_millis deadline);
|
36
|
+
~grpc_deadline_state();
|
37
|
+
|
34
38
|
// We take a reference to the call stack for the timer callback.
|
35
39
|
grpc_call_stack* call_stack;
|
36
40
|
grpc_call_combiner* call_combiner;
|
37
|
-
grpc_deadline_timer_state timer_state;
|
41
|
+
grpc_deadline_timer_state timer_state = GRPC_DEADLINE_STATE_INITIAL;
|
38
42
|
grpc_timer timer;
|
39
43
|
grpc_closure timer_callback;
|
40
44
|
// Closure to invoke when we receive trailing metadata.
|
@@ -43,21 +47,13 @@ typedef struct grpc_deadline_state {
|
|
43
47
|
// The original recv_trailing_metadata_ready closure, which we chain to
|
44
48
|
// after our own closure is invoked.
|
45
49
|
grpc_closure* original_recv_trailing_metadata_ready;
|
46
|
-
}
|
50
|
+
};
|
47
51
|
|
48
52
|
//
|
49
53
|
// NOTE: All of these functions require that the first field in
|
50
54
|
// elem->call_data is a grpc_deadline_state.
|
51
55
|
//
|
52
56
|
|
53
|
-
// assumes elem->call_data is zero'd
|
54
|
-
void grpc_deadline_state_init(grpc_call_element* elem,
|
55
|
-
grpc_call_stack* call_stack,
|
56
|
-
grpc_call_combiner* call_combiner,
|
57
|
-
grpc_millis deadline);
|
58
|
-
|
59
|
-
void grpc_deadline_state_destroy(grpc_call_element* elem);
|
60
|
-
|
61
57
|
// Cancels the existing timer and starts a new one with new_deadline.
|
62
58
|
//
|
63
59
|
// Note: It is generally safe to call this with an earlier deadline
|
@@ -37,10 +37,31 @@
|
|
37
37
|
#define EXPECTED_CONTENT_TYPE_LENGTH sizeof(EXPECTED_CONTENT_TYPE) - 1
|
38
38
|
|
39
39
|
/* default maximum size of payload eligable for GET request */
|
40
|
-
static
|
40
|
+
static constexpr size_t kMaxPayloadSizeForGet = 2048;
|
41
|
+
|
42
|
+
static void recv_initial_metadata_ready(void* user_data, grpc_error* error);
|
43
|
+
static void recv_trailing_metadata_ready(void* user_data, grpc_error* error);
|
44
|
+
static void on_send_message_next_done(void* arg, grpc_error* error);
|
45
|
+
static void send_message_on_complete(void* arg, grpc_error* error);
|
41
46
|
|
42
47
|
namespace {
|
43
48
|
struct call_data {
|
49
|
+
call_data(grpc_call_element* elem, const grpc_call_element_args& args)
|
50
|
+
: call_combiner(args.call_combiner) {
|
51
|
+
GRPC_CLOSURE_INIT(&recv_initial_metadata_ready,
|
52
|
+
::recv_initial_metadata_ready, elem,
|
53
|
+
grpc_schedule_on_exec_ctx);
|
54
|
+
GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready,
|
55
|
+
::recv_trailing_metadata_ready, elem,
|
56
|
+
grpc_schedule_on_exec_ctx);
|
57
|
+
GRPC_CLOSURE_INIT(&on_send_message_next_done, ::on_send_message_next_done,
|
58
|
+
elem, grpc_schedule_on_exec_ctx);
|
59
|
+
GRPC_CLOSURE_INIT(&send_message_on_complete, ::send_message_on_complete,
|
60
|
+
elem, grpc_schedule_on_exec_ctx);
|
61
|
+
}
|
62
|
+
|
63
|
+
~call_data() { GRPC_ERROR_UNREF(recv_initial_metadata_error); }
|
64
|
+
|
44
65
|
grpc_call_combiner* call_combiner;
|
45
66
|
// State for handling send_initial_metadata ops.
|
46
67
|
grpc_linked_mdelem method;
|
@@ -51,18 +72,18 @@ struct call_data {
|
|
51
72
|
grpc_linked_mdelem user_agent;
|
52
73
|
// State for handling recv_initial_metadata ops.
|
53
74
|
grpc_metadata_batch* recv_initial_metadata;
|
54
|
-
grpc_error* recv_initial_metadata_error;
|
55
|
-
grpc_closure* original_recv_initial_metadata_ready;
|
75
|
+
grpc_error* recv_initial_metadata_error = GRPC_ERROR_NONE;
|
76
|
+
grpc_closure* original_recv_initial_metadata_ready = nullptr;
|
56
77
|
grpc_closure recv_initial_metadata_ready;
|
57
78
|
// State for handling recv_trailing_metadata ops.
|
58
79
|
grpc_metadata_batch* recv_trailing_metadata;
|
59
80
|
grpc_closure* original_recv_trailing_metadata_ready;
|
60
81
|
grpc_closure recv_trailing_metadata_ready;
|
61
|
-
grpc_error* recv_trailing_metadata_error;
|
62
|
-
bool seen_recv_trailing_metadata_ready;
|
82
|
+
grpc_error* recv_trailing_metadata_error = GRPC_ERROR_NONE;
|
83
|
+
bool seen_recv_trailing_metadata_ready = false;
|
63
84
|
// State for handling send_message ops.
|
64
85
|
grpc_transport_stream_op_batch* send_message_batch;
|
65
|
-
size_t send_message_bytes_read;
|
86
|
+
size_t send_message_bytes_read = 0;
|
66
87
|
grpc_core::ManualConstructor<grpc_core::ByteStreamCache> send_message_cache;
|
67
88
|
grpc_core::ManualConstructor<grpc_core::ByteStreamCache::CachingByteStream>
|
68
89
|
send_message_caching_stream;
|
@@ -442,18 +463,7 @@ done:
|
|
442
463
|
/* Constructor for call_data */
|
443
464
|
static grpc_error* init_call_elem(grpc_call_element* elem,
|
444
465
|
const grpc_call_element_args* args) {
|
445
|
-
|
446
|
-
calld->call_combiner = args->call_combiner;
|
447
|
-
GRPC_CLOSURE_INIT(&calld->recv_initial_metadata_ready,
|
448
|
-
recv_initial_metadata_ready, elem,
|
449
|
-
grpc_schedule_on_exec_ctx);
|
450
|
-
GRPC_CLOSURE_INIT(&calld->recv_trailing_metadata_ready,
|
451
|
-
recv_trailing_metadata_ready, elem,
|
452
|
-
grpc_schedule_on_exec_ctx);
|
453
|
-
GRPC_CLOSURE_INIT(&calld->send_message_on_complete, send_message_on_complete,
|
454
|
-
elem, grpc_schedule_on_exec_ctx);
|
455
|
-
GRPC_CLOSURE_INIT(&calld->on_send_message_next_done,
|
456
|
-
on_send_message_next_done, elem, grpc_schedule_on_exec_ctx);
|
466
|
+
new (elem->call_data) call_data(elem, *args);
|
457
467
|
return GRPC_ERROR_NONE;
|
458
468
|
}
|
459
469
|
|
@@ -462,7 +472,7 @@ static void destroy_call_elem(grpc_call_element* elem,
|
|
462
472
|
const grpc_call_final_info* final_info,
|
463
473
|
grpc_closure* ignored) {
|
464
474
|
call_data* calld = static_cast<call_data*>(elem->call_data);
|
465
|
-
|
475
|
+
calld->~call_data();
|
466
476
|
}
|
467
477
|
|
468
478
|
static grpc_mdelem scheme_from_args(const grpc_channel_args* args) {
|
@@ -59,9 +59,8 @@ void authority_start_transport_stream_op_batch(
|
|
59
59
|
initial_metadata->idx.named.authority == nullptr) {
|
60
60
|
grpc_error* error = grpc_metadata_batch_add_head(
|
61
61
|
initial_metadata, &calld->authority_storage,
|
62
|
-
|
63
|
-
|
64
|
-
grpc_slice_ref_internal(chand->default_authority)));
|
62
|
+
grpc_mdelem_create(GRPC_MDSTR_AUTHORITY, chand->default_authority,
|
63
|
+
nullptr));
|
65
64
|
if (error != GRPC_ERROR_NONE) {
|
66
65
|
grpc_transport_stream_op_batch_finish_with_failure(batch, error,
|
67
66
|
calld->call_combiner);
|
@@ -39,6 +39,10 @@
|
|
39
39
|
#include "src/core/lib/surface/call.h"
|
40
40
|
#include "src/core/lib/transport/static_metadata.h"
|
41
41
|
|
42
|
+
static void start_send_message_batch(void* arg, grpc_error* unused);
|
43
|
+
static void send_message_on_complete(void* arg, grpc_error* error);
|
44
|
+
static void on_send_message_next_done(void* arg, grpc_error* error);
|
45
|
+
|
42
46
|
namespace {
|
43
47
|
enum initial_metadata_state {
|
44
48
|
// Initial metadata not yet seen.
|
@@ -50,6 +54,23 @@ enum initial_metadata_state {
|
|
50
54
|
};
|
51
55
|
|
52
56
|
struct call_data {
|
57
|
+
call_data(grpc_call_element* elem, const grpc_call_element_args& args)
|
58
|
+
: call_combiner(args.call_combiner) {
|
59
|
+
GRPC_CLOSURE_INIT(&start_send_message_batch_in_call_combiner,
|
60
|
+
start_send_message_batch, elem,
|
61
|
+
grpc_schedule_on_exec_ctx);
|
62
|
+
grpc_slice_buffer_init(&slices);
|
63
|
+
GRPC_CLOSURE_INIT(&send_message_on_complete, ::send_message_on_complete,
|
64
|
+
elem, grpc_schedule_on_exec_ctx);
|
65
|
+
GRPC_CLOSURE_INIT(&on_send_message_next_done, ::on_send_message_next_done,
|
66
|
+
elem, grpc_schedule_on_exec_ctx);
|
67
|
+
}
|
68
|
+
|
69
|
+
~call_data() {
|
70
|
+
grpc_slice_buffer_destroy_internal(&slices);
|
71
|
+
GRPC_ERROR_UNREF(cancel_error);
|
72
|
+
}
|
73
|
+
|
53
74
|
grpc_call_combiner* call_combiner;
|
54
75
|
grpc_linked_mdelem compression_algorithm_storage;
|
55
76
|
grpc_linked_mdelem stream_compression_algorithm_storage;
|
@@ -57,11 +78,12 @@ struct call_data {
|
|
57
78
|
grpc_linked_mdelem accept_stream_encoding_storage;
|
58
79
|
/** Compression algorithm we'll try to use. It may be given by incoming
|
59
80
|
* metadata, or by the channel's default compression settings. */
|
60
|
-
grpc_message_compression_algorithm message_compression_algorithm
|
61
|
-
|
62
|
-
|
81
|
+
grpc_message_compression_algorithm message_compression_algorithm =
|
82
|
+
GRPC_MESSAGE_COMPRESS_NONE;
|
83
|
+
initial_metadata_state send_initial_metadata_state = INITIAL_METADATA_UNSEEN;
|
84
|
+
grpc_error* cancel_error = GRPC_ERROR_NONE;
|
63
85
|
grpc_closure start_send_message_batch_in_call_combiner;
|
64
|
-
grpc_transport_stream_op_batch* send_message_batch;
|
86
|
+
grpc_transport_stream_op_batch* send_message_batch = nullptr;
|
65
87
|
grpc_slice_buffer slices; /**< Buffers up input slices to be compressed */
|
66
88
|
grpc_core::ManualConstructor<grpc_core::SliceBufferByteStream>
|
67
89
|
replacement_stream;
|
@@ -424,16 +446,7 @@ static void compress_start_transport_stream_op_batch(
|
|
424
446
|
/* Constructor for call_data */
|
425
447
|
static grpc_error* init_call_elem(grpc_call_element* elem,
|
426
448
|
const grpc_call_element_args* args) {
|
427
|
-
|
428
|
-
calld->call_combiner = args->call_combiner;
|
429
|
-
calld->cancel_error = GRPC_ERROR_NONE;
|
430
|
-
grpc_slice_buffer_init(&calld->slices);
|
431
|
-
GRPC_CLOSURE_INIT(&calld->start_send_message_batch_in_call_combiner,
|
432
|
-
start_send_message_batch, elem, grpc_schedule_on_exec_ctx);
|
433
|
-
GRPC_CLOSURE_INIT(&calld->on_send_message_next_done,
|
434
|
-
on_send_message_next_done, elem, grpc_schedule_on_exec_ctx);
|
435
|
-
GRPC_CLOSURE_INIT(&calld->send_message_on_complete, send_message_on_complete,
|
436
|
-
elem, grpc_schedule_on_exec_ctx);
|
449
|
+
new (elem->call_data) call_data(elem, *args);
|
437
450
|
return GRPC_ERROR_NONE;
|
438
451
|
}
|
439
452
|
|
@@ -442,8 +455,7 @@ static void destroy_call_elem(grpc_call_element* elem,
|
|
442
455
|
const grpc_call_final_info* final_info,
|
443
456
|
grpc_closure* ignored) {
|
444
457
|
call_data* calld = static_cast<call_data*>(elem->call_data);
|
445
|
-
|
446
|
-
GRPC_ERROR_UNREF(calld->cancel_error);
|
458
|
+
calld->~call_data();
|
447
459
|
}
|
448
460
|
|
449
461
|
/* Constructor for channel_data */
|
@@ -35,9 +35,32 @@
|
|
35
35
|
#define EXPECTED_CONTENT_TYPE "application/grpc"
|
36
36
|
#define EXPECTED_CONTENT_TYPE_LENGTH sizeof(EXPECTED_CONTENT_TYPE) - 1
|
37
37
|
|
38
|
+
static void hs_recv_initial_metadata_ready(void* user_data, grpc_error* err);
|
39
|
+
static void hs_recv_trailing_metadata_ready(void* user_data, grpc_error* err);
|
40
|
+
static void hs_recv_message_ready(void* user_data, grpc_error* err);
|
41
|
+
|
38
42
|
namespace {
|
39
43
|
|
40
44
|
struct call_data {
|
45
|
+
call_data(grpc_call_element* elem, const grpc_call_element_args& args)
|
46
|
+
: call_combiner(args.call_combiner) {
|
47
|
+
GRPC_CLOSURE_INIT(&recv_initial_metadata_ready,
|
48
|
+
hs_recv_initial_metadata_ready, elem,
|
49
|
+
grpc_schedule_on_exec_ctx);
|
50
|
+
GRPC_CLOSURE_INIT(&recv_message_ready, hs_recv_message_ready, elem,
|
51
|
+
grpc_schedule_on_exec_ctx);
|
52
|
+
GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready,
|
53
|
+
hs_recv_trailing_metadata_ready, elem,
|
54
|
+
grpc_schedule_on_exec_ctx);
|
55
|
+
}
|
56
|
+
|
57
|
+
~call_data() {
|
58
|
+
GRPC_ERROR_UNREF(recv_initial_metadata_ready_error);
|
59
|
+
if (have_read_stream) {
|
60
|
+
read_stream->Orphan();
|
61
|
+
}
|
62
|
+
}
|
63
|
+
|
41
64
|
grpc_call_combiner* call_combiner;
|
42
65
|
|
43
66
|
// Outgoing headers to add to send_initial_metadata.
|
@@ -47,27 +70,27 @@ struct call_data {
|
|
47
70
|
// If we see the recv_message contents in the GET query string, we
|
48
71
|
// store it here.
|
49
72
|
grpc_core::ManualConstructor<grpc_core::SliceBufferByteStream> read_stream;
|
50
|
-
bool have_read_stream;
|
73
|
+
bool have_read_stream = false;
|
51
74
|
|
52
75
|
// State for intercepting recv_initial_metadata.
|
53
76
|
grpc_closure recv_initial_metadata_ready;
|
54
|
-
grpc_error* recv_initial_metadata_ready_error;
|
77
|
+
grpc_error* recv_initial_metadata_ready_error = GRPC_ERROR_NONE;
|
55
78
|
grpc_closure* original_recv_initial_metadata_ready;
|
56
|
-
grpc_metadata_batch* recv_initial_metadata;
|
79
|
+
grpc_metadata_batch* recv_initial_metadata = nullptr;
|
57
80
|
uint32_t* recv_initial_metadata_flags;
|
58
|
-
bool seen_recv_initial_metadata_ready;
|
81
|
+
bool seen_recv_initial_metadata_ready = false;
|
59
82
|
|
60
83
|
// State for intercepting recv_message.
|
61
84
|
grpc_closure* original_recv_message_ready;
|
62
85
|
grpc_closure recv_message_ready;
|
63
86
|
grpc_core::OrphanablePtr<grpc_core::ByteStream>* recv_message;
|
64
|
-
bool seen_recv_message_ready;
|
87
|
+
bool seen_recv_message_ready = false;
|
65
88
|
|
66
89
|
// State for intercepting recv_trailing_metadata
|
67
90
|
grpc_closure recv_trailing_metadata_ready;
|
68
91
|
grpc_closure* original_recv_trailing_metadata_ready;
|
69
92
|
grpc_error* recv_trailing_metadata_ready_error;
|
70
|
-
bool seen_recv_trailing_metadata_ready;
|
93
|
+
bool seen_recv_trailing_metadata_ready = false;
|
71
94
|
};
|
72
95
|
|
73
96
|
struct channel_data {
|
@@ -431,16 +454,7 @@ static void hs_start_transport_stream_op_batch(
|
|
431
454
|
/* Constructor for call_data */
|
432
455
|
static grpc_error* hs_init_call_elem(grpc_call_element* elem,
|
433
456
|
const grpc_call_element_args* args) {
|
434
|
-
|
435
|
-
calld->call_combiner = args->call_combiner;
|
436
|
-
GRPC_CLOSURE_INIT(&calld->recv_initial_metadata_ready,
|
437
|
-
hs_recv_initial_metadata_ready, elem,
|
438
|
-
grpc_schedule_on_exec_ctx);
|
439
|
-
GRPC_CLOSURE_INIT(&calld->recv_message_ready, hs_recv_message_ready, elem,
|
440
|
-
grpc_schedule_on_exec_ctx);
|
441
|
-
GRPC_CLOSURE_INIT(&calld->recv_trailing_metadata_ready,
|
442
|
-
hs_recv_trailing_metadata_ready, elem,
|
443
|
-
grpc_schedule_on_exec_ctx);
|
457
|
+
new (elem->call_data) call_data(elem, *args);
|
444
458
|
return GRPC_ERROR_NONE;
|
445
459
|
}
|
446
460
|
|
@@ -449,10 +463,7 @@ static void hs_destroy_call_elem(grpc_call_element* elem,
|
|
449
463
|
const grpc_call_final_info* final_info,
|
450
464
|
grpc_closure* ignored) {
|
451
465
|
call_data* calld = static_cast<call_data*>(elem->call_data);
|
452
|
-
|
453
|
-
if (calld->have_read_stream) {
|
454
|
-
calld->read_stream->Orphan();
|
455
|
-
}
|
466
|
+
calld->~call_data();
|
456
467
|
}
|
457
468
|
|
458
469
|
/* Constructor for channel_data */
|