HI,

grpc-core supports "GRPC_COMPRESS_GZIP" flag to provide full stream level 
gzip compression.

In grpc-java we have gzip inflater is already implemented. This was used 
and client side support for full-stream decompression is already 
implemented (#3403 <https://github.com/grpc/grpc-java/pull/3403>). 

I am looking for server side capabilities in grpc-java which can support 
full-stream decompression. 
Currently we are doing this by patch on ServerImpl.java for checking 
"Content-Encoding" header and  setting GzipInflatingBuffer on 
AbstractServerStream.

@@ -21,6 +21,7 @@
 import static 
com.google.common.util.concurrent.MoreExecutors.directExecutor;
 import static io.grpc.Contexts.statusFromCancelled;
 import static io.grpc.Status.DEADLINE_EXCEEDED;
+import static io.grpc.internal.GrpcUtil.CONTENT_ENCODING_KEY;
 import static io.grpc.internal.GrpcUtil.MESSAGE_ENCODING_KEY;
 import static io.grpc.internal.GrpcUtil.TIMEOUT_KEY;
 import static java.util.concurrent.TimeUnit.NANOSECONDS;
@@ -52,6 +53,7 @@
 import io.grpc.ServerServiceDefinition;
 import io.grpc.ServerTransportFilter;
 import io.grpc.Status;
+import io.grpc.internal.AbstractServerStream;
 import io.perfmark.Link;
 import io.perfmark.PerfMark;
 import io.perfmark.Tag;
@@ -494,6 +496,14 @@
         }
         stream.setDecompressor(decompressor);
       }
+      
+      if (headers.containsKey(CONTENT_ENCODING_KEY)) {
+        String streamEncoding = headers.get(CONTENT_ENCODING_KEY);
+        if (streamEncoding.equalsIgnoreCase("gzip") && stream instanceof 
AbstractServerStream) {
+          ((AbstractServerStream)stream).transportState()
+            .setFullStreamDecompressor(new GzipInflatingBuffer());
+        }
+      }
 
       final StatsTraceContext statsTraceCtx = Preconditions.checkNotNull(
           stream.statsTraceContext(), "statsTraceCtx not present from 
stream");
@@ -554,14 +564,10 @@



Is there any other way to achieve similar thing without patch?
If it can not be achieved without patch can we submit a ticket and patch 
for grpc-java project?

Thanks,
Parth

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/f7e36515-588b-424b-a2c9-28e0a2b29654o%40googlegroups.com.

Reply via email to