grpc 1.58.0 → 1.58.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Makefile +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +39 -28
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -0
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +1 -4
- data/src/core/lib/event_engine/ares_resolver.cc +9 -0
- data/src/core/lib/event_engine/nameser.h +102 -0
- data/src/core/lib/experiments/experiments.cc +319 -138
- data/src/core/lib/experiments/experiments.h +13 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9afb343e08dfcac976aebf9d7ef1a1ece8e0a825c336ff03a50e9c5ce4d5c0fa
|
4
|
+
data.tar.gz: 942e31b171f23226e3c41fafcd4abd4e28f52b7351ac6ce3d57c0c44ae42cb22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 26695c9d42c9485d8a09ff7d2c512ce3e9e18da78f750102d07430404cc250f443fc6bfcfc8aef3f43a5a4a52e391930f057650dfb21f7adda70a2611cac5971
|
7
|
+
data.tar.gz: 781317e1cc60d9a72f87027944fd637532d5b77c27e2dba867fbc73b6a48de455707879619c5d5342663805b9c5617cd3fb765b7e77642ee8020d024c0384a89
|
data/Makefile
CHANGED
@@ -91,12 +91,14 @@ constexpr Base64InverseTable kBase64InverseTable;
|
|
91
91
|
class HPackParser::Input {
|
92
92
|
public:
|
93
93
|
Input(grpc_slice_refcount* current_slice_refcount, const uint8_t* begin,
|
94
|
-
const uint8_t* end, HpackParseResult&
|
94
|
+
const uint8_t* end, HpackParseResult& frame_error,
|
95
|
+
HpackParseResult& field_error)
|
95
96
|
: current_slice_refcount_(current_slice_refcount),
|
96
97
|
begin_(begin),
|
97
98
|
end_(end),
|
98
99
|
frontier_(begin),
|
99
|
-
|
100
|
+
frame_error_(frame_error),
|
101
|
+
field_error_(field_error) {}
|
100
102
|
|
101
103
|
// If input is backed by a slice, retrieve its refcount. If not, return
|
102
104
|
// nullptr.
|
@@ -214,14 +216,18 @@ class HPackParser::Input {
|
|
214
216
|
|
215
217
|
// Check if we saw an EOF
|
216
218
|
bool eof_error() const {
|
217
|
-
return min_progress_size_ != 0 ||
|
219
|
+
return min_progress_size_ != 0 || frame_error_.connection_error();
|
220
|
+
}
|
221
|
+
|
222
|
+
// Reset the field error to be ok
|
223
|
+
void ClearFieldError() {
|
224
|
+
if (field_error_.ok()) return;
|
225
|
+
field_error_ = HpackParseResult();
|
218
226
|
}
|
219
227
|
|
220
228
|
// Minimum number of bytes to unstuck the current parse
|
221
229
|
size_t min_progress_size() const { return min_progress_size_; }
|
222
230
|
|
223
|
-
bool has_error() const { return !error_.ok(); }
|
224
|
-
|
225
231
|
// Set the current error - tweaks the error to include a stream id so that
|
226
232
|
// chttp2 does not close the connection.
|
227
233
|
// Intended for errors that are specific to a stream and recoverable.
|
@@ -245,10 +251,7 @@ class HPackParser::Input {
|
|
245
251
|
// read prior to being able to get further in this parse.
|
246
252
|
void UnexpectedEOF(size_t min_progress_size) {
|
247
253
|
GPR_ASSERT(min_progress_size > 0);
|
248
|
-
if (
|
249
|
-
GPR_DEBUG_ASSERT(eof_error());
|
250
|
-
return;
|
251
|
-
}
|
254
|
+
if (eof_error()) return;
|
252
255
|
// Set min progress size, taking into account bytes parsed already but not
|
253
256
|
// consumed.
|
254
257
|
min_progress_size_ = min_progress_size + (begin_ - frontier_);
|
@@ -298,13 +301,18 @@ class HPackParser::Input {
|
|
298
301
|
// Do not use this directly, instead use SetErrorAndContinueParsing or
|
299
302
|
// SetErrorAndStopParsing.
|
300
303
|
void SetError(HpackParseResult error) {
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
+
SetErrorFor(frame_error_, error);
|
305
|
+
SetErrorFor(field_error_, std::move(error));
|
306
|
+
}
|
307
|
+
|
308
|
+
void SetErrorFor(HpackParseResult& error, HpackParseResult new_error) {
|
309
|
+
if (!error.ok() || min_progress_size_ > 0) {
|
310
|
+
if (new_error.connection_error() && !error.connection_error()) {
|
311
|
+
error = std::move(new_error); // connection errors dominate
|
304
312
|
}
|
305
313
|
return;
|
306
314
|
}
|
307
|
-
|
315
|
+
error = std::move(new_error);
|
308
316
|
}
|
309
317
|
|
310
318
|
// Refcount if we are backed by a slice
|
@@ -316,7 +324,8 @@ class HPackParser::Input {
|
|
316
324
|
// Frontier denotes the first byte past successfully processed input
|
317
325
|
const uint8_t* frontier_;
|
318
326
|
// Current error
|
319
|
-
HpackParseResult&
|
327
|
+
HpackParseResult& frame_error_;
|
328
|
+
HpackParseResult& field_error_;
|
320
329
|
// If the error was EOF, we flag it here by noting how many more bytes would
|
321
330
|
// be needed to make progress
|
322
331
|
size_t min_progress_size_ = 0;
|
@@ -591,6 +600,7 @@ class HPackParser::Parser {
|
|
591
600
|
bool ParseTop() {
|
592
601
|
GPR_DEBUG_ASSERT(state_.parse_state == ParseState::kTop);
|
593
602
|
auto cur = *input_->Next();
|
603
|
+
input_->ClearFieldError();
|
594
604
|
switch (cur >> 4) {
|
595
605
|
// Literal header not indexed - First byte format: 0000xxxx
|
596
606
|
// Literal header never indexed - First byte format: 0001xxxx
|
@@ -696,7 +706,7 @@ class HPackParser::Parser {
|
|
696
706
|
break;
|
697
707
|
}
|
698
708
|
gpr_log(
|
699
|
-
|
709
|
+
GPR_INFO, "HTTP:%d:%s:%s: %s%s", log_info_.stream_id, type,
|
700
710
|
log_info_.is_client ? "CLI" : "SVR", memento.md.DebugString().c_str(),
|
701
711
|
memento.parse_status == nullptr
|
702
712
|
? ""
|
@@ -945,11 +955,10 @@ class HPackParser::Parser {
|
|
945
955
|
state_.string_length)
|
946
956
|
: String::Parse(input_, state_.is_string_huff_compressed,
|
947
957
|
state_.string_length);
|
948
|
-
HpackParseResult& status = state_.frame_error;
|
949
958
|
absl::string_view key_string;
|
950
959
|
if (auto* s = absl::get_if<Slice>(&state_.key)) {
|
951
960
|
key_string = s->as_string_view();
|
952
|
-
if (
|
961
|
+
if (state_.field_error.ok()) {
|
953
962
|
auto r = ValidateKey(key_string);
|
954
963
|
if (r != ValidateMetadataResult::kOk) {
|
955
964
|
input_->SetErrorAndContinueParsing(
|
@@ -959,7 +968,7 @@ class HPackParser::Parser {
|
|
959
968
|
} else {
|
960
969
|
const auto* memento = absl::get<const HPackTable::Memento*>(state_.key);
|
961
970
|
key_string = memento->md.key();
|
962
|
-
if (
|
971
|
+
if (state_.field_error.ok() && memento->parse_status != nullptr) {
|
963
972
|
input_->SetErrorAndContinueParsing(*memento->parse_status);
|
964
973
|
}
|
965
974
|
}
|
@@ -986,16 +995,16 @@ class HPackParser::Parser {
|
|
986
995
|
key_string.size() + value.wire_size + hpack_constants::kEntryOverhead;
|
987
996
|
auto md = grpc_metadata_batch::Parse(
|
988
997
|
key_string, std::move(value_slice), state_.add_to_table, transport_size,
|
989
|
-
[key_string,
|
990
|
-
if (!
|
998
|
+
[key_string, this](absl::string_view message, const Slice&) {
|
999
|
+
if (!state_.field_error.ok()) return;
|
991
1000
|
input_->SetErrorAndContinueParsing(
|
992
1001
|
HpackParseResult::MetadataParseError(key_string));
|
993
1002
|
gpr_log(GPR_ERROR, "Error parsing '%s' metadata: %s",
|
994
1003
|
std::string(key_string).c_str(),
|
995
1004
|
std::string(message).c_str());
|
996
1005
|
});
|
997
|
-
HPackTable::Memento memento{
|
998
|
-
|
1006
|
+
HPackTable::Memento memento{
|
1007
|
+
std::move(md), state_.field_error.PersistentStreamErrorOrNullptr()};
|
999
1008
|
input_->UpdateFrontier();
|
1000
1009
|
state_.parse_state = ParseState::kTop;
|
1001
1010
|
if (state_.add_to_table) {
|
@@ -1155,13 +1164,15 @@ grpc_error_handle HPackParser::Parse(
|
|
1155
1164
|
return absl::OkStatus();
|
1156
1165
|
}
|
1157
1166
|
std::vector<uint8_t> buffer = std::move(unparsed_bytes_);
|
1158
|
-
return ParseInput(
|
1159
|
-
|
1160
|
-
|
1167
|
+
return ParseInput(
|
1168
|
+
Input(nullptr, buffer.data(), buffer.data() + buffer.size(),
|
1169
|
+
state_.frame_error, state_.field_error),
|
1170
|
+
is_last, call_tracer);
|
1161
1171
|
}
|
1162
|
-
return ParseInput(
|
1163
|
-
|
1164
|
-
|
1172
|
+
return ParseInput(
|
1173
|
+
Input(slice.refcount, GRPC_SLICE_START_PTR(slice),
|
1174
|
+
GRPC_SLICE_END_PTR(slice), state_.frame_error, state_.field_error),
|
1175
|
+
is_last, call_tracer);
|
1165
1176
|
}
|
1166
1177
|
|
1167
1178
|
grpc_error_handle HPackParser::ParseInput(
|
@@ -234,6 +234,8 @@ class HPackParser {
|
|
234
234
|
HPackTable hpack_table;
|
235
235
|
// Error so far for this frame (set by class Input)
|
236
236
|
HpackParseResult frame_error;
|
237
|
+
// Error so far for this field (set by class Input)
|
238
|
+
HpackParseResult field_error;
|
237
239
|
// Length of frame so far.
|
238
240
|
uint32_t frame_length = 0;
|
239
241
|
// Length of the string being parsed
|
@@ -77,7 +77,6 @@ Json::Object ValidateStatefulSession(
|
|
77
77
|
envoy_extensions_filters_http_stateful_session_v3_StatefulSession_session_state(
|
78
78
|
stateful_session);
|
79
79
|
if (session_state == nullptr) {
|
80
|
-
errors->AddError("field not present");
|
81
80
|
return {};
|
82
81
|
}
|
83
82
|
ValidationErrors::ScopedField field2(errors, ".typed_config");
|
@@ -188,9 +187,7 @@ XdsHttpStatefulSessionFilter::GenerateFilterConfigOverride(
|
|
188
187
|
const auto* stateful_session =
|
189
188
|
envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_stateful_session(
|
190
189
|
stateful_session_per_route);
|
191
|
-
if (stateful_session
|
192
|
-
errors->AddError("field not present");
|
193
|
-
} else {
|
190
|
+
if (stateful_session != nullptr) {
|
194
191
|
config = ValidateStatefulSession(context, stateful_session, errors);
|
195
192
|
}
|
196
193
|
}
|
@@ -22,6 +22,7 @@
|
|
22
22
|
|
23
23
|
#include "src/core/lib/iomgr/port.h"
|
24
24
|
|
25
|
+
// IWYU pragma: no_include <ares_version.h>
|
25
26
|
// IWYU pragma: no_include <arpa/inet.h>
|
26
27
|
// IWYU pragma: no_include <arpa/nameser.h>
|
27
28
|
// IWYU pragma: no_include <inttypes.h>
|
@@ -33,7 +34,15 @@
|
|
33
34
|
|
34
35
|
#if GRPC_ARES == 1
|
35
36
|
|
37
|
+
#include <ares.h>
|
38
|
+
|
39
|
+
#if ARES_VERSION >= 0x011200
|
40
|
+
// c-ares 1.18.0 or later starts to provide ares_nameser.h as a public header.
|
36
41
|
#include <ares_nameser.h>
|
42
|
+
#else
|
43
|
+
#include "src/core/lib/event_engine/nameser.h" // IWYU pragma: keep
|
44
|
+
#endif
|
45
|
+
|
37
46
|
#include <string.h>
|
38
47
|
|
39
48
|
#include <algorithm>
|
@@ -0,0 +1,102 @@
|
|
1
|
+
// Copyright 2023 The gRPC Authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_NAMESER_H
|
16
|
+
#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_NAMESER_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include "src/core/lib/iomgr/port.h"
|
21
|
+
|
22
|
+
#ifdef GRPC_HAVE_ARPA_NAMESER
|
23
|
+
|
24
|
+
#include <arpa/nameser.h> // IWYU pragma: keep
|
25
|
+
|
26
|
+
#else // GRPC_HAVE_ARPA_NAMESER
|
27
|
+
|
28
|
+
typedef enum __ns_class {
|
29
|
+
ns_c_invalid = 0, // Cookie.
|
30
|
+
ns_c_in = 1, // Internet.
|
31
|
+
ns_c_2 = 2, // unallocated/unsupported.
|
32
|
+
ns_c_chaos = 3, // MIT Chaos-net.
|
33
|
+
ns_c_hs = 4, // MIT Hesiod.
|
34
|
+
// Query class values which do not appear in resource records
|
35
|
+
ns_c_none = 254, // for prereq. sections in update requests
|
36
|
+
ns_c_any = 255, // Wildcard match.
|
37
|
+
ns_c_max = 65536
|
38
|
+
} ns_class;
|
39
|
+
|
40
|
+
typedef enum __ns_type {
|
41
|
+
ns_t_invalid = 0, // Cookie.
|
42
|
+
ns_t_a = 1, // Host address.
|
43
|
+
ns_t_ns = 2, // Authoritative server.
|
44
|
+
ns_t_md = 3, // Mail destination.
|
45
|
+
ns_t_mf = 4, // Mail forwarder.
|
46
|
+
ns_t_cname = 5, // Canonical name.
|
47
|
+
ns_t_soa = 6, // Start of authority zone.
|
48
|
+
ns_t_mb = 7, // Mailbox domain name.
|
49
|
+
ns_t_mg = 8, // Mail group member.
|
50
|
+
ns_t_mr = 9, // Mail rename name.
|
51
|
+
ns_t_null = 10, // Null resource record.
|
52
|
+
ns_t_wks = 11, // Well known service.
|
53
|
+
ns_t_ptr = 12, // Domain name pointer.
|
54
|
+
ns_t_hinfo = 13, // Host information.
|
55
|
+
ns_t_minfo = 14, // Mailbox information.
|
56
|
+
ns_t_mx = 15, // Mail routing information.
|
57
|
+
ns_t_txt = 16, // Text strings.
|
58
|
+
ns_t_rp = 17, // Responsible person.
|
59
|
+
ns_t_afsdb = 18, // AFS cell database.
|
60
|
+
ns_t_x25 = 19, // X_25 calling address.
|
61
|
+
ns_t_isdn = 20, // ISDN calling address.
|
62
|
+
ns_t_rt = 21, // Router.
|
63
|
+
ns_t_nsap = 22, // NSAP address.
|
64
|
+
ns_t_nsap_ptr = 23, // Reverse NSAP lookup (deprecated).
|
65
|
+
ns_t_sig = 24, // Security signature.
|
66
|
+
ns_t_key = 25, // Security key.
|
67
|
+
ns_t_px = 26, // X.400 mail mapping.
|
68
|
+
ns_t_gpos = 27, // Geographical position (withdrawn).
|
69
|
+
ns_t_aaaa = 28, // Ip6 Address.
|
70
|
+
ns_t_loc = 29, // Location Information.
|
71
|
+
ns_t_nxt = 30, // Next domain (security).
|
72
|
+
ns_t_eid = 31, // Endpoint identifier.
|
73
|
+
ns_t_nimloc = 32, // Nimrod Locator.
|
74
|
+
ns_t_srv = 33, // Server Selection.
|
75
|
+
ns_t_atma = 34, // ATM Address
|
76
|
+
ns_t_naptr = 35, // Naming Authority PoinTeR
|
77
|
+
ns_t_kx = 36, // Key Exchange
|
78
|
+
ns_t_cert = 37, // Certification record
|
79
|
+
ns_t_a6 = 38, // IPv6 address (deprecates AAAA)
|
80
|
+
ns_t_dname = 39, // Non-terminal DNAME (for IPv6)
|
81
|
+
ns_t_sink = 40, // Kitchen sink (experimentatl)
|
82
|
+
ns_t_opt = 41, // EDNS0 option (meta-RR)
|
83
|
+
ns_t_apl = 42, // Address prefix list (RFC3123)
|
84
|
+
ns_t_ds = 43, // Delegation Signer (RFC4034)
|
85
|
+
ns_t_sshfp = 44, // SSH Key Fingerprint (RFC4255)
|
86
|
+
ns_t_rrsig = 46, // Resource Record Signature (RFC4034)
|
87
|
+
ns_t_nsec = 47, // Next Secure (RFC4034)
|
88
|
+
ns_t_dnskey = 48, // DNS Public Key (RFC4034)
|
89
|
+
ns_t_tkey = 249, // Transaction key
|
90
|
+
ns_t_tsig = 250, // Transaction signature.
|
91
|
+
ns_t_ixfr = 251, // Incremental zone transfer.
|
92
|
+
ns_t_axfr = 252, // Transfer zone of authority.
|
93
|
+
ns_t_mailb = 253, // Transfer mailbox records.
|
94
|
+
ns_t_maila = 254, // Transfer mail agent records.
|
95
|
+
ns_t_any = 255, // Wildcard match.
|
96
|
+
ns_t_zxfr = 256, // BIND-specific, nonstandard.
|
97
|
+
ns_t_max = 65536
|
98
|
+
} ns_type;
|
99
|
+
|
100
|
+
#endif // GRPC_HAVE_ARPA_NAMESER
|
101
|
+
|
102
|
+
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_NAMESER_H
|
@@ -15,237 +15,418 @@
|
|
15
15
|
// Auto generated by tools/codegen/core/gen_experiments.py
|
16
16
|
|
17
17
|
#include <grpc/support/port_platform.h>
|
18
|
+
|
18
19
|
#include "src/core/lib/experiments/experiments.h"
|
19
20
|
|
20
21
|
#ifndef GRPC_EXPERIMENTS_ARE_FINAL
|
21
22
|
|
22
23
|
#if defined(GRPC_CFSTREAM)
|
23
24
|
namespace {
|
24
|
-
const char* const description_tcp_frame_size_tuning =
|
25
|
+
const char* const description_tcp_frame_size_tuning =
|
26
|
+
"If set, enables TCP to use RPC size estimation made by higher layers. TCP "
|
27
|
+
"would not indicate completion of a read operation until a specified "
|
28
|
+
"number of bytes have been read over the socket. Buffers are also "
|
29
|
+
"allocated according to estimated RPC sizes.";
|
25
30
|
const char* const additional_constraints_tcp_frame_size_tuning = "{}";
|
26
|
-
const char* const description_tcp_rcv_lowat =
|
31
|
+
const char* const description_tcp_rcv_lowat =
|
32
|
+
"Use SO_RCVLOWAT to avoid wakeups on the read path.";
|
27
33
|
const char* const additional_constraints_tcp_rcv_lowat = "{}";
|
28
|
-
const char* const description_peer_state_based_framing =
|
34
|
+
const char* const description_peer_state_based_framing =
|
35
|
+
"If set, the max sizes of frames sent to lower layers is controlled based "
|
36
|
+
"on the peer's memory pressure which is reflected in its max http2 frame "
|
37
|
+
"size.";
|
29
38
|
const char* const additional_constraints_peer_state_based_framing = "{}";
|
30
|
-
const char* const description_memory_pressure_controller =
|
39
|
+
const char* const description_memory_pressure_controller =
|
40
|
+
"New memory pressure controller";
|
31
41
|
const char* const additional_constraints_memory_pressure_controller = "{}";
|
32
|
-
const char* const description_unconstrained_max_quota_buffer_size =
|
33
|
-
|
34
|
-
const char* const
|
42
|
+
const char* const description_unconstrained_max_quota_buffer_size =
|
43
|
+
"Discard the cap on the max free pool size for one memory allocator";
|
44
|
+
const char* const additional_constraints_unconstrained_max_quota_buffer_size =
|
45
|
+
"{}";
|
46
|
+
const char* const description_event_engine_client =
|
47
|
+
"Use EventEngine clients instead of iomgr's grpc_tcp_client";
|
35
48
|
const char* const additional_constraints_event_engine_client = "{}";
|
36
|
-
const char* const description_monitoring_experiment =
|
49
|
+
const char* const description_monitoring_experiment =
|
50
|
+
"Placeholder experiment to prove/disprove our monitoring is working";
|
37
51
|
const char* const additional_constraints_monitoring_experiment = "{}";
|
38
|
-
const char* const description_promise_based_client_call =
|
52
|
+
const char* const description_promise_based_client_call =
|
53
|
+
"If set, use the new gRPC promise based call code when it's appropriate "
|
54
|
+
"(ie when all filters in a stack are promise based)";
|
39
55
|
const char* const additional_constraints_promise_based_client_call = "{}";
|
40
|
-
const char* const description_free_large_allocator =
|
56
|
+
const char* const description_free_large_allocator =
|
57
|
+
"If set, return all free bytes from a \042big\042 allocator";
|
41
58
|
const char* const additional_constraints_free_large_allocator = "{}";
|
42
|
-
const char* const description_promise_based_server_call =
|
59
|
+
const char* const description_promise_based_server_call =
|
60
|
+
"If set, use the new gRPC promise based call code when it's appropriate "
|
61
|
+
"(ie when all filters in a stack are promise based)";
|
43
62
|
const char* const additional_constraints_promise_based_server_call = "{}";
|
44
|
-
const char* const description_transport_supplies_client_latency =
|
45
|
-
|
46
|
-
|
63
|
+
const char* const description_transport_supplies_client_latency =
|
64
|
+
"If set, use the transport represented value for client latency in "
|
65
|
+
"opencensus";
|
66
|
+
const char* const additional_constraints_transport_supplies_client_latency =
|
67
|
+
"{}";
|
68
|
+
const char* const description_event_engine_listener =
|
69
|
+
"Use EventEngine listeners instead of iomgr's grpc_tcp_server";
|
47
70
|
const char* const additional_constraints_event_engine_listener = "{}";
|
48
|
-
const char* const description_schedule_cancellation_over_write =
|
49
|
-
|
50
|
-
const char* const
|
71
|
+
const char* const description_schedule_cancellation_over_write =
|
72
|
+
"Allow cancellation op to be scheduled over a write";
|
73
|
+
const char* const additional_constraints_schedule_cancellation_over_write =
|
74
|
+
"{}";
|
75
|
+
const char* const description_trace_record_callops =
|
76
|
+
"Enables tracing of call batch initiation and completion.";
|
51
77
|
const char* const additional_constraints_trace_record_callops = "{}";
|
52
|
-
const char* const description_event_engine_dns =
|
78
|
+
const char* const description_event_engine_dns =
|
79
|
+
"If set, use EventEngine DNSResolver for client channel resolution";
|
53
80
|
const char* const additional_constraints_event_engine_dns = "{}";
|
54
|
-
const char* const description_work_stealing =
|
81
|
+
const char* const description_work_stealing =
|
82
|
+
"If set, use a work stealing thread pool implementation in EventEngine";
|
55
83
|
const char* const additional_constraints_work_stealing = "{}";
|
56
84
|
const char* const description_client_privacy = "If set, client privacy";
|
57
85
|
const char* const additional_constraints_client_privacy = "{}";
|
58
|
-
const char* const description_canary_client_privacy =
|
86
|
+
const char* const description_canary_client_privacy =
|
87
|
+
"If set, canary client privacy";
|
59
88
|
const char* const additional_constraints_canary_client_privacy = "{}";
|
60
89
|
const char* const description_server_privacy = "If set, server privacy";
|
61
90
|
const char* const additional_constraints_server_privacy = "{}";
|
62
|
-
const char* const description_unique_metadata_strings =
|
91
|
+
const char* const description_unique_metadata_strings =
|
92
|
+
"Ensure a unique copy of strings from parsed metadata are taken. The "
|
93
|
+
"hypothesis here is that ref counting these are causing read buffer "
|
94
|
+
"lifetimes to be extended leading to memory bloat.";
|
63
95
|
const char* const additional_constraints_unique_metadata_strings = "{}";
|
64
|
-
const char* const description_keepalive_fix =
|
96
|
+
const char* const description_keepalive_fix =
|
97
|
+
"Allows overriding keepalive_permit_without_calls. Refer "
|
98
|
+
"https://github.com/grpc/grpc/pull/33428 for more information.";
|
65
99
|
const char* const additional_constraints_keepalive_fix = "{}";
|
66
|
-
const char* const description_keepalive_server_fix =
|
100
|
+
const char* const description_keepalive_server_fix =
|
101
|
+
"Allows overriding keepalive_permit_without_calls for servers. Refer "
|
102
|
+
"https://github.com/grpc/grpc/pull/33917 for more information.";
|
67
103
|
const char* const additional_constraints_keepalive_server_fix = "{}";
|
68
|
-
}
|
104
|
+
} // namespace
|
69
105
|
|
70
106
|
namespace grpc_core {
|
71
107
|
|
72
108
|
const ExperimentMetadata g_experiment_metadata[] = {
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
109
|
+
{"tcp_frame_size_tuning", description_tcp_frame_size_tuning,
|
110
|
+
additional_constraints_tcp_frame_size_tuning, false, true},
|
111
|
+
{"tcp_rcv_lowat", description_tcp_rcv_lowat,
|
112
|
+
additional_constraints_tcp_rcv_lowat, false, true},
|
113
|
+
{"peer_state_based_framing", description_peer_state_based_framing,
|
114
|
+
additional_constraints_peer_state_based_framing, false, true},
|
115
|
+
{"memory_pressure_controller", description_memory_pressure_controller,
|
116
|
+
additional_constraints_memory_pressure_controller, false, true},
|
117
|
+
{"unconstrained_max_quota_buffer_size",
|
118
|
+
description_unconstrained_max_quota_buffer_size,
|
119
|
+
additional_constraints_unconstrained_max_quota_buffer_size, false, true},
|
120
|
+
{"event_engine_client", description_event_engine_client,
|
121
|
+
additional_constraints_event_engine_client, false, true},
|
122
|
+
{"monitoring_experiment", description_monitoring_experiment,
|
123
|
+
additional_constraints_monitoring_experiment, true, true},
|
124
|
+
{"promise_based_client_call", description_promise_based_client_call,
|
125
|
+
additional_constraints_promise_based_client_call, false, true},
|
126
|
+
{"free_large_allocator", description_free_large_allocator,
|
127
|
+
additional_constraints_free_large_allocator, false, true},
|
128
|
+
{"promise_based_server_call", description_promise_based_server_call,
|
129
|
+
additional_constraints_promise_based_server_call, false, true},
|
130
|
+
{"transport_supplies_client_latency",
|
131
|
+
description_transport_supplies_client_latency,
|
132
|
+
additional_constraints_transport_supplies_client_latency, false, true},
|
133
|
+
{"event_engine_listener", description_event_engine_listener,
|
134
|
+
additional_constraints_event_engine_listener, false, true},
|
135
|
+
{"schedule_cancellation_over_write",
|
136
|
+
description_schedule_cancellation_over_write,
|
137
|
+
additional_constraints_schedule_cancellation_over_write, false, true},
|
138
|
+
{"trace_record_callops", description_trace_record_callops,
|
139
|
+
additional_constraints_trace_record_callops, false, true},
|
140
|
+
{"event_engine_dns", description_event_engine_dns,
|
141
|
+
additional_constraints_event_engine_dns, false, false},
|
142
|
+
{"work_stealing", description_work_stealing,
|
143
|
+
additional_constraints_work_stealing, false, false},
|
144
|
+
{"client_privacy", description_client_privacy,
|
145
|
+
additional_constraints_client_privacy, false, false},
|
146
|
+
{"canary_client_privacy", description_canary_client_privacy,
|
147
|
+
additional_constraints_canary_client_privacy, false, false},
|
148
|
+
{"server_privacy", description_server_privacy,
|
149
|
+
additional_constraints_server_privacy, false, false},
|
150
|
+
{"unique_metadata_strings", description_unique_metadata_strings,
|
151
|
+
additional_constraints_unique_metadata_strings, true, true},
|
152
|
+
{"keepalive_fix", description_keepalive_fix,
|
153
|
+
additional_constraints_keepalive_fix, false, false},
|
154
|
+
{"keepalive_server_fix", description_keepalive_server_fix,
|
155
|
+
additional_constraints_keepalive_server_fix, false, false},
|
95
156
|
};
|
96
157
|
|
97
158
|
} // namespace grpc_core
|
98
159
|
|
99
160
|
#elif defined(GPR_WINDOWS)
|
100
161
|
namespace {
|
101
|
-
const char* const description_tcp_frame_size_tuning =
|
162
|
+
const char* const description_tcp_frame_size_tuning =
|
163
|
+
"If set, enables TCP to use RPC size estimation made by higher layers. TCP "
|
164
|
+
"would not indicate completion of a read operation until a specified "
|
165
|
+
"number of bytes have been read over the socket. Buffers are also "
|
166
|
+
"allocated according to estimated RPC sizes.";
|
102
167
|
const char* const additional_constraints_tcp_frame_size_tuning = "{}";
|
103
|
-
const char* const description_tcp_rcv_lowat =
|
168
|
+
const char* const description_tcp_rcv_lowat =
|
169
|
+
"Use SO_RCVLOWAT to avoid wakeups on the read path.";
|
104
170
|
const char* const additional_constraints_tcp_rcv_lowat = "{}";
|
105
|
-
const char* const description_peer_state_based_framing =
|
171
|
+
const char* const description_peer_state_based_framing =
|
172
|
+
"If set, the max sizes of frames sent to lower layers is controlled based "
|
173
|
+
"on the peer's memory pressure which is reflected in its max http2 frame "
|
174
|
+
"size.";
|
106
175
|
const char* const additional_constraints_peer_state_based_framing = "{}";
|
107
|
-
const char* const description_memory_pressure_controller =
|
176
|
+
const char* const description_memory_pressure_controller =
|
177
|
+
"New memory pressure controller";
|
108
178
|
const char* const additional_constraints_memory_pressure_controller = "{}";
|
109
|
-
const char* const description_unconstrained_max_quota_buffer_size =
|
110
|
-
|
111
|
-
const char* const
|
179
|
+
const char* const description_unconstrained_max_quota_buffer_size =
|
180
|
+
"Discard the cap on the max free pool size for one memory allocator";
|
181
|
+
const char* const additional_constraints_unconstrained_max_quota_buffer_size =
|
182
|
+
"{}";
|
183
|
+
const char* const description_event_engine_client =
|
184
|
+
"Use EventEngine clients instead of iomgr's grpc_tcp_client";
|
112
185
|
const char* const additional_constraints_event_engine_client = "{}";
|
113
|
-
const char* const description_monitoring_experiment =
|
186
|
+
const char* const description_monitoring_experiment =
|
187
|
+
"Placeholder experiment to prove/disprove our monitoring is working";
|
114
188
|
const char* const additional_constraints_monitoring_experiment = "{}";
|
115
|
-
const char* const description_promise_based_client_call =
|
189
|
+
const char* const description_promise_based_client_call =
|
190
|
+
"If set, use the new gRPC promise based call code when it's appropriate "
|
191
|
+
"(ie when all filters in a stack are promise based)";
|
116
192
|
const char* const additional_constraints_promise_based_client_call = "{}";
|
117
|
-
const char* const description_free_large_allocator =
|
193
|
+
const char* const description_free_large_allocator =
|
194
|
+
"If set, return all free bytes from a \042big\042 allocator";
|
118
195
|
const char* const additional_constraints_free_large_allocator = "{}";
|
119
|
-
const char* const description_promise_based_server_call =
|
196
|
+
const char* const description_promise_based_server_call =
|
197
|
+
"If set, use the new gRPC promise based call code when it's appropriate "
|
198
|
+
"(ie when all filters in a stack are promise based)";
|
120
199
|
const char* const additional_constraints_promise_based_server_call = "{}";
|
121
|
-
const char* const description_transport_supplies_client_latency =
|
122
|
-
|
123
|
-
|
200
|
+
const char* const description_transport_supplies_client_latency =
|
201
|
+
"If set, use the transport represented value for client latency in "
|
202
|
+
"opencensus";
|
203
|
+
const char* const additional_constraints_transport_supplies_client_latency =
|
204
|
+
"{}";
|
205
|
+
const char* const description_event_engine_listener =
|
206
|
+
"Use EventEngine listeners instead of iomgr's grpc_tcp_server";
|
124
207
|
const char* const additional_constraints_event_engine_listener = "{}";
|
125
|
-
const char* const description_schedule_cancellation_over_write =
|
126
|
-
|
127
|
-
const char* const
|
208
|
+
const char* const description_schedule_cancellation_over_write =
|
209
|
+
"Allow cancellation op to be scheduled over a write";
|
210
|
+
const char* const additional_constraints_schedule_cancellation_over_write =
|
211
|
+
"{}";
|
212
|
+
const char* const description_trace_record_callops =
|
213
|
+
"Enables tracing of call batch initiation and completion.";
|
128
214
|
const char* const additional_constraints_trace_record_callops = "{}";
|
129
|
-
const char* const description_event_engine_dns =
|
215
|
+
const char* const description_event_engine_dns =
|
216
|
+
"If set, use EventEngine DNSResolver for client channel resolution";
|
130
217
|
const char* const additional_constraints_event_engine_dns = "{}";
|
131
|
-
const char* const description_work_stealing =
|
218
|
+
const char* const description_work_stealing =
|
219
|
+
"If set, use a work stealing thread pool implementation in EventEngine";
|
132
220
|
const char* const additional_constraints_work_stealing = "{}";
|
133
221
|
const char* const description_client_privacy = "If set, client privacy";
|
134
222
|
const char* const additional_constraints_client_privacy = "{}";
|
135
|
-
const char* const description_canary_client_privacy =
|
223
|
+
const char* const description_canary_client_privacy =
|
224
|
+
"If set, canary client privacy";
|
136
225
|
const char* const additional_constraints_canary_client_privacy = "{}";
|
137
226
|
const char* const description_server_privacy = "If set, server privacy";
|
138
227
|
const char* const additional_constraints_server_privacy = "{}";
|
139
|
-
const char* const description_unique_metadata_strings =
|
228
|
+
const char* const description_unique_metadata_strings =
|
229
|
+
"Ensure a unique copy of strings from parsed metadata are taken. The "
|
230
|
+
"hypothesis here is that ref counting these are causing read buffer "
|
231
|
+
"lifetimes to be extended leading to memory bloat.";
|
140
232
|
const char* const additional_constraints_unique_metadata_strings = "{}";
|
141
|
-
const char* const description_keepalive_fix =
|
233
|
+
const char* const description_keepalive_fix =
|
234
|
+
"Allows overriding keepalive_permit_without_calls. Refer "
|
235
|
+
"https://github.com/grpc/grpc/pull/33428 for more information.";
|
142
236
|
const char* const additional_constraints_keepalive_fix = "{}";
|
143
|
-
const char* const description_keepalive_server_fix =
|
237
|
+
const char* const description_keepalive_server_fix =
|
238
|
+
"Allows overriding keepalive_permit_without_calls for servers. Refer "
|
239
|
+
"https://github.com/grpc/grpc/pull/33917 for more information.";
|
144
240
|
const char* const additional_constraints_keepalive_server_fix = "{}";
|
145
|
-
}
|
241
|
+
} // namespace
|
146
242
|
|
147
243
|
namespace grpc_core {
|
148
244
|
|
149
245
|
const ExperimentMetadata g_experiment_metadata[] = {
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
246
|
+
{"tcp_frame_size_tuning", description_tcp_frame_size_tuning,
|
247
|
+
additional_constraints_tcp_frame_size_tuning, false, true},
|
248
|
+
{"tcp_rcv_lowat", description_tcp_rcv_lowat,
|
249
|
+
additional_constraints_tcp_rcv_lowat, false, true},
|
250
|
+
{"peer_state_based_framing", description_peer_state_based_framing,
|
251
|
+
additional_constraints_peer_state_based_framing, false, true},
|
252
|
+
{"memory_pressure_controller", description_memory_pressure_controller,
|
253
|
+
additional_constraints_memory_pressure_controller, false, true},
|
254
|
+
{"unconstrained_max_quota_buffer_size",
|
255
|
+
description_unconstrained_max_quota_buffer_size,
|
256
|
+
additional_constraints_unconstrained_max_quota_buffer_size, false, true},
|
257
|
+
{"event_engine_client", description_event_engine_client,
|
258
|
+
additional_constraints_event_engine_client, false, true},
|
259
|
+
{"monitoring_experiment", description_monitoring_experiment,
|
260
|
+
additional_constraints_monitoring_experiment, true, true},
|
261
|
+
{"promise_based_client_call", description_promise_based_client_call,
|
262
|
+
additional_constraints_promise_based_client_call, false, true},
|
263
|
+
{"free_large_allocator", description_free_large_allocator,
|
264
|
+
additional_constraints_free_large_allocator, false, true},
|
265
|
+
{"promise_based_server_call", description_promise_based_server_call,
|
266
|
+
additional_constraints_promise_based_server_call, false, true},
|
267
|
+
{"transport_supplies_client_latency",
|
268
|
+
description_transport_supplies_client_latency,
|
269
|
+
additional_constraints_transport_supplies_client_latency, false, true},
|
270
|
+
{"event_engine_listener", description_event_engine_listener,
|
271
|
+
additional_constraints_event_engine_listener, false, true},
|
272
|
+
{"schedule_cancellation_over_write",
|
273
|
+
description_schedule_cancellation_over_write,
|
274
|
+
additional_constraints_schedule_cancellation_over_write, false, true},
|
275
|
+
{"trace_record_callops", description_trace_record_callops,
|
276
|
+
additional_constraints_trace_record_callops, false, true},
|
277
|
+
{"event_engine_dns", description_event_engine_dns,
|
278
|
+
additional_constraints_event_engine_dns, false, false},
|
279
|
+
{"work_stealing", description_work_stealing,
|
280
|
+
additional_constraints_work_stealing, false, false},
|
281
|
+
{"client_privacy", description_client_privacy,
|
282
|
+
additional_constraints_client_privacy, false, false},
|
283
|
+
{"canary_client_privacy", description_canary_client_privacy,
|
284
|
+
additional_constraints_canary_client_privacy, false, false},
|
285
|
+
{"server_privacy", description_server_privacy,
|
286
|
+
additional_constraints_server_privacy, false, false},
|
287
|
+
{"unique_metadata_strings", description_unique_metadata_strings,
|
288
|
+
additional_constraints_unique_metadata_strings, true, true},
|
289
|
+
{"keepalive_fix", description_keepalive_fix,
|
290
|
+
additional_constraints_keepalive_fix, false, false},
|
291
|
+
{"keepalive_server_fix", description_keepalive_server_fix,
|
292
|
+
additional_constraints_keepalive_server_fix, false, false},
|
172
293
|
};
|
173
294
|
|
174
295
|
} // namespace grpc_core
|
175
296
|
|
176
297
|
#else
|
177
298
|
namespace {
|
178
|
-
const char* const description_tcp_frame_size_tuning =
|
299
|
+
const char* const description_tcp_frame_size_tuning =
|
300
|
+
"If set, enables TCP to use RPC size estimation made by higher layers. TCP "
|
301
|
+
"would not indicate completion of a read operation until a specified "
|
302
|
+
"number of bytes have been read over the socket. Buffers are also "
|
303
|
+
"allocated according to estimated RPC sizes.";
|
179
304
|
const char* const additional_constraints_tcp_frame_size_tuning = "{}";
|
180
|
-
const char* const description_tcp_rcv_lowat =
|
305
|
+
const char* const description_tcp_rcv_lowat =
|
306
|
+
"Use SO_RCVLOWAT to avoid wakeups on the read path.";
|
181
307
|
const char* const additional_constraints_tcp_rcv_lowat = "{}";
|
182
|
-
const char* const description_peer_state_based_framing =
|
308
|
+
const char* const description_peer_state_based_framing =
|
309
|
+
"If set, the max sizes of frames sent to lower layers is controlled based "
|
310
|
+
"on the peer's memory pressure which is reflected in its max http2 frame "
|
311
|
+
"size.";
|
183
312
|
const char* const additional_constraints_peer_state_based_framing = "{}";
|
184
|
-
const char* const description_memory_pressure_controller =
|
313
|
+
const char* const description_memory_pressure_controller =
|
314
|
+
"New memory pressure controller";
|
185
315
|
const char* const additional_constraints_memory_pressure_controller = "{}";
|
186
|
-
const char* const description_unconstrained_max_quota_buffer_size =
|
187
|
-
|
188
|
-
const char* const
|
316
|
+
const char* const description_unconstrained_max_quota_buffer_size =
|
317
|
+
"Discard the cap on the max free pool size for one memory allocator";
|
318
|
+
const char* const additional_constraints_unconstrained_max_quota_buffer_size =
|
319
|
+
"{}";
|
320
|
+
const char* const description_event_engine_client =
|
321
|
+
"Use EventEngine clients instead of iomgr's grpc_tcp_client";
|
189
322
|
const char* const additional_constraints_event_engine_client = "{}";
|
190
|
-
const char* const description_monitoring_experiment =
|
323
|
+
const char* const description_monitoring_experiment =
|
324
|
+
"Placeholder experiment to prove/disprove our monitoring is working";
|
191
325
|
const char* const additional_constraints_monitoring_experiment = "{}";
|
192
|
-
const char* const description_promise_based_client_call =
|
326
|
+
const char* const description_promise_based_client_call =
|
327
|
+
"If set, use the new gRPC promise based call code when it's appropriate "
|
328
|
+
"(ie when all filters in a stack are promise based)";
|
193
329
|
const char* const additional_constraints_promise_based_client_call = "{}";
|
194
|
-
const char* const description_free_large_allocator =
|
330
|
+
const char* const description_free_large_allocator =
|
331
|
+
"If set, return all free bytes from a \042big\042 allocator";
|
195
332
|
const char* const additional_constraints_free_large_allocator = "{}";
|
196
|
-
const char* const description_promise_based_server_call =
|
333
|
+
const char* const description_promise_based_server_call =
|
334
|
+
"If set, use the new gRPC promise based call code when it's appropriate "
|
335
|
+
"(ie when all filters in a stack are promise based)";
|
197
336
|
const char* const additional_constraints_promise_based_server_call = "{}";
|
198
|
-
const char* const description_transport_supplies_client_latency =
|
199
|
-
|
200
|
-
|
337
|
+
const char* const description_transport_supplies_client_latency =
|
338
|
+
"If set, use the transport represented value for client latency in "
|
339
|
+
"opencensus";
|
340
|
+
const char* const additional_constraints_transport_supplies_client_latency =
|
341
|
+
"{}";
|
342
|
+
const char* const description_event_engine_listener =
|
343
|
+
"Use EventEngine listeners instead of iomgr's grpc_tcp_server";
|
201
344
|
const char* const additional_constraints_event_engine_listener = "{}";
|
202
|
-
const char* const description_schedule_cancellation_over_write =
|
203
|
-
|
204
|
-
const char* const
|
345
|
+
const char* const description_schedule_cancellation_over_write =
|
346
|
+
"Allow cancellation op to be scheduled over a write";
|
347
|
+
const char* const additional_constraints_schedule_cancellation_over_write =
|
348
|
+
"{}";
|
349
|
+
const char* const description_trace_record_callops =
|
350
|
+
"Enables tracing of call batch initiation and completion.";
|
205
351
|
const char* const additional_constraints_trace_record_callops = "{}";
|
206
|
-
const char* const description_event_engine_dns =
|
352
|
+
const char* const description_event_engine_dns =
|
353
|
+
"If set, use EventEngine DNSResolver for client channel resolution";
|
207
354
|
const char* const additional_constraints_event_engine_dns = "{}";
|
208
|
-
const char* const description_work_stealing =
|
355
|
+
const char* const description_work_stealing =
|
356
|
+
"If set, use a work stealing thread pool implementation in EventEngine";
|
209
357
|
const char* const additional_constraints_work_stealing = "{}";
|
210
358
|
const char* const description_client_privacy = "If set, client privacy";
|
211
359
|
const char* const additional_constraints_client_privacy = "{}";
|
212
|
-
const char* const description_canary_client_privacy =
|
360
|
+
const char* const description_canary_client_privacy =
|
361
|
+
"If set, canary client privacy";
|
213
362
|
const char* const additional_constraints_canary_client_privacy = "{}";
|
214
363
|
const char* const description_server_privacy = "If set, server privacy";
|
215
364
|
const char* const additional_constraints_server_privacy = "{}";
|
216
|
-
const char* const description_unique_metadata_strings =
|
365
|
+
const char* const description_unique_metadata_strings =
|
366
|
+
"Ensure a unique copy of strings from parsed metadata are taken. The "
|
367
|
+
"hypothesis here is that ref counting these are causing read buffer "
|
368
|
+
"lifetimes to be extended leading to memory bloat.";
|
217
369
|
const char* const additional_constraints_unique_metadata_strings = "{}";
|
218
|
-
const char* const description_keepalive_fix =
|
370
|
+
const char* const description_keepalive_fix =
|
371
|
+
"Allows overriding keepalive_permit_without_calls. Refer "
|
372
|
+
"https://github.com/grpc/grpc/pull/33428 for more information.";
|
219
373
|
const char* const additional_constraints_keepalive_fix = "{}";
|
220
|
-
const char* const description_keepalive_server_fix =
|
374
|
+
const char* const description_keepalive_server_fix =
|
375
|
+
"Allows overriding keepalive_permit_without_calls for servers. Refer "
|
376
|
+
"https://github.com/grpc/grpc/pull/33917 for more information.";
|
221
377
|
const char* const additional_constraints_keepalive_server_fix = "{}";
|
222
|
-
}
|
378
|
+
} // namespace
|
223
379
|
|
224
380
|
namespace grpc_core {
|
225
381
|
|
226
382
|
const ExperimentMetadata g_experiment_metadata[] = {
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
383
|
+
{"tcp_frame_size_tuning", description_tcp_frame_size_tuning,
|
384
|
+
additional_constraints_tcp_frame_size_tuning, false, true},
|
385
|
+
{"tcp_rcv_lowat", description_tcp_rcv_lowat,
|
386
|
+
additional_constraints_tcp_rcv_lowat, false, true},
|
387
|
+
{"peer_state_based_framing", description_peer_state_based_framing,
|
388
|
+
additional_constraints_peer_state_based_framing, false, true},
|
389
|
+
{"memory_pressure_controller", description_memory_pressure_controller,
|
390
|
+
additional_constraints_memory_pressure_controller, false, true},
|
391
|
+
{"unconstrained_max_quota_buffer_size",
|
392
|
+
description_unconstrained_max_quota_buffer_size,
|
393
|
+
additional_constraints_unconstrained_max_quota_buffer_size, false, true},
|
394
|
+
{"event_engine_client", description_event_engine_client,
|
395
|
+
additional_constraints_event_engine_client, false, true},
|
396
|
+
{"monitoring_experiment", description_monitoring_experiment,
|
397
|
+
additional_constraints_monitoring_experiment, true, true},
|
398
|
+
{"promise_based_client_call", description_promise_based_client_call,
|
399
|
+
additional_constraints_promise_based_client_call, false, true},
|
400
|
+
{"free_large_allocator", description_free_large_allocator,
|
401
|
+
additional_constraints_free_large_allocator, false, true},
|
402
|
+
{"promise_based_server_call", description_promise_based_server_call,
|
403
|
+
additional_constraints_promise_based_server_call, false, true},
|
404
|
+
{"transport_supplies_client_latency",
|
405
|
+
description_transport_supplies_client_latency,
|
406
|
+
additional_constraints_transport_supplies_client_latency, false, true},
|
407
|
+
{"event_engine_listener", description_event_engine_listener,
|
408
|
+
additional_constraints_event_engine_listener, false, true},
|
409
|
+
{"schedule_cancellation_over_write",
|
410
|
+
description_schedule_cancellation_over_write,
|
411
|
+
additional_constraints_schedule_cancellation_over_write, false, true},
|
412
|
+
{"trace_record_callops", description_trace_record_callops,
|
413
|
+
additional_constraints_trace_record_callops, false, true},
|
414
|
+
{"event_engine_dns", description_event_engine_dns,
|
415
|
+
additional_constraints_event_engine_dns, false, false},
|
416
|
+
{"work_stealing", description_work_stealing,
|
417
|
+
additional_constraints_work_stealing, false, false},
|
418
|
+
{"client_privacy", description_client_privacy,
|
419
|
+
additional_constraints_client_privacy, false, false},
|
420
|
+
{"canary_client_privacy", description_canary_client_privacy,
|
421
|
+
additional_constraints_canary_client_privacy, false, false},
|
422
|
+
{"server_privacy", description_server_privacy,
|
423
|
+
additional_constraints_server_privacy, false, false},
|
424
|
+
{"unique_metadata_strings", description_unique_metadata_strings,
|
425
|
+
additional_constraints_unique_metadata_strings, true, true},
|
426
|
+
{"keepalive_fix", description_keepalive_fix,
|
427
|
+
additional_constraints_keepalive_fix, false, false},
|
428
|
+
{"keepalive_server_fix", description_keepalive_server_fix,
|
429
|
+
additional_constraints_keepalive_server_fix, false, false},
|
249
430
|
};
|
250
431
|
|
251
432
|
} // namespace grpc_core
|
@@ -51,6 +51,7 @@
|
|
51
51
|
#include <grpc/support/port_platform.h>
|
52
52
|
|
53
53
|
#include <stddef.h>
|
54
|
+
|
54
55
|
#include "src/core/lib/experiments/config.h"
|
55
56
|
|
56
57
|
namespace grpc_core {
|
@@ -144,9 +145,13 @@ inline bool IsTcpRcvLowatEnabled() { return IsExperimentEnabled(1); }
|
|
144
145
|
#define GRPC_EXPERIMENT_IS_INCLUDED_PEER_STATE_BASED_FRAMING
|
145
146
|
inline bool IsPeerStateBasedFramingEnabled() { return IsExperimentEnabled(2); }
|
146
147
|
#define GRPC_EXPERIMENT_IS_INCLUDED_MEMORY_PRESSURE_CONTROLLER
|
147
|
-
inline bool IsMemoryPressureControllerEnabled() {
|
148
|
+
inline bool IsMemoryPressureControllerEnabled() {
|
149
|
+
return IsExperimentEnabled(3);
|
150
|
+
}
|
148
151
|
#define GRPC_EXPERIMENT_IS_INCLUDED_UNCONSTRAINED_MAX_QUOTA_BUFFER_SIZE
|
149
|
-
inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() {
|
152
|
+
inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() {
|
153
|
+
return IsExperimentEnabled(4);
|
154
|
+
}
|
150
155
|
#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CLIENT
|
151
156
|
inline bool IsEventEngineClientEnabled() { return IsExperimentEnabled(5); }
|
152
157
|
#define GRPC_EXPERIMENT_IS_INCLUDED_MONITORING_EXPERIMENT
|
@@ -158,11 +163,15 @@ inline bool IsFreeLargeAllocatorEnabled() { return IsExperimentEnabled(8); }
|
|
158
163
|
#define GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_SERVER_CALL
|
159
164
|
inline bool IsPromiseBasedServerCallEnabled() { return IsExperimentEnabled(9); }
|
160
165
|
#define GRPC_EXPERIMENT_IS_INCLUDED_TRANSPORT_SUPPLIES_CLIENT_LATENCY
|
161
|
-
inline bool IsTransportSuppliesClientLatencyEnabled() {
|
166
|
+
inline bool IsTransportSuppliesClientLatencyEnabled() {
|
167
|
+
return IsExperimentEnabled(10);
|
168
|
+
}
|
162
169
|
#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER
|
163
170
|
inline bool IsEventEngineListenerEnabled() { return IsExperimentEnabled(11); }
|
164
171
|
#define GRPC_EXPERIMENT_IS_INCLUDED_SCHEDULE_CANCELLATION_OVER_WRITE
|
165
|
-
inline bool IsScheduleCancellationOverWriteEnabled() {
|
172
|
+
inline bool IsScheduleCancellationOverWriteEnabled() {
|
173
|
+
return IsExperimentEnabled(12);
|
174
|
+
}
|
166
175
|
#define GRPC_EXPERIMENT_IS_INCLUDED_TRACE_RECORD_CALLOPS
|
167
176
|
inline bool IsTraceRecordCallopsEnabled() { return IsExperimentEnabled(13); }
|
168
177
|
#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grpc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.58.
|
4
|
+
version: 1.58.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- gRPC Authors
|
8
8
|
autorequire:
|
9
9
|
bindir: src/ruby/bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-08-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google-protobuf
|
@@ -1250,6 +1250,7 @@ files:
|
|
1250
1250
|
- src/core/lib/event_engine/handle_containers.h
|
1251
1251
|
- src/core/lib/event_engine/memory_allocator.cc
|
1252
1252
|
- src/core/lib/event_engine/memory_allocator_factory.h
|
1253
|
+
- src/core/lib/event_engine/nameser.h
|
1253
1254
|
- src/core/lib/event_engine/poller.h
|
1254
1255
|
- src/core/lib/event_engine/posix.h
|
1255
1256
|
- src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
|
@@ -3269,7 +3270,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
3269
3270
|
- !ruby/object:Gem::Version
|
3270
3271
|
version: '0'
|
3271
3272
|
requirements: []
|
3272
|
-
rubygems_version: 3.
|
3273
|
+
rubygems_version: 3.5.17
|
3273
3274
|
signing_key:
|
3274
3275
|
specification_version: 4
|
3275
3276
|
summary: GRPC system in Ruby
|