Index: src/main/java/org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.java (revision 1345911) +++ src/main/java/org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.java (working copy) @@ -20,7 +20,7 @@ import java.nio.ByteBuffer; import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding; -import org.apache.hadoop.hbase.regionserver.StoreFile; +import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.Pair; /** @@ -29,6 +29,9 @@ * should just return the unmodified block. */ public interface HFileDataBlockEncoder { + /** Type of encoding used for data blocks in HFile. Stored in file info. */ + public static final byte[] DATA_BLOCK_ENCODING = Bytes.toBytes("DATA_BLOCK_ENCODING"); + /** * Converts a block from the on-disk format to the in-cache format. Called in * the following cases: @@ -64,12 +67,11 @@ public boolean useEncodedScanner(boolean isCompaction); /** - * Save metadata in StoreFile which will be written to disk - * @param storeFileWriter writer for a given StoreFile + * Save metadata in HFile which will be written to disk + * @param writer writer for a given HFile * @exception IOException on disk problems */ - public void saveMetadata(StoreFile.Writer storeFileWriter) - throws IOException; + public void saveMetadata(HFile.Writer writer) throws IOException; /** @return the on-disk data block encoding */ public DataBlockEncoding getEncodingOnDisk(); Index: src/main/java/org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoderImpl.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoderImpl.java (revision 1345911) +++ src/main/java/org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoderImpl.java (working copy) @@ -25,7 +25,6 @@ import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding; import org.apache.hadoop.hbase.io.hfile.HFileBlock; import org.apache.hadoop.hbase.io.hfile.HFile.FileInfo; -import org.apache.hadoop.hbase.regionserver.StoreFile; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.Pair; @@ -70,7 +69,7 @@ boolean hasPreferredCacheEncoding = preferredEncodingInCache != null && preferredEncodingInCache != DataBlockEncoding.NONE; - byte[] dataBlockEncodingType = fileInfo.get(StoreFile.DATA_BLOCK_ENCODING); + byte[] dataBlockEncodingType = fileInfo.get(DATA_BLOCK_ENCODING); if (dataBlockEncodingType == null && !hasPreferredCacheEncoding) { return NoOpDataBlockEncoder.INSTANCE; } @@ -105,10 +104,8 @@ } @Override - public void saveMetadata(StoreFile.Writer storeFileWriter) - throws IOException { - storeFileWriter.appendFileInfo(StoreFile.DATA_BLOCK_ENCODING, - onDisk.getNameInBytes()); + public void saveMetadata(HFile.Writer writer) throws IOException { + writer.appendFileInfo(DATA_BLOCK_ENCODING, onDisk.getNameInBytes()); } @Override Index: src/main/java/org/apache/hadoop/hbase/io/hfile/HFileWriterV1.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/io/hfile/HFileWriterV1.java (revision 1345911) +++ src/main/java/org/apache/hadoop/hbase/io/hfile/HFileWriterV1.java (working copy) @@ -332,6 +332,8 @@ if (this.outputStream == null) { return; } + // Save data block encoder metadata in the file info. + blockEncoder.saveMetadata(this); // Write out the end of the data blocks, then write meta data blocks. // followed by fileinfo, data block index and meta block index. Index: src/main/java/org/apache/hadoop/hbase/io/hfile/HFileWriterV2.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/io/hfile/HFileWriterV2.java (revision 1345911) +++ src/main/java/org/apache/hadoop/hbase/io/hfile/HFileWriterV2.java (working copy) @@ -356,6 +356,8 @@ if (outputStream == null) { return; } + // Save data block encoder metadata in the file info. + blockEncoder.saveMetadata(this); // Write out the end of the data blocks, then write meta data blocks. // followed by fileinfo, data block index and meta block index. Index: src/main/java/org/apache/hadoop/hbase/io/hfile/NoOpDataBlockEncoder.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/io/hfile/NoOpDataBlockEncoder.java (revision 1345911) +++ src/main/java/org/apache/hadoop/hbase/io/hfile/NoOpDataBlockEncoder.java (working copy) @@ -19,7 +19,6 @@ import java.nio.ByteBuffer; import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding; -import org.apache.hadoop.hbase.regionserver.StoreFile; import org.apache.hadoop.hbase.util.Pair; /** @@ -54,7 +53,7 @@ } @Override - public void saveMetadata(StoreFile.Writer storeFileWriter) { + public void saveMetadata(HFile.Writer writer) { } @Override Index: src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java (revision 1345911) +++ src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java (working copy) @@ -135,10 +135,6 @@ /** Key for timestamp of earliest-put in metadata*/ public static final byte[] EARLIEST_PUT_TS = Bytes.toBytes("EARLIEST_PUT_TS"); - /** Type of encoding used for data blocks in HFile. Stored in file info. */ - public static final byte[] DATA_BLOCK_ENCODING = - Bytes.toBytes("DATA_BLOCK_ENCODING"); - // Make default block size for StoreFiles 8k while testing. TODO: FIX! // Need to make it 8k for testing. public static final int DEFAULT_BLOCKSIZE_SMALL = 8 * 1024; @@ -1205,9 +1201,6 @@ } public void close() throws IOException { - // Save data block encoder metadata in the file info. - dataBlockEncoder.saveMetadata(this); - boolean hasGeneralBloom = this.closeGeneralBloomFilter(); boolean hasDeleteFamilyBloom = this.closeDeleteFamilyBloomFilter(); Index: src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreFile.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreFile.java (revision 1345911) +++ src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreFile.java (working copy) @@ -916,7 +916,7 @@ StoreFile.Reader reader = storeFile.createReader(); Map fileInfo = reader.loadFileInfo(); - byte[] value = fileInfo.get(StoreFile.DATA_BLOCK_ENCODING); + byte[] value = fileInfo.get(HFileDataBlockEncoder.DATA_BLOCK_ENCODING); assertEquals(dataBlockEncoderAlgo.getNameInBytes(), value); }