org.apache.hadoop.hbase.io.hfile
Class HFileDataBlockEncoderImpl

java.lang.Object
  extended by org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoderImpl
All Implemented Interfaces:
HFileDataBlockEncoder

@InterfaceAudience.Private
public class HFileDataBlockEncoderImpl
extends Object
implements HFileDataBlockEncoder

Do different kinds of data block encoding according to column family options.


Field Summary
 
Fields inherited from interface org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder
DATA_BLOCK_ENCODING
 
Constructor Summary
HFileDataBlockEncoderImpl(DataBlockEncoding encoding)
           
HFileDataBlockEncoderImpl(DataBlockEncoding onDisk, DataBlockEncoding inCache)
          Do data block encoding with specified options.
HFileDataBlockEncoderImpl(DataBlockEncoding onDisk, DataBlockEncoding inCache, byte[] dummyHeader)
          Do data block encoding with specified options.
 
Method Summary
 void beforeWriteToDisk(ByteBuffer in, boolean includesMemstoreTS, HFileBlockEncodingContext encodeCtx, BlockType blockType)
          Precondition: a non-encoded buffer.
static HFileDataBlockEncoder createFromFileInfo(org.apache.hadoop.hbase.io.hfile.HFile.FileInfo fileInfo, DataBlockEncoding preferredEncodingInCache)
           
 HFileBlock diskToCacheFormat(HFileBlock block, boolean isCompaction)
          Converts a block from the on-disk format to the in-cache format.
 DataBlockEncoding getEffectiveEncodingInCache(boolean isCompaction)
           
 DataBlockEncoding getEncodingInCache()
           
 DataBlockEncoding getEncodingOnDisk()
           
 HFileBlockDecodingContext newOnDiskDataBlockDecodingContext(Compression.Algorithm compressionAlgorithm)
          create a encoder specific decoding context for reading.
 HFileBlockEncodingContext newOnDiskDataBlockEncodingContext(Compression.Algorithm compressionAlgorithm, byte[] dummyHeader)
          Create an encoder specific encoding context object for writing.
 void saveMetadata(HFile.Writer writer)
          Save metadata in HFile which will be written to disk
 String toString()
           
 boolean useEncodedScanner(boolean isCompaction)
          Decides whether we should use a scanner over encoded blocks.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

HFileDataBlockEncoderImpl

public HFileDataBlockEncoderImpl(DataBlockEncoding encoding)

HFileDataBlockEncoderImpl

public HFileDataBlockEncoderImpl(DataBlockEncoding onDisk,
                                 DataBlockEncoding inCache)
Do data block encoding with specified options.

Parameters:
onDisk - What kind of data block encoding will be used before writing HFileBlock to disk. This must be either the same as inCache or DataBlockEncoding.NONE.
inCache - What kind of data block encoding will be used in block cache.

HFileDataBlockEncoderImpl

public HFileDataBlockEncoderImpl(DataBlockEncoding onDisk,
                                 DataBlockEncoding inCache,
                                 byte[] dummyHeader)
Do data block encoding with specified options.

Parameters:
onDisk - What kind of data block encoding will be used before writing HFileBlock to disk. This must be either the same as inCache or DataBlockEncoding.NONE.
inCache - What kind of data block encoding will be used in block cache.
dummyHeader - dummy header bytes
Method Detail

createFromFileInfo

public static HFileDataBlockEncoder createFromFileInfo(org.apache.hadoop.hbase.io.hfile.HFile.FileInfo fileInfo,
                                                       DataBlockEncoding preferredEncodingInCache)
                                                throws IOException
Throws:
IOException

saveMetadata

public void saveMetadata(HFile.Writer writer)
                  throws IOException
Description copied from interface: HFileDataBlockEncoder
Save metadata in HFile which will be written to disk

Specified by:
saveMetadata in interface HFileDataBlockEncoder
Parameters:
writer - writer for a given HFile
Throws:
IOException - on disk problems

getEncodingOnDisk

public DataBlockEncoding getEncodingOnDisk()
Specified by:
getEncodingOnDisk in interface HFileDataBlockEncoder
Returns:
the on-disk data block encoding

getEncodingInCache

public DataBlockEncoding getEncodingInCache()
Specified by:
getEncodingInCache in interface HFileDataBlockEncoder
Returns:
the preferred in-cache data block encoding for normal reads

getEffectiveEncodingInCache

public DataBlockEncoding getEffectiveEncodingInCache(boolean isCompaction)
Specified by:
getEffectiveEncodingInCache in interface HFileDataBlockEncoder
Returns:
the effective in-cache data block encoding, taking into account whether we are doing a compaction.

diskToCacheFormat

public HFileBlock diskToCacheFormat(HFileBlock block,
                                    boolean isCompaction)
Description copied from interface: HFileDataBlockEncoder
Converts a block from the on-disk format to the in-cache format. Called in the following cases:

Specified by:
diskToCacheFormat in interface HFileDataBlockEncoder
Parameters:
block - a block in an on-disk format (read from HFile or freshly generated).
Returns:
non null block which is coded according to the settings.

beforeWriteToDisk

public void beforeWriteToDisk(ByteBuffer in,
                              boolean includesMemstoreTS,
                              HFileBlockEncodingContext encodeCtx,
                              BlockType blockType)
                       throws IOException
Precondition: a non-encoded buffer. Postcondition: on-disk encoding. The encoded results can be stored in HFileBlockEncodingContext.

Specified by:
beforeWriteToDisk in interface HFileDataBlockEncoder
Parameters:
in - KeyValues next to each other
encodeCtx - the encoded result
blockType - block type
Throws:
IOException

useEncodedScanner

public boolean useEncodedScanner(boolean isCompaction)
Description copied from interface: HFileDataBlockEncoder
Decides whether we should use a scanner over encoded blocks.

Specified by:
useEncodedScanner in interface HFileDataBlockEncoder
Parameters:
isCompaction - whether we are in a compaction.
Returns:
Whether to use encoded scanner.

toString

public String toString()
Overrides:
toString in class Object

newOnDiskDataBlockEncodingContext

public HFileBlockEncodingContext newOnDiskDataBlockEncodingContext(Compression.Algorithm compressionAlgorithm,
                                                                   byte[] dummyHeader)
Description copied from interface: HFileDataBlockEncoder
Create an encoder specific encoding context object for writing. And the encoding context should also perform compression if compressionAlgorithm is valid.

Specified by:
newOnDiskDataBlockEncodingContext in interface HFileDataBlockEncoder
Parameters:
compressionAlgorithm - compression algorithm
dummyHeader - header bytes
Returns:
a new HFileBlockEncodingContext object

newOnDiskDataBlockDecodingContext

public HFileBlockDecodingContext newOnDiskDataBlockDecodingContext(Compression.Algorithm compressionAlgorithm)
Description copied from interface: HFileDataBlockEncoder
create a encoder specific decoding context for reading. And the decoding context should also do decompression if compressionAlgorithm is valid.

Specified by:
newOnDiskDataBlockDecodingContext in interface HFileDataBlockEncoder
Returns:
a new HFileBlockDecodingContext object


Copyright © 2013 The Apache Software Foundation. All Rights Reserved.