grpc 1.82.0 → 1.82.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +1 -1
- data/etc/roots.pem +9008 -3936
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +25 -32
- data/src/core/ext/filters/http/message_compress/compression_filter.h +0 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +48 -3
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +34 -2
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +55 -23
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +6 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +8 -0
- data/src/core/lib/compression/message_compress.cc +132 -97
- data/src/core/lib/compression/message_compress.h +24 -0
- data/src/core/lib/experiments/experiments.cc +21 -6
- data/src/core/lib/experiments/experiments.h +23 -6
- data/src/ruby/lib/grpc/version.rb +1 -1
- metadata +2 -2
|
@@ -25,168 +25,203 @@
|
|
|
25
25
|
#include <zconf.h>
|
|
26
26
|
#include <zlib.h>
|
|
27
27
|
|
|
28
|
+
#include <algorithm>
|
|
29
|
+
#include <cstdint>
|
|
30
|
+
#include <optional>
|
|
31
|
+
|
|
28
32
|
#include "src/core/lib/slice/slice.h"
|
|
29
33
|
#include "src/core/util/grpc_check.h"
|
|
34
|
+
#include "src/core/util/status_helper.h"
|
|
30
35
|
#include "absl/log/log.h"
|
|
36
|
+
#include "absl/status/status.h"
|
|
37
|
+
#include "absl/status/statusor.h"
|
|
31
38
|
|
|
32
39
|
#define OUTPUT_BLOCK_SIZE 1024
|
|
33
40
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
41
|
+
namespace grpc_core {
|
|
42
|
+
namespace {
|
|
43
|
+
|
|
44
|
+
absl::StatusOr<SliceBuffer> ZlibBody(z_stream* zs, const SliceBuffer& input,
|
|
45
|
+
int (*flate)(z_stream* zs, int flush),
|
|
46
|
+
std::optional<uint32_t> max_output_size) {
|
|
37
47
|
int r = Z_STREAM_END; // Do not fail on an empty input.
|
|
38
48
|
int flush;
|
|
39
49
|
size_t i;
|
|
40
|
-
|
|
50
|
+
uint32_t remaining_output_size = max_output_size.value_or(UINT32_MAX);
|
|
51
|
+
SliceBuffer output_sb;
|
|
41
52
|
const uInt uint_max = ~uInt{0};
|
|
53
|
+
auto outbuf = MutableSlice::CreateUninitialized(
|
|
54
|
+
std::min<uint32_t>(remaining_output_size, OUTPUT_BLOCK_SIZE));
|
|
42
55
|
|
|
43
|
-
GRPC_CHECK(
|
|
44
|
-
zs->avail_out = static_cast<uInt>
|
|
45
|
-
zs->next_out =
|
|
56
|
+
GRPC_CHECK(outbuf.length() <= uint_max);
|
|
57
|
+
zs->avail_out = static_cast<uInt>(outbuf.length());
|
|
58
|
+
zs->next_out = const_cast<uint8_t*>(outbuf.begin());
|
|
46
59
|
flush = Z_NO_FLUSH;
|
|
47
|
-
for (i = 0; i < input
|
|
48
|
-
if (i == input
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
60
|
+
for (i = 0; i < input.Count(); i++) {
|
|
61
|
+
if (i == input.Count() - 1) {
|
|
62
|
+
flush = Z_FINISH;
|
|
63
|
+
}
|
|
64
|
+
GRPC_CHECK(input[i].length() <= uint_max);
|
|
65
|
+
zs->avail_in = static_cast<uInt>(input[i].length());
|
|
66
|
+
zs->next_in = const_cast<uint8_t*>(input[i].begin());
|
|
52
67
|
do {
|
|
53
68
|
if (zs->avail_out == 0) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
69
|
+
if (max_output_size.has_value() && remaining_output_size == 0) {
|
|
70
|
+
VLOG(2) << "zlib: max provided output size exceeded";
|
|
71
|
+
return absl::ResourceExhaustedError(
|
|
72
|
+
"Decompressed message larger than max");
|
|
73
|
+
}
|
|
74
|
+
output_sb.AppendIndexed(Slice(std::move(outbuf)));
|
|
75
|
+
outbuf = MutableSlice::CreateUninitialized(
|
|
76
|
+
std::min<uint32_t>(remaining_output_size, OUTPUT_BLOCK_SIZE));
|
|
77
|
+
// Update remaining output size to reflect the size of the slice we just
|
|
78
|
+
// filled with compressed / decompressed data.
|
|
79
|
+
if (max_output_size.has_value()) {
|
|
80
|
+
remaining_output_size -= outbuf.length();
|
|
81
|
+
}
|
|
82
|
+
GRPC_CHECK(outbuf.length() <= uint_max);
|
|
83
|
+
zs->avail_out = static_cast<uInt>(outbuf.length());
|
|
84
|
+
zs->next_out = const_cast<uint8_t*>(outbuf.begin());
|
|
59
85
|
}
|
|
60
86
|
r = flate(zs, flush);
|
|
61
87
|
if (r < 0 && r != Z_BUF_ERROR /* not fatal */) {
|
|
62
88
|
VLOG(2) << "zlib error (" << r << ")";
|
|
63
|
-
|
|
89
|
+
return absl::InternalError("Decompression failed due to zlib error");
|
|
64
90
|
}
|
|
65
91
|
} while (zs->avail_out == 0);
|
|
66
92
|
if (zs->avail_in) {
|
|
67
93
|
VLOG(2) << "zlib: not all input consumed";
|
|
68
|
-
|
|
94
|
+
return absl::InternalError(
|
|
95
|
+
"Decompression failed due to not all input "
|
|
96
|
+
"consumed");
|
|
69
97
|
}
|
|
70
98
|
}
|
|
71
99
|
if (r != Z_STREAM_END) {
|
|
72
100
|
VLOG(2) << "zlib: Data error";
|
|
73
|
-
|
|
101
|
+
return absl::InternalError("Decompression failed due to data error");
|
|
74
102
|
}
|
|
75
103
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
104
|
+
// TODO(vigneshbabu): Add a Truncate() method to the Slice type to avoid using
|
|
105
|
+
// the underlying C type here.
|
|
106
|
+
grpc_slice slice = outbuf.TakeCSlice();
|
|
107
|
+
if (slice.refcount) {
|
|
108
|
+
slice.data.refcounted.length -= zs->avail_out;
|
|
109
|
+
} else {
|
|
110
|
+
slice.data.inlined.length -= zs->avail_out;
|
|
111
|
+
}
|
|
112
|
+
output_sb.AppendIndexed(Slice(slice));
|
|
113
|
+
return output_sb;
|
|
85
114
|
}
|
|
86
115
|
|
|
87
|
-
|
|
88
|
-
unsigned int size) {
|
|
116
|
+
void* ZallocGpr(void* /*opaque*/, unsigned int items, unsigned int size) {
|
|
89
117
|
return gpr_malloc(items * size);
|
|
90
118
|
}
|
|
91
119
|
|
|
92
|
-
|
|
120
|
+
void ZFreeGpr(void* /*opaque*/, void* address) { gpr_free(address); }
|
|
93
121
|
|
|
94
|
-
|
|
95
|
-
int gzip) {
|
|
122
|
+
std::optional<SliceBuffer> ZlibCompress(const SliceBuffer& input, int gzip) {
|
|
96
123
|
z_stream zs;
|
|
97
|
-
|
|
98
|
-
size_t i;
|
|
99
|
-
size_t count_before = output->count;
|
|
100
|
-
size_t length_before = output->length;
|
|
124
|
+
absl::StatusOr<SliceBuffer> compression_result;
|
|
101
125
|
memset(&zs, 0, sizeof(zs));
|
|
102
|
-
zs.zalloc =
|
|
103
|
-
zs.zfree =
|
|
104
|
-
r = deflateInit2(&zs, Z_DEFAULT_COMPRESSION, Z_DEFLATED,
|
|
105
|
-
|
|
126
|
+
zs.zalloc = ZallocGpr;
|
|
127
|
+
zs.zfree = ZFreeGpr;
|
|
128
|
+
bool r = deflateInit2(&zs, Z_DEFAULT_COMPRESSION, Z_DEFLATED,
|
|
129
|
+
15 | (gzip ? 16 : 0), 8, Z_DEFAULT_STRATEGY);
|
|
106
130
|
GRPC_CHECK(r == Z_OK);
|
|
107
|
-
|
|
108
|
-
if (!r) {
|
|
109
|
-
for (i = count_before; i < output->count; i++) {
|
|
110
|
-
grpc_core::CSliceUnref(output->slices[i]);
|
|
111
|
-
}
|
|
112
|
-
output->count = count_before;
|
|
113
|
-
output->length = length_before;
|
|
114
|
-
}
|
|
131
|
+
compression_result = ZlibBody(&zs, input, deflate, input.Length());
|
|
115
132
|
deflateEnd(&zs);
|
|
116
|
-
|
|
133
|
+
if (compression_result.ok() &&
|
|
134
|
+
compression_result->Length() < input.Length()) {
|
|
135
|
+
return std::move(*compression_result);
|
|
136
|
+
}
|
|
137
|
+
return std::nullopt;
|
|
117
138
|
}
|
|
118
139
|
|
|
119
|
-
|
|
120
|
-
|
|
140
|
+
absl::StatusOr<SliceBuffer> ZlibDecompress(
|
|
141
|
+
const SliceBuffer& input, int gzip,
|
|
142
|
+
std::optional<uint32_t> max_output_size) {
|
|
121
143
|
z_stream zs;
|
|
122
|
-
|
|
123
|
-
size_t i;
|
|
124
|
-
size_t count_before = output->count;
|
|
125
|
-
size_t length_before = output->length;
|
|
144
|
+
absl::StatusOr<SliceBuffer> decompression_result;
|
|
126
145
|
memset(&zs, 0, sizeof(zs));
|
|
127
|
-
zs.zalloc =
|
|
128
|
-
zs.zfree =
|
|
129
|
-
r = inflateInit2(&zs, 15 | (gzip ? 16 : 0));
|
|
146
|
+
zs.zalloc = ZallocGpr;
|
|
147
|
+
zs.zfree = ZFreeGpr;
|
|
148
|
+
bool r = inflateInit2(&zs, 15 | (gzip ? 16 : 0));
|
|
130
149
|
GRPC_CHECK(r == Z_OK);
|
|
131
|
-
|
|
132
|
-
if (!r) {
|
|
133
|
-
for (i = count_before; i < output->count; i++) {
|
|
134
|
-
grpc_core::CSliceUnref(output->slices[i]);
|
|
135
|
-
}
|
|
136
|
-
output->count = count_before;
|
|
137
|
-
output->length = length_before;
|
|
138
|
-
}
|
|
150
|
+
decompression_result = ZlibBody(&zs, input, inflate, max_output_size);
|
|
139
151
|
inflateEnd(&zs);
|
|
140
|
-
return
|
|
152
|
+
return decompression_result;
|
|
141
153
|
}
|
|
142
154
|
|
|
143
|
-
|
|
144
|
-
size_t i;
|
|
145
|
-
for (i = 0; i < input->count; i++) {
|
|
146
|
-
grpc_slice_buffer_add(output, grpc_core::CSliceRef(input->slices[i]));
|
|
147
|
-
}
|
|
148
|
-
return 1;
|
|
149
|
-
}
|
|
155
|
+
} // namespace
|
|
150
156
|
|
|
151
|
-
|
|
152
|
-
|
|
157
|
+
std::optional<SliceBuffer> MessageCompress(grpc_compression_algorithm algorithm,
|
|
158
|
+
const SliceBuffer& input) {
|
|
153
159
|
switch (algorithm) {
|
|
154
160
|
case GRPC_COMPRESS_NONE:
|
|
155
161
|
// the fallback path always needs to be send uncompressed: we simply
|
|
156
162
|
// rely on that here
|
|
157
|
-
return
|
|
163
|
+
return std::nullopt;
|
|
158
164
|
case GRPC_COMPRESS_DEFLATE:
|
|
159
|
-
return
|
|
165
|
+
return ZlibCompress(input, 0);
|
|
160
166
|
case GRPC_COMPRESS_GZIP:
|
|
161
|
-
return
|
|
167
|
+
return ZlibCompress(input, 1);
|
|
162
168
|
case GRPC_COMPRESS_ALGORITHMS_COUNT:
|
|
163
169
|
break;
|
|
164
170
|
}
|
|
165
171
|
LOG(ERROR) << "invalid compression algorithm " << algorithm;
|
|
166
|
-
return
|
|
172
|
+
return std::nullopt;
|
|
167
173
|
}
|
|
168
174
|
|
|
175
|
+
absl::StatusOr<SliceBuffer> MessageDecompress(
|
|
176
|
+
grpc_compression_algorithm algorithm, const SliceBuffer& input,
|
|
177
|
+
std::optional<uint32_t> max_output_size) {
|
|
178
|
+
switch (algorithm) {
|
|
179
|
+
case GRPC_COMPRESS_NONE: {
|
|
180
|
+
SliceBuffer output;
|
|
181
|
+
output.Append(input);
|
|
182
|
+
return output;
|
|
183
|
+
}
|
|
184
|
+
case GRPC_COMPRESS_DEFLATE:
|
|
185
|
+
return ZlibDecompress(input, 0, max_output_size);
|
|
186
|
+
case GRPC_COMPRESS_GZIP:
|
|
187
|
+
return ZlibDecompress(input, 1, max_output_size);
|
|
188
|
+
case GRPC_COMPRESS_ALGORITHMS_COUNT:
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
LOG(ERROR) << "invalid compression algorithm " << algorithm;
|
|
192
|
+
return absl::InternalError("Invalid compression algorithm");
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
} // namespace grpc_core
|
|
196
|
+
|
|
169
197
|
int grpc_msg_compress(grpc_compression_algorithm algorithm,
|
|
170
198
|
grpc_slice_buffer* input, grpc_slice_buffer* output) {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
199
|
+
int retval = 1;
|
|
200
|
+
grpc_core::SliceBuffer input_sb;
|
|
201
|
+
grpc_slice_buffer_swap(input, input_sb.c_slice_buffer());
|
|
202
|
+
std::optional<grpc_core::SliceBuffer> output_sb =
|
|
203
|
+
grpc_core::MessageCompress(algorithm, input_sb);
|
|
204
|
+
if (!output_sb.has_value()) {
|
|
205
|
+
output_sb.emplace();
|
|
206
|
+
output_sb->Append(input_sb);
|
|
207
|
+
retval = 0;
|
|
174
208
|
}
|
|
175
|
-
|
|
209
|
+
grpc_slice_buffer_swap(input, input_sb.c_slice_buffer());
|
|
210
|
+
grpc_slice_buffer_swap(output, output_sb->c_slice_buffer());
|
|
211
|
+
return retval;
|
|
176
212
|
}
|
|
177
213
|
|
|
178
214
|
int grpc_msg_decompress(grpc_compression_algorithm algorithm,
|
|
179
215
|
grpc_slice_buffer* input, grpc_slice_buffer* output) {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
case GRPC_COMPRESS_ALGORITHMS_COUNT:
|
|
188
|
-
break;
|
|
216
|
+
grpc_core::SliceBuffer input_sb;
|
|
217
|
+
grpc_slice_buffer_swap(input, input_sb.c_slice_buffer());
|
|
218
|
+
|
|
219
|
+
absl::StatusOr<grpc_core::SliceBuffer> output_sb =
|
|
220
|
+
grpc_core::MessageDecompress(algorithm, input_sb, std::nullopt);
|
|
221
|
+
if (!output_sb.ok()) {
|
|
222
|
+
return 0;
|
|
189
223
|
}
|
|
190
|
-
|
|
191
|
-
|
|
224
|
+
grpc_slice_buffer_swap(input, input_sb.c_slice_buffer());
|
|
225
|
+
grpc_slice_buffer_swap(output, output_sb->c_slice_buffer());
|
|
226
|
+
return 1;
|
|
192
227
|
}
|
|
@@ -23,6 +23,13 @@
|
|
|
23
23
|
#include <grpc/slice.h>
|
|
24
24
|
#include <grpc/support/port_platform.h>
|
|
25
25
|
|
|
26
|
+
#include <cstdint>
|
|
27
|
+
#include <optional>
|
|
28
|
+
|
|
29
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
|
30
|
+
#include "absl/status/status.h"
|
|
31
|
+
#include "absl/status/statusor.h"
|
|
32
|
+
|
|
26
33
|
// compress 'input' to 'output' using 'algorithm'.
|
|
27
34
|
// On success, appends compressed slices to output and returns 1.
|
|
28
35
|
// On failure, appends uncompressed slices to output and returns 0.
|
|
@@ -35,4 +42,21 @@ int grpc_msg_compress(grpc_compression_algorithm algorithm,
|
|
|
35
42
|
int grpc_msg_decompress(grpc_compression_algorithm algorithm,
|
|
36
43
|
grpc_slice_buffer* input, grpc_slice_buffer* output);
|
|
37
44
|
|
|
45
|
+
namespace grpc_core {
|
|
46
|
+
|
|
47
|
+
// Compresses 'input' using 'algorithm'.
|
|
48
|
+
// On success, returns a SliceBuffer containing the compressed data.
|
|
49
|
+
// On failure, returns nullopt.
|
|
50
|
+
std::optional<SliceBuffer> MessageCompress(grpc_compression_algorithm algorithm,
|
|
51
|
+
const SliceBuffer& input);
|
|
52
|
+
// Decompresses 'input'.
|
|
53
|
+
// On success, returns a SliceBuffer containing the decompressed data.
|
|
54
|
+
// On failure, returns a non-OK status.
|
|
55
|
+
// Fails if the decompressed data would be larger than max_output_size.
|
|
56
|
+
absl::StatusOr<SliceBuffer> MessageDecompress(
|
|
57
|
+
grpc_compression_algorithm algorithm, const SliceBuffer& input,
|
|
58
|
+
std::optional<uint32_t> max_output_size);
|
|
59
|
+
|
|
60
|
+
} // namespace grpc_core
|
|
61
|
+
|
|
38
62
|
#endif // GRPC_SRC_CORE_LIB_COMPRESSION_MESSAGE_COMPRESS_H
|
|
@@ -109,6 +109,9 @@ const char* const description_h2_max_deallocating_streams_headroom =
|
|
|
109
109
|
"Separate allocated max concurrent streams.";
|
|
110
110
|
const char* const additional_constraints_h2_max_deallocating_streams_headroom =
|
|
111
111
|
"{}";
|
|
112
|
+
const char* const description_header_data_frame =
|
|
113
|
+
"Managing header and data memory better";
|
|
114
|
+
const char* const additional_constraints_header_data_frame = "{}";
|
|
112
115
|
const char* const description_inproc_cancel_stream =
|
|
113
116
|
"If set, cancel inproc stream inside the transport mutex.";
|
|
114
117
|
const char* const additional_constraints_inproc_cancel_stream = "{}";
|
|
@@ -349,6 +352,8 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|
|
349
352
|
description_h2_max_deallocating_streams_headroom,
|
|
350
353
|
additional_constraints_h2_max_deallocating_streams_headroom, nullptr, 0,
|
|
351
354
|
false, true},
|
|
355
|
+
{"header_data_frame", description_header_data_frame,
|
|
356
|
+
additional_constraints_header_data_frame, nullptr, 0, true, true},
|
|
352
357
|
{"inproc_cancel_stream", description_inproc_cancel_stream,
|
|
353
358
|
additional_constraints_inproc_cancel_stream, nullptr, 0, true, true},
|
|
354
359
|
{"keep_alive_ping_timer_batch", description_keep_alive_ping_timer_batch,
|
|
@@ -365,7 +370,7 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|
|
365
370
|
{"memory_optimization_02", description_memory_optimization_02,
|
|
366
371
|
additional_constraints_memory_optimization_02, nullptr, 0, false, false},
|
|
367
372
|
{"message_size_refactoring", description_message_size_refactoring,
|
|
368
|
-
additional_constraints_message_size_refactoring, nullptr, 0,
|
|
373
|
+
additional_constraints_message_size_refactoring, nullptr, 0, true, true},
|
|
369
374
|
{"metadata_outstanding_token_refactor",
|
|
370
375
|
description_metadata_outstanding_token_refactor,
|
|
371
376
|
additional_constraints_metadata_outstanding_token_refactor, nullptr, 0,
|
|
@@ -393,7 +398,7 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|
|
393
398
|
{"ph2_client_server", description_ph2_client_server,
|
|
394
399
|
additional_constraints_ph2_client_server, nullptr, 0, false, true},
|
|
395
400
|
{"ph2_perf_01", description_ph2_perf_01, additional_constraints_ph2_perf_01,
|
|
396
|
-
nullptr, 0,
|
|
401
|
+
nullptr, 0, true, true},
|
|
397
402
|
{"ph2_server", description_ph2_server, additional_constraints_ph2_server,
|
|
398
403
|
nullptr, 0, false, true},
|
|
399
404
|
{"pick_first_ignore_empty_updates",
|
|
@@ -577,6 +582,9 @@ const char* const description_h2_max_deallocating_streams_headroom =
|
|
|
577
582
|
"Separate allocated max concurrent streams.";
|
|
578
583
|
const char* const additional_constraints_h2_max_deallocating_streams_headroom =
|
|
579
584
|
"{}";
|
|
585
|
+
const char* const description_header_data_frame =
|
|
586
|
+
"Managing header and data memory better";
|
|
587
|
+
const char* const additional_constraints_header_data_frame = "{}";
|
|
580
588
|
const char* const description_inproc_cancel_stream =
|
|
581
589
|
"If set, cancel inproc stream inside the transport mutex.";
|
|
582
590
|
const char* const additional_constraints_inproc_cancel_stream = "{}";
|
|
@@ -817,6 +825,8 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|
|
817
825
|
description_h2_max_deallocating_streams_headroom,
|
|
818
826
|
additional_constraints_h2_max_deallocating_streams_headroom, nullptr, 0,
|
|
819
827
|
false, true},
|
|
828
|
+
{"header_data_frame", description_header_data_frame,
|
|
829
|
+
additional_constraints_header_data_frame, nullptr, 0, true, true},
|
|
820
830
|
{"inproc_cancel_stream", description_inproc_cancel_stream,
|
|
821
831
|
additional_constraints_inproc_cancel_stream, nullptr, 0, true, true},
|
|
822
832
|
{"keep_alive_ping_timer_batch", description_keep_alive_ping_timer_batch,
|
|
@@ -833,7 +843,7 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|
|
833
843
|
{"memory_optimization_02", description_memory_optimization_02,
|
|
834
844
|
additional_constraints_memory_optimization_02, nullptr, 0, false, false},
|
|
835
845
|
{"message_size_refactoring", description_message_size_refactoring,
|
|
836
|
-
additional_constraints_message_size_refactoring, nullptr, 0,
|
|
846
|
+
additional_constraints_message_size_refactoring, nullptr, 0, true, true},
|
|
837
847
|
{"metadata_outstanding_token_refactor",
|
|
838
848
|
description_metadata_outstanding_token_refactor,
|
|
839
849
|
additional_constraints_metadata_outstanding_token_refactor, nullptr, 0,
|
|
@@ -861,7 +871,7 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|
|
861
871
|
{"ph2_client_server", description_ph2_client_server,
|
|
862
872
|
additional_constraints_ph2_client_server, nullptr, 0, false, true},
|
|
863
873
|
{"ph2_perf_01", description_ph2_perf_01, additional_constraints_ph2_perf_01,
|
|
864
|
-
nullptr, 0,
|
|
874
|
+
nullptr, 0, true, true},
|
|
865
875
|
{"ph2_server", description_ph2_server, additional_constraints_ph2_server,
|
|
866
876
|
nullptr, 0, false, true},
|
|
867
877
|
{"pick_first_ignore_empty_updates",
|
|
@@ -1045,6 +1055,9 @@ const char* const description_h2_max_deallocating_streams_headroom =
|
|
|
1045
1055
|
"Separate allocated max concurrent streams.";
|
|
1046
1056
|
const char* const additional_constraints_h2_max_deallocating_streams_headroom =
|
|
1047
1057
|
"{}";
|
|
1058
|
+
const char* const description_header_data_frame =
|
|
1059
|
+
"Managing header and data memory better";
|
|
1060
|
+
const char* const additional_constraints_header_data_frame = "{}";
|
|
1048
1061
|
const char* const description_inproc_cancel_stream =
|
|
1049
1062
|
"If set, cancel inproc stream inside the transport mutex.";
|
|
1050
1063
|
const char* const additional_constraints_inproc_cancel_stream = "{}";
|
|
@@ -1285,6 +1298,8 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|
|
1285
1298
|
description_h2_max_deallocating_streams_headroom,
|
|
1286
1299
|
additional_constraints_h2_max_deallocating_streams_headroom, nullptr, 0,
|
|
1287
1300
|
false, true},
|
|
1301
|
+
{"header_data_frame", description_header_data_frame,
|
|
1302
|
+
additional_constraints_header_data_frame, nullptr, 0, true, true},
|
|
1288
1303
|
{"inproc_cancel_stream", description_inproc_cancel_stream,
|
|
1289
1304
|
additional_constraints_inproc_cancel_stream, nullptr, 0, true, true},
|
|
1290
1305
|
{"keep_alive_ping_timer_batch", description_keep_alive_ping_timer_batch,
|
|
@@ -1301,7 +1316,7 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|
|
1301
1316
|
{"memory_optimization_02", description_memory_optimization_02,
|
|
1302
1317
|
additional_constraints_memory_optimization_02, nullptr, 0, false, false},
|
|
1303
1318
|
{"message_size_refactoring", description_message_size_refactoring,
|
|
1304
|
-
additional_constraints_message_size_refactoring, nullptr, 0,
|
|
1319
|
+
additional_constraints_message_size_refactoring, nullptr, 0, true, true},
|
|
1305
1320
|
{"metadata_outstanding_token_refactor",
|
|
1306
1321
|
description_metadata_outstanding_token_refactor,
|
|
1307
1322
|
additional_constraints_metadata_outstanding_token_refactor, nullptr, 0,
|
|
@@ -1329,7 +1344,7 @@ const ExperimentMetadata g_experiment_metadata[] = {
|
|
|
1329
1344
|
{"ph2_client_server", description_ph2_client_server,
|
|
1330
1345
|
additional_constraints_ph2_client_server, nullptr, 0, false, true},
|
|
1331
1346
|
{"ph2_perf_01", description_ph2_perf_01, additional_constraints_ph2_perf_01,
|
|
1332
|
-
nullptr, 0,
|
|
1347
|
+
nullptr, 0, true, true},
|
|
1333
1348
|
{"ph2_server", description_ph2_server, additional_constraints_ph2_server,
|
|
1334
1349
|
nullptr, 0, false, true},
|
|
1335
1350
|
{"pick_first_ignore_empty_updates",
|
|
@@ -96,6 +96,8 @@ inline bool IsFailRecvMetadataOnDeadlineExceededEnabled() { return false; }
|
|
|
96
96
|
inline bool IsFreeLargeAllocatorEnabled() { return false; }
|
|
97
97
|
inline bool IsFuseFiltersEnabled() { return false; }
|
|
98
98
|
inline bool IsH2MaxDeallocatingStreamsHeadroomEnabled() { return false; }
|
|
99
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_HEADER_DATA_FRAME
|
|
100
|
+
inline bool IsHeaderDataFrameEnabled() { return true; }
|
|
99
101
|
#define GRPC_EXPERIMENT_IS_INCLUDED_INPROC_CANCEL_STREAM
|
|
100
102
|
inline bool IsInprocCancelStreamEnabled() { return true; }
|
|
101
103
|
inline bool IsKeepAlivePingTimerBatchEnabled() { return false; }
|
|
@@ -104,7 +106,8 @@ inline bool IsLocalConnectorSecureEnabled() { return false; }
|
|
|
104
106
|
inline bool IsMaxInflightPingsStrictLimitEnabled() { return true; }
|
|
105
107
|
inline bool IsMemoryOptimization01Enabled() { return false; }
|
|
106
108
|
inline bool IsMemoryOptimization02Enabled() { return false; }
|
|
107
|
-
|
|
109
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_MESSAGE_SIZE_REFACTORING
|
|
110
|
+
inline bool IsMessageSizeRefactoringEnabled() { return true; }
|
|
108
111
|
inline bool IsMetadataOutstandingTokenRefactorEnabled() { return false; }
|
|
109
112
|
#define GRPC_EXPERIMENT_IS_INCLUDED_METADATA_PUBLISH_TO_APP_TAG
|
|
110
113
|
inline bool IsMetadataPublishToAppTagEnabled() { return true; }
|
|
@@ -122,7 +125,8 @@ inline bool IsOptimization04Enabled() { return true; }
|
|
|
122
125
|
inline bool IsOtelExportTelemetryDomainsEnabled() { return false; }
|
|
123
126
|
inline bool IsPh2ClientEnabled() { return false; }
|
|
124
127
|
inline bool IsPh2ClientServerEnabled() { return false; }
|
|
125
|
-
|
|
128
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_PH2_PERF_01
|
|
129
|
+
inline bool IsPh2Perf01Enabled() { return true; }
|
|
126
130
|
inline bool IsPh2ServerEnabled() { return false; }
|
|
127
131
|
inline bool IsPickFirstIgnoreEmptyUpdatesEnabled() { return false; }
|
|
128
132
|
inline bool IsPipelinedReadSecureEndpointEnabled() { return false; }
|
|
@@ -192,6 +196,8 @@ inline bool IsFailRecvMetadataOnDeadlineExceededEnabled() { return false; }
|
|
|
192
196
|
inline bool IsFreeLargeAllocatorEnabled() { return false; }
|
|
193
197
|
inline bool IsFuseFiltersEnabled() { return false; }
|
|
194
198
|
inline bool IsH2MaxDeallocatingStreamsHeadroomEnabled() { return false; }
|
|
199
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_HEADER_DATA_FRAME
|
|
200
|
+
inline bool IsHeaderDataFrameEnabled() { return true; }
|
|
195
201
|
#define GRPC_EXPERIMENT_IS_INCLUDED_INPROC_CANCEL_STREAM
|
|
196
202
|
inline bool IsInprocCancelStreamEnabled() { return true; }
|
|
197
203
|
inline bool IsKeepAlivePingTimerBatchEnabled() { return false; }
|
|
@@ -200,7 +206,8 @@ inline bool IsLocalConnectorSecureEnabled() { return false; }
|
|
|
200
206
|
inline bool IsMaxInflightPingsStrictLimitEnabled() { return true; }
|
|
201
207
|
inline bool IsMemoryOptimization01Enabled() { return false; }
|
|
202
208
|
inline bool IsMemoryOptimization02Enabled() { return false; }
|
|
203
|
-
|
|
209
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_MESSAGE_SIZE_REFACTORING
|
|
210
|
+
inline bool IsMessageSizeRefactoringEnabled() { return true; }
|
|
204
211
|
inline bool IsMetadataOutstandingTokenRefactorEnabled() { return false; }
|
|
205
212
|
#define GRPC_EXPERIMENT_IS_INCLUDED_METADATA_PUBLISH_TO_APP_TAG
|
|
206
213
|
inline bool IsMetadataPublishToAppTagEnabled() { return true; }
|
|
@@ -218,7 +225,8 @@ inline bool IsOptimization04Enabled() { return true; }
|
|
|
218
225
|
inline bool IsOtelExportTelemetryDomainsEnabled() { return false; }
|
|
219
226
|
inline bool IsPh2ClientEnabled() { return false; }
|
|
220
227
|
inline bool IsPh2ClientServerEnabled() { return false; }
|
|
221
|
-
|
|
228
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_PH2_PERF_01
|
|
229
|
+
inline bool IsPh2Perf01Enabled() { return true; }
|
|
222
230
|
inline bool IsPh2ServerEnabled() { return false; }
|
|
223
231
|
inline bool IsPickFirstIgnoreEmptyUpdatesEnabled() { return false; }
|
|
224
232
|
inline bool IsPipelinedReadSecureEndpointEnabled() { return false; }
|
|
@@ -288,6 +296,8 @@ inline bool IsFailRecvMetadataOnDeadlineExceededEnabled() { return false; }
|
|
|
288
296
|
inline bool IsFreeLargeAllocatorEnabled() { return false; }
|
|
289
297
|
inline bool IsFuseFiltersEnabled() { return false; }
|
|
290
298
|
inline bool IsH2MaxDeallocatingStreamsHeadroomEnabled() { return false; }
|
|
299
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_HEADER_DATA_FRAME
|
|
300
|
+
inline bool IsHeaderDataFrameEnabled() { return true; }
|
|
291
301
|
#define GRPC_EXPERIMENT_IS_INCLUDED_INPROC_CANCEL_STREAM
|
|
292
302
|
inline bool IsInprocCancelStreamEnabled() { return true; }
|
|
293
303
|
inline bool IsKeepAlivePingTimerBatchEnabled() { return false; }
|
|
@@ -296,7 +306,8 @@ inline bool IsLocalConnectorSecureEnabled() { return false; }
|
|
|
296
306
|
inline bool IsMaxInflightPingsStrictLimitEnabled() { return true; }
|
|
297
307
|
inline bool IsMemoryOptimization01Enabled() { return false; }
|
|
298
308
|
inline bool IsMemoryOptimization02Enabled() { return false; }
|
|
299
|
-
|
|
309
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_MESSAGE_SIZE_REFACTORING
|
|
310
|
+
inline bool IsMessageSizeRefactoringEnabled() { return true; }
|
|
300
311
|
inline bool IsMetadataOutstandingTokenRefactorEnabled() { return false; }
|
|
301
312
|
#define GRPC_EXPERIMENT_IS_INCLUDED_METADATA_PUBLISH_TO_APP_TAG
|
|
302
313
|
inline bool IsMetadataPublishToAppTagEnabled() { return true; }
|
|
@@ -314,7 +325,8 @@ inline bool IsOptimization04Enabled() { return true; }
|
|
|
314
325
|
inline bool IsOtelExportTelemetryDomainsEnabled() { return false; }
|
|
315
326
|
inline bool IsPh2ClientEnabled() { return false; }
|
|
316
327
|
inline bool IsPh2ClientServerEnabled() { return false; }
|
|
317
|
-
|
|
328
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_PH2_PERF_01
|
|
329
|
+
inline bool IsPh2Perf01Enabled() { return true; }
|
|
318
330
|
inline bool IsPh2ServerEnabled() { return false; }
|
|
319
331
|
inline bool IsPickFirstIgnoreEmptyUpdatesEnabled() { return false; }
|
|
320
332
|
inline bool IsPipelinedReadSecureEndpointEnabled() { return false; }
|
|
@@ -368,6 +380,7 @@ enum ExperimentIds {
|
|
|
368
380
|
kExperimentIdFreeLargeAllocator,
|
|
369
381
|
kExperimentIdFuseFilters,
|
|
370
382
|
kExperimentIdH2MaxDeallocatingStreamsHeadroom,
|
|
383
|
+
kExperimentIdHeaderDataFrame,
|
|
371
384
|
kExperimentIdInprocCancelStream,
|
|
372
385
|
kExperimentIdKeepAlivePingTimerBatch,
|
|
373
386
|
kExperimentIdLocalConnectorSecure,
|
|
@@ -501,6 +514,10 @@ inline bool IsFuseFiltersEnabled() {
|
|
|
501
514
|
inline bool IsH2MaxDeallocatingStreamsHeadroomEnabled() {
|
|
502
515
|
return IsExperimentEnabled<kExperimentIdH2MaxDeallocatingStreamsHeadroom>();
|
|
503
516
|
}
|
|
517
|
+
#define GRPC_EXPERIMENT_IS_INCLUDED_HEADER_DATA_FRAME
|
|
518
|
+
inline bool IsHeaderDataFrameEnabled() {
|
|
519
|
+
return IsExperimentEnabled<kExperimentIdHeaderDataFrame>();
|
|
520
|
+
}
|
|
504
521
|
#define GRPC_EXPERIMENT_IS_INCLUDED_INPROC_CANCEL_STREAM
|
|
505
522
|
inline bool IsInprocCancelStreamEnabled() {
|
|
506
523
|
return IsExperimentEnabled<kExperimentIdInprocCancelStream>();
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: grpc
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.82.
|
|
4
|
+
version: 1.82.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- gRPC Authors
|
|
@@ -3973,7 +3973,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
3973
3973
|
- !ruby/object:Gem::Version
|
|
3974
3974
|
version: '0'
|
|
3975
3975
|
requirements: []
|
|
3976
|
-
rubygems_version: 4.0.
|
|
3976
|
+
rubygems_version: 4.0.23
|
|
3977
3977
|
specification_version: 4
|
|
3978
3978
|
summary: GRPC system in Ruby
|
|
3979
3979
|
test_files:
|