This is an automated email from the ASF dual-hosted git repository.

guohao pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new 95378db853 [3.0] tri support Bzip2 (#9945)
95378db853 is described below

commit 95378db8537627d56a80f46fa4602ebc7ad6147c
Author: Wang Chengming <[email protected]>
AuthorDate: Wed Apr 20 17:12:16 2022 +0800

    [3.0] tri support Bzip2 (#9945)
    
    * tri support Bzip2
    
    * add bom inherit
    
    * add bom inherit
    
    * fix conflict
    
    Co-authored-by: 呈铭 <[email protected]>
---
 dubbo-dependencies-bom/pom.xml                     |  8 ++-
 dubbo-rpc/dubbo-rpc-triple/pom.xml                 |  4 ++
 .../dubbo/rpc/protocol/tri/compressor/Bzip2.java   | 82 ++++++++++++++++++++++
 ...he.dubbo.rpc.protocol.tri.compressor.Compressor |  1 +
 ....dubbo.rpc.protocol.tri.compressor.DeCompressor |  1 +
 .../rpc/protocol/tri/compressor/Bzip2Test.java     | 63 +++++++++++++++++
 6 files changed, 158 insertions(+), 1 deletion(-)

diff --git a/dubbo-dependencies-bom/pom.xml b/dubbo-dependencies-bom/pom.xml
index e81d0fa1d6..66536c23e2 100644
--- a/dubbo-dependencies-bom/pom.xml
+++ b/dubbo-dependencies-bom/pom.xml
@@ -171,6 +171,7 @@
         <mortbay_jetty_version>6.1.26</mortbay_jetty_version>
         <portlet_version>2.0</portlet_version>
         <maven_flatten_version>1.1.0</maven_flatten_version>
+        <commons_compress_version>1.21</commons_compress_version>
         <revision>3.0.8-SNAPSHOT</revision>
     </properties>
 
@@ -736,7 +737,12 @@
                 <scope>test</scope>
                 <version>${fabric8_kubernetes_version}</version>
             </dependency>
-
+            <!-- tri compress support-->
+            <dependency>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-compress</artifactId>
+                <version>${commons_compress_version}</version>
+            </dependency>
             <dependency>
                 <groupId>org.xerial.snappy</groupId>
                 <artifactId>snappy-java</artifactId>
diff --git a/dubbo-rpc/dubbo-rpc-triple/pom.xml 
b/dubbo-rpc/dubbo-rpc-triple/pom.xml
index c8a221eb25..12b740589c 100644
--- a/dubbo-rpc/dubbo-rpc-triple/pom.xml
+++ b/dubbo-rpc/dubbo-rpc-triple/pom.xml
@@ -59,6 +59,10 @@
             <version>3.4.16</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-compress</artifactId>
+        </dependency>
         <dependency>
             <groupId>io.reactivex.rxjava2</groupId>
             <artifactId>rxjava</artifactId>
diff --git 
a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java
 
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java
new file mode 100644
index 0000000000..dbc54be92c
--- /dev/null
+++ 
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo.rpc.protocol.tri.compressor;
+
+import org.apache.dubbo.rpc.RpcException;
+
+import 
org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
+import 
org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream;
+import org.apache.commons.io.output.ByteArrayOutputStream;
+
+import java.io.ByteArrayInputStream;
+
+
+/**
+ * bzip2 compressor, faster compression efficiency
+ *
+ * @link https://commons.apache.org/proper/commons-compress/
+ */
+public class Bzip2 implements Compressor, DeCompressor {
+
+    public static final String BZIP2 = "bzip2";
+
+    @Override
+    public String getMessageEncoding() {
+        return BZIP2;
+    }
+
+    @Override
+    public byte[] compress(byte[] payloadByteArr) throws RpcException {
+        if (null == payloadByteArr || 0 == payloadByteArr.length) {
+            return new byte[0];
+        }
+
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        BZip2CompressorOutputStream cos;
+        try {
+            cos = new BZip2CompressorOutputStream(out);
+            cos.write(payloadByteArr);
+            cos.close();
+        } catch (Exception e) {
+            throw new IllegalStateException(e);
+        }
+
+        return out.toByteArray();
+    }
+
+    @Override
+    public byte[] decompress(byte[] payloadByteArr) {
+        if (null == payloadByteArr || 0 == payloadByteArr.length) {
+            return new byte[0];
+        }
+
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        ByteArrayInputStream in = new ByteArrayInputStream(payloadByteArr);
+        try {
+            BZip2CompressorInputStream unZip = new 
BZip2CompressorInputStream(in);
+            byte[] buffer = new byte[2048];
+            int n;
+            while ((n = unZip.read(buffer)) >= 0) {
+                out.write(buffer, 0, n);
+            }
+        } catch (Exception e) {
+            throw new IllegalStateException(e);
+        }
+        return out.toByteArray();
+    }
+}
diff --git 
a/dubbo-rpc/dubbo-rpc-triple/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.protocol.tri.compressor.Compressor
 
b/dubbo-rpc/dubbo-rpc-triple/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.protocol.tri.compressor.Compressor
index 654a42e033..517d23eee4 100644
--- 
a/dubbo-rpc/dubbo-rpc-triple/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.protocol.tri.compressor.Compressor
+++ 
b/dubbo-rpc/dubbo-rpc-triple/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.protocol.tri.compressor.Compressor
@@ -1,2 +1,3 @@
 gzip=org.apache.dubbo.rpc.protocol.tri.compressor.Gzip
+bzip2=org.apache.dubbo.rpc.protocol.tri.compressor.Bzip2
 snappy=org.apache.dubbo.rpc.protocol.tri.compressor.Snappy
diff --git 
a/dubbo-rpc/dubbo-rpc-triple/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.protocol.tri.compressor.DeCompressor
 
b/dubbo-rpc/dubbo-rpc-triple/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.protocol.tri.compressor.DeCompressor
index 654a42e033..517d23eee4 100644
--- 
a/dubbo-rpc/dubbo-rpc-triple/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.protocol.tri.compressor.DeCompressor
+++ 
b/dubbo-rpc/dubbo-rpc-triple/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.protocol.tri.compressor.DeCompressor
@@ -1,2 +1,3 @@
 gzip=org.apache.dubbo.rpc.protocol.tri.compressor.Gzip
+bzip2=org.apache.dubbo.rpc.protocol.tri.compressor.Bzip2
 snappy=org.apache.dubbo.rpc.protocol.tri.compressor.Snappy
diff --git 
a/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2Test.java
 
b/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2Test.java
new file mode 100644
index 0000000000..7525ea61a7
--- /dev/null
+++ 
b/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2Test.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo.rpc.protocol.tri.compressor;
+
+import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.FrameworkModel;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+
+/**
+ * test for Bzip2
+ */
+public class Bzip2Test {
+
+    private static final String TEST_STR;
+
+    static {
+        StringBuilder builder = new StringBuilder();
+        int charNum = 1000000;
+        for (int i = 0; i < charNum; i++) {
+            builder.append("a");
+        }
+
+        TEST_STR = builder.toString();
+    }
+
+    @ValueSource(strings = {"bzip2"})
+    @ParameterizedTest
+    void compression(String compressorName) {
+        Compressor compressor = 
ApplicationModel.defaultModel().getDefaultModule()
+            .getExtensionLoader(Compressor.class)
+            .getExtension(compressorName);
+        String loadByStatic = Compressor.getCompressor(new FrameworkModel(), 
compressorName)
+            .getMessageEncoding();
+        Assertions.assertEquals(loadByStatic, compressor.getMessageEncoding());
+
+        byte[] compressedByteArr = compressor.compress(TEST_STR.getBytes());
+
+        DeCompressor deCompressor = 
ApplicationModel.defaultModel().getDefaultModule()
+            .getExtensionLoader(DeCompressor.class)
+            .getExtension(compressorName);
+
+        byte[] decompressedByteArr = 
deCompressor.decompress(compressedByteArr);
+        Assertions.assertEquals(new String(decompressedByteArr), TEST_STR);
+    }
+}

Reply via email to