aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/dispatch/rpc/CompressService.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/dispatch/rpc/CompressService.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/rpc/CompressService.java32
1 files changed, 32 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/CompressService.java b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/CompressService.java
new file mode 100644
index 00000000000..9e7fc9b5b29
--- /dev/null
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/CompressService.java
@@ -0,0 +1,32 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.search.dispatch.rpc;
+
+import com.yahoo.compress.CompressionType;
+import com.yahoo.compress.Compressor;
+import com.yahoo.processing.request.CompoundName;
+import com.yahoo.search.Query;
+
+/**
+ * Implement interface to compress/decompress request/response
+ *
+ * @author baldersheim
+ */
+public class CompressService implements CompressPayload {
+ /** The compression method which will be used with rpc dispatch. "lz4" (default) and "none" is supported. */
+ public final static CompoundName dispatchCompression = new CompoundName("dispatch.compression");
+ private final Compressor compressor = new Compressor(CompressionType.LZ4, 5, 0.95, 256);
+
+
+ @Override
+ public Compressor.Compression compress(Query query, byte[] payload) {
+ CompressionType compression = CompressionType.valueOf(query.properties().getString(dispatchCompression, "LZ4").toUpperCase());
+ return compressor.compress(compression, payload);
+ }
+
+ @Override
+ public byte[] decompress(Client.ProtobufResponse response) {
+ CompressionType compression = CompressionType.valueOf(response.compression());
+ return compressor.decompress(response.compressedPayload(), compression, response.uncompressedSize());
+ }
+ Compressor compressor() { return compressor; }
+}