Skip to content

Commit 1bc2976

Browse files
committed
Merge pull request grpc#6481 from dgquintas/compression_md_level_bis
Allow servers to select compression level via initial MD & overall compression cleanup
2 parents b81f172 + 37e516e commit 1bc2976

File tree

83 files changed

+932
-237
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+932
-237
lines changed

BUILD

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ cc_library(
315315
"src/core/lib/channel/connected_channel.c",
316316
"src/core/lib/channel/http_client_filter.c",
317317
"src/core/lib/channel/http_server_filter.c",
318-
"src/core/lib/compression/compression_algorithm.c",
318+
"src/core/lib/compression/compression.c",
319319
"src/core/lib/compression/message_compress.c",
320320
"src/core/lib/debug/trace.c",
321321
"src/core/lib/http/format_request.c",
@@ -681,7 +681,7 @@ cc_library(
681681
"src/core/lib/channel/connected_channel.c",
682682
"src/core/lib/channel/http_client_filter.c",
683683
"src/core/lib/channel/http_server_filter.c",
684-
"src/core/lib/compression/compression_algorithm.c",
684+
"src/core/lib/compression/compression.c",
685685
"src/core/lib/compression/message_compress.c",
686686
"src/core/lib/debug/trace.c",
687687
"src/core/lib/http/format_request.c",
@@ -1010,7 +1010,7 @@ cc_library(
10101010
"src/core/lib/channel/connected_channel.c",
10111011
"src/core/lib/channel/http_client_filter.c",
10121012
"src/core/lib/channel/http_server_filter.c",
1013-
"src/core/lib/compression/compression_algorithm.c",
1013+
"src/core/lib/compression/compression.c",
10141014
"src/core/lib/compression/message_compress.c",
10151015
"src/core/lib/debug/trace.c",
10161016
"src/core/lib/http/format_request.c",
@@ -1708,7 +1708,7 @@ objc_library(
17081708
"src/core/lib/channel/connected_channel.c",
17091709
"src/core/lib/channel/http_client_filter.c",
17101710
"src/core/lib/channel/http_server_filter.c",
1711-
"src/core/lib/compression/compression_algorithm.c",
1711+
"src/core/lib/compression/compression.c",
17121712
"src/core/lib/compression/message_compress.c",
17131713
"src/core/lib/debug/trace.c",
17141714
"src/core/lib/http/format_request.c",

Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2487,7 +2487,7 @@ LIBGRPC_SRC = \
24872487
src/core/lib/channel/connected_channel.c \
24882488
src/core/lib/channel/http_client_filter.c \
24892489
src/core/lib/channel/http_server_filter.c \
2490-
src/core/lib/compression/compression_algorithm.c \
2490+
src/core/lib/compression/compression.c \
24912491
src/core/lib/compression/message_compress.c \
24922492
src/core/lib/debug/trace.c \
24932493
src/core/lib/http/format_request.c \
@@ -2753,7 +2753,7 @@ LIBGRPC_CRONET_SRC = \
27532753
src/core/lib/channel/connected_channel.c \
27542754
src/core/lib/channel/http_client_filter.c \
27552755
src/core/lib/channel/http_server_filter.c \
2756-
src/core/lib/compression/compression_algorithm.c \
2756+
src/core/lib/compression/compression.c \
27572757
src/core/lib/compression/message_compress.c \
27582758
src/core/lib/debug/trace.c \
27592759
src/core/lib/http/format_request.c \
@@ -3088,7 +3088,7 @@ LIBGRPC_UNSECURE_SRC = \
30883088
src/core/lib/channel/connected_channel.c \
30893089
src/core/lib/channel/http_client_filter.c \
30903090
src/core/lib/channel/http_server_filter.c \
3091-
src/core/lib/compression/compression_algorithm.c \
3091+
src/core/lib/compression/compression.c \
30923092
src/core/lib/compression/message_compress.c \
30933093
src/core/lib/debug/trace.c \
30943094
src/core/lib/http/format_request.c \

binding.gyp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,7 @@
571571
'src/core/lib/channel/connected_channel.c',
572572
'src/core/lib/channel/http_client_filter.c',
573573
'src/core/lib/channel/http_server_filter.c',
574-
'src/core/lib/compression/compression_algorithm.c',
574+
'src/core/lib/compression/compression.c',
575575
'src/core/lib/compression/message_compress.c',
576576
'src/core/lib/debug/trace.c',
577577
'src/core/lib/http/format_request.c',

build.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ filegroups:
240240
- src/core/lib/channel/connected_channel.c
241241
- src/core/lib/channel/http_client_filter.c
242242
- src/core/lib/channel/http_server_filter.c
243-
- src/core/lib/compression/compression_algorithm.c
243+
- src/core/lib/compression/compression.c
244244
- src/core/lib/compression/message_compress.c
245245
- src/core/lib/debug/trace.c
246246
- src/core/lib/http/format_request.c

config.m4

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ if test "$PHP_GRPC" != "no"; then
9090
src/core/lib/channel/connected_channel.c \
9191
src/core/lib/channel/http_client_filter.c \
9292
src/core/lib/channel/http_server_filter.c \
93-
src/core/lib/compression/compression_algorithm.c \
93+
src/core/lib/compression/compression.c \
9494
src/core/lib/compression/message_compress.c \
9595
src/core/lib/debug/trace.c \
9696
src/core/lib/http/format_request.c \

gRPC.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ Pod::Spec.new do |s|
352352
'src/core/lib/channel/connected_channel.c',
353353
'src/core/lib/channel/http_client_filter.c',
354354
'src/core/lib/channel/http_server_filter.c',
355-
'src/core/lib/compression/compression_algorithm.c',
355+
'src/core/lib/compression/compression.c',
356356
'src/core/lib/compression/message_compress.c',
357357
'src/core/lib/debug/trace.c',
358358
'src/core/lib/http/format_request.c',

grpc.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ Gem::Specification.new do |s|
331331
s.files += %w( src/core/lib/channel/connected_channel.c )
332332
s.files += %w( src/core/lib/channel/http_client_filter.c )
333333
s.files += %w( src/core/lib/channel/http_server_filter.c )
334-
s.files += %w( src/core/lib/compression/compression_algorithm.c )
334+
s.files += %w( src/core/lib/compression/compression.c )
335335
s.files += %w( src/core/lib/compression/message_compress.c )
336336
s.files += %w( src/core/lib/debug/trace.c )
337337
s.files += %w( src/core/lib/http/format_request.c )

include/grpc++/impl/codegen/call.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@
4747
#include <grpc++/impl/codegen/serialization_traits.h>
4848
#include <grpc++/impl/codegen/status.h>
4949
#include <grpc++/impl/codegen/string_ref.h>
50+
5051
#include <grpc/impl/codegen/alloc.h>
52+
#include <grpc/impl/codegen/compression_types.h>
5153
#include <grpc/impl/codegen/grpc_types.h>
5254

5355
struct grpc_byte_buffer;
@@ -187,6 +189,8 @@ class CallOpSendInitialMetadata {
187189
flags_ = flags;
188190
initial_metadata_count_ = metadata.size();
189191
initial_metadata_ = FillMetadataArray(metadata);
192+
// TODO(dgq): expose compression level in API so it can be properly set.
193+
maybe_compression_level_.is_set = false;
190194
}
191195

192196
protected:
@@ -198,6 +202,10 @@ class CallOpSendInitialMetadata {
198202
op->reserved = NULL;
199203
op->data.send_initial_metadata.count = initial_metadata_count_;
200204
op->data.send_initial_metadata.metadata = initial_metadata_;
205+
op->data.send_initial_metadata.maybe_compression_level.is_set =
206+
maybe_compression_level_.is_set;
207+
op->data.send_initial_metadata.maybe_compression_level.level =
208+
maybe_compression_level_.level;
201209
}
202210
void FinishOp(bool* status, int max_message_size) {
203211
if (!send_) return;
@@ -209,6 +217,10 @@ class CallOpSendInitialMetadata {
209217
uint32_t flags_;
210218
size_t initial_metadata_count_;
211219
grpc_metadata* initial_metadata_;
220+
struct {
221+
bool is_set;
222+
grpc_compression_level level;
223+
} maybe_compression_level_;
212224
};
213225

214226
class CallOpSendMessage {

include/grpc++/server_builder.h

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -66,29 +66,43 @@ class ServerBuilder {
6666
/// The service must exist for the lifetime of the \a Server instance returned
6767
/// by \a BuildAndStart().
6868
/// Matches requests with any :authority
69-
void RegisterService(Service* service);
69+
ServerBuilder& RegisterService(Service* service);
7070

7171
/// Register a generic service.
7272
/// Matches requests with any :authority
73-
void RegisterAsyncGenericService(AsyncGenericService* service);
73+
ServerBuilder& RegisterAsyncGenericService(AsyncGenericService* service);
7474

7575
/// Register a service. This call does not take ownership of the service.
7676
/// The service must exist for the lifetime of the \a Server instance returned
7777
/// by BuildAndStart().
7878
/// Only matches requests with :authority \a host
79-
void RegisterService(const grpc::string& host, Service* service);
79+
ServerBuilder& RegisterService(const grpc::string& host, Service* service);
8080

8181
/// Set max message size in bytes.
82-
void SetMaxMessageSize(int max_message_size) {
82+
ServerBuilder& SetMaxMessageSize(int max_message_size) {
8383
max_message_size_ = max_message_size;
84+
return *this;
8485
}
8586

86-
/// Set the compression options to be used by the server.
87-
void SetCompressionOptions(const grpc_compression_options& options) {
88-
compression_options_ = options;
89-
}
87+
/// Set the support status for compression algorithms. All algorithms are
88+
/// enabled by default.
89+
///
90+
/// Incoming calls compressed with an unsupported algorithm will fail with
91+
/// GRPC_STATUS_UNIMPLEMENTED.
92+
ServerBuilder& SetCompressionAlgorithmSupportStatus(
93+
grpc_compression_algorithm algorithm, bool enabled);
94+
95+
/// The default compression level to use for all channel calls in the
96+
/// absence of a call-specific level.
97+
ServerBuilder& SetDefaultCompressionLevel(grpc_compression_level level);
98+
99+
/// The default compression algorithm to use for all channel calls in the
100+
/// absence of a call-specific level. Note that it overrides any compression
101+
/// level set by \a SetDefaultCompressionLevel.
102+
ServerBuilder& SetDefaultCompressionAlgorithm(
103+
grpc_compression_algorithm algorithm);
90104

91-
void SetOption(std::unique_ptr<ServerBuilderOption> option);
105+
ServerBuilder& SetOption(std::unique_ptr<ServerBuilderOption> option);
92106

93107
/// Tries to bind \a server to the given \a addr.
94108
///
@@ -101,9 +115,9 @@ class ServerBuilder {
101115
/// number. \a nullptr otherwise.
102116
///
103117
// TODO(dgq): the "port" part seems to be a misnomer.
104-
void AddListeningPort(const grpc::string& addr,
105-
std::shared_ptr<ServerCredentials> creds,
106-
int* selected_port = nullptr);
118+
ServerBuilder& AddListeningPort(const grpc::string& addr,
119+
std::shared_ptr<ServerCredentials> creds,
120+
int* selected_port = nullptr);
107121

108122
/// Add a completion queue for handling asynchronous services
109123
/// Caller is required to keep this completion queue live until
@@ -144,14 +158,22 @@ class ServerBuilder {
144158
};
145159

146160
int max_message_size_;
147-
grpc_compression_options compression_options_;
148161
std::vector<std::unique_ptr<ServerBuilderOption>> options_;
149162
std::vector<std::unique_ptr<NamedService>> services_;
150163
std::vector<Port> ports_;
151164
std::vector<ServerCompletionQueue*> cqs_;
152165
std::shared_ptr<ServerCredentials> creds_;
153166
std::map<grpc::string, std::unique_ptr<ServerBuilderPlugin>> plugins_;
154167
AsyncGenericService* generic_service_;
168+
struct {
169+
bool is_set;
170+
grpc_compression_level level;
171+
} maybe_default_compression_level_;
172+
struct {
173+
bool is_set;
174+
grpc_compression_algorithm algorithm;
175+
} maybe_default_compression_algorithm_;
176+
uint32_t enabled_compression_algorithms_bitset_;
155177
};
156178

157179
} // namespace grpc

include/grpc/compression.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ GRPCAPI int grpc_compression_algorithm_parse(
5151
grpc_compression_algorithm *algorithm);
5252

5353
/** Updates \a name with the encoding name corresponding to a valid \a
54-
* algorithm. Returns 1 upon success, 0 otherwise. */
54+
* algorithm. Note that \a name is statically allocated and must *not* be freed.
55+
* Returns 1 upon success, 0 otherwise. */
5556
GRPCAPI int grpc_compression_algorithm_name(
5657
grpc_compression_algorithm algorithm, char **name);
5758

0 commit comments

Comments
 (0)