[ https://issues.apache.org/jira/browse/HBASE-27637?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Duo Zhang resolved HBASE-27637. ------------------------------- Fix Version/s: 2.6.0 3.0.0-alpha-4 2.5.4 Hadoop Flags: Reviewed Resolution: Fixed Pushed to branch-2.5+. Thanks all for helping and reviewing! > Zero length value would cause value compressor read nothing and not advance > the position of the InputStream > ----------------------------------------------------------------------------------------------------------- > > Key: HBASE-27637 > URL: https://issues.apache.org/jira/browse/HBASE-27637 > Project: HBase > Issue Type: Bug > Components: dataloss, wal > Reporter: Duo Zhang > Assignee: Duo Zhang > Priority: Critical > Fix For: 2.6.0, 3.0.0-alpha-4, 2.5.4 > > > This is a code sniff from the discussion of HBASE-27073 > {code} > public static void main(String[] args) throws Exception { > CompressionContext ctx = > new CompressionContext(LRUDictionary.class, false, false, true, > Compression.Algorithm.GZ); > ValueCompressor compressor = ctx.getValueCompressor(); > byte[] compressed = compressor.compress(new byte[0], 0, 0); > System.out.println("compressed length: " + compressed.length); > ByteArrayInputStream bis = new ByteArrayInputStream(compressed); > int read = compressor.decompress(bis, compressed.length, new byte[0], 0, > 0); > System.out.println("read length: " + read); > System.out.println("position: " + (compressed.length - bis.available())); > {code} > And the output is > {noformat} > compressed length: 20 > read length: 0 > position: 0 > {noformat} > So it turns out that, when compressing, an empty array will still generate > some output bytes but while reading, we will skip reading anything if we find > the output length is zero, so next time when we read from the stream, we will > start at a wrong position... -- This message was sent by Atlassian Jira (v8.20.10#820010)