[ https://issues.apache.org/jira/browse/PARQUET-2196?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17619406#comment-17619406 ]
ASF GitHub Bot commented on PARQUET-2196: ----------------------------------------- pitrou commented on code in PR #1000: URL: https://github.com/apache/parquet-mr/pull/1000#discussion_r997975040 ########## parquet-hadoop/src/main/java/org/apache/parquet/hadoop/codec/NonBlockedCompressor.java: ########## @@ -0,0 +1,186 @@ +/* + * 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.parquet.hadoop.codec; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.io.compress.Compressor; +import org.apache.parquet.Preconditions; + +import java.io.IOException; +import java.nio.ByteBuffer; + +/** + * This class is a wrapper around the underlying compressor. It always consumes + * the entire input in setInput and compresses it as one compressed block. + */ +abstract public class NonBlockedCompressor implements Compressor { + + // Buffer for compressed output. This buffer grows as necessary. + private ByteBuffer outputBuffer = ByteBuffer.allocateDirect(0); + + // Buffer for uncompressed input. This buffer grows as necessary. + private ByteBuffer inputBuffer = ByteBuffer.allocateDirect(0); + + private long bytesRead = 0L; + private long bytesWritten = 0L; + private boolean finishCalled = false; + + /** + * Fills specified buffer with compressed data. Returns actual number + * of bytes of compressed data. A return value of 0 indicates that + * needsInput() should be called in order to determine if more input + * data is required. + * + * @param buffer Buffer for the compressed data + * @param off Start offset of the data + * @param len Size of the buffer + * @return The actual number of bytes of compressed data. + */ + @Override + public synchronized int compress(byte[] buffer, int off, int len) throws IOException { + SnappyUtil.validateBuffer(buffer, off, len); Review Comment: I see. Can you add a comment about that? > Support LZ4_RAW codec > --------------------- > > Key: PARQUET-2196 > URL: https://issues.apache.org/jira/browse/PARQUET-2196 > Project: Parquet > Issue Type: Improvement > Components: parquet-mr > Reporter: Gang Wu > Priority: Major > > There is a long history about the LZ4 interoperability of parquet files > between parquet-mr and parquet-cpp (which is now in the Apache Arrow). > Attached links are the evidence. In short, a new LZ4_RAW codec type has been > introduced since parquet format v2.9.0. However, only parquet-cpp supports > LZ4_RAW. The parquet-mr library still uses the old Hadoop-provided LZ4 codec > and cannot read parquet files with LZ4_RAW. -- This message was sent by Atlassian Jira (v8.20.10#820010)