You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2014/12/15 18:12:20 UTC

svn commit: r1643075 - in /lucene/dev/trunk/lucene: CHANGES.txt core/src/java/org/apache/lucene/codecs/compressing/CompressionMode.java

Author: rmuir
Date: Wed Dec  3 10:09:14 2014
New Revision: 1643075

URL: http://svn.apache.org/r1643075
Log:
LUCENE-6090: use raw deflate stream for CompressionMode.HIGH_COMPRESSION

Modified:
    lucene/dev/trunk/lucene/CHANGES.txt
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressionMode.java

Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1643075&r1=1643074&r2=1643075&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Wed Dec  3 10:09:14 2014
@@ -117,6 +117,9 @@ New Features
 
 * LUCENE-6077: Added a filter cache. (Adrien Grand, Robert Muir)
 
+* LUCENE-6089, LUCENE-6090: Tune CompressionMode.HIGH_COMPRESSION for 
+  better compression and less cpu usage. (Adrien Grand, Robert Muir)
+
 API Changes
 
 * LUCENE-5900: Deprecated more constructors taking Version in *InfixSuggester and

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressionMode.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressionMode.java?rev=1643075&r1=1643074&r2=1643075&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressionMode.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressionMode.java Wed Dec  3 10:09:14 2014
@@ -186,7 +186,7 @@ public abstract class CompressionMode {
     byte[] compressed;
 
     DeflateDecompressor() {
-      decompressor = new Inflater();
+      decompressor = new Inflater(true);
       compressed = new byte[0];
     }
 
@@ -198,13 +198,18 @@ public abstract class CompressionMode {
         return;
       }
       final int compressedLength = in.readVInt();
-      if (compressedLength > compressed.length) {
-        compressed = new byte[ArrayUtil.oversize(compressedLength, 1)];
+      // pad with extra "dummy byte": see javadocs for using Inflater(true)
+      // we do it for compliance, but its unnecessary for years in zlib.
+      final int paddedLength = compressedLength + 1;
+      if (paddedLength > compressed.length) {
+        compressed = new byte[ArrayUtil.oversize(paddedLength, 1)];
       }
       in.readBytes(compressed, 0, compressedLength);
+      compressed[compressedLength] = 0; // explicitly set dummy byte to 0
 
       decompressor.reset();
-      decompressor.setInput(compressed, 0, compressedLength);
+      // extra "dummy byte"
+      decompressor.setInput(compressed, 0, paddedLength);
 
       bytes.offset = bytes.length = 0;
       while (true) {
@@ -242,7 +247,7 @@ public abstract class CompressionMode {
     byte[] compressed;
 
     DeflateCompressor(int level) {
-      compressor = new Deflater(level);
+      compressor = new Deflater(level, true);
       compressed = new byte[64];
     }