org.apache.hadoop.hbase.regionserver.wal
Class WALEdit

java.lang.Object
  extended by org.apache.hadoop.hbase.regionserver.wal.WALEdit
All Implemented Interfaces:
HeapSize, org.apache.hadoop.io.Writable

@InterfaceAudience.LimitedPrivate(value="Replication")
public class WALEdit
extends Object
implements org.apache.hadoop.io.Writable, HeapSize

WALEdit: Used in HBase's transaction log (WAL) to represent the collection of edits (KeyValue objects) corresponding to a single transaction. The class implements "Writable" interface for serializing/deserializing a set of KeyValue items. Previously, if a transaction contains 3 edits to c1, c2, c3 for a row R, the HLog would have three log entries as follows: : : : This presents problems because row level atomicity of transactions was not guaranteed. If we crash after few of the above appends make it, then recovery will restore a partial transaction. In the new world, all the edits for a given transaction are written out as a single record, for example: : where, the WALEdit is serialized as: <-1, # of edits, , , ... > For example: <-1, 3, , , > The -1 marker is just a special way of being backward compatible with an old HLog which would have contained a single . The deserializer for WALEdit backward compatibly detects if the record is an old style KeyValue or the new style WALEdit.


Field Summary
static org.apache.commons.logging.Log LOG
           
static byte[] METAFAMILY
           
 
Constructor Summary
WALEdit()
           
WALEdit(boolean isReplay)
           
 
Method Summary
 WALEdit add(Cell cell)
          Adds a Cell to this edit
 WALEdit add(KeyValue kv)
          Deprecated. Use add(Cell) instead
static WALEdit createCompaction(HRegionInfo hri, WALProtos.CompactionDescriptor c)
          Create a compacion WALEdit
 NavigableMap<byte[],Integer> getAndRemoveScopes()
           
 ArrayList<Cell> getCells()
           
static WALProtos.CompactionDescriptor getCompaction(Cell kv)
          Deserialized and returns a CompactionDescriptor is the KeyValue contains one.
 ArrayList<KeyValue> getKeyValues()
          Deprecated. Use getCells() instead
 long heapSize()
           
 boolean isEmpty()
           
static boolean isMetaEditFamily(byte[] f)
           
 boolean isReplay()
           
 void readFields(DataInput in)
           
 int readFromCells(Codec.Decoder cellDecoder, int expectedCount)
          Reads WALEdit from cells.
 void setCompressionContext(org.apache.hadoop.hbase.regionserver.wal.CompressionContext compressionContext)
           
 int size()
           
 String toString()
           
 void write(DataOutput out)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

LOG

public static final org.apache.commons.logging.Log LOG

METAFAMILY

public static final byte[] METAFAMILY
Constructor Detail

WALEdit

public WALEdit()

WALEdit

public WALEdit(boolean isReplay)
Method Detail

isMetaEditFamily

public static boolean isMetaEditFamily(byte[] f)
Parameters:
f -
Returns:
True is f is METAFAMILY

isReplay

public boolean isReplay()
Returns:
True when current WALEdit is created by log replay. Replication skips WALEdits from replay.

setCompressionContext

public void setCompressionContext(org.apache.hadoop.hbase.regionserver.wal.CompressionContext compressionContext)

add

@Deprecated
public WALEdit add(KeyValue kv)
Deprecated. Use add(Cell) instead

Adds a KeyValue to this edit

Parameters:
kv -
Returns:
this for chained action

add

public WALEdit add(Cell cell)
Adds a Cell to this edit

Parameters:
cell -
Returns:
this for chained action

isEmpty

public boolean isEmpty()

size

public int size()

getKeyValues

@Deprecated
public ArrayList<KeyValue> getKeyValues()
Deprecated. Use getCells() instead

Returns:
The KeyValues associated with this edit

getCells

public ArrayList<Cell> getCells()
Returns:
The Cells associated with this edit

getAndRemoveScopes

public NavigableMap<byte[],Integer> getAndRemoveScopes()

readFields

public void readFields(DataInput in)
                throws IOException
Specified by:
readFields in interface org.apache.hadoop.io.Writable
Throws:
IOException

write

public void write(DataOutput out)
           throws IOException
Specified by:
write in interface org.apache.hadoop.io.Writable
Throws:
IOException

readFromCells

public int readFromCells(Codec.Decoder cellDecoder,
                         int expectedCount)
                  throws IOException
Reads WALEdit from cells.

Parameters:
cellDecoder - Cell decoder.
expectedCount - Expected cell count.
Returns:
Number of KVs read.
Throws:
IOException

heapSize

public long heapSize()
Specified by:
heapSize in interface HeapSize
Returns:
Approximate 'exclusive deep size' of implementing object. Includes count of payload and hosting object sizings.

toString

public String toString()
Overrides:
toString in class Object

createCompaction

public static WALEdit createCompaction(HRegionInfo hri,
                                       WALProtos.CompactionDescriptor c)
Create a compacion WALEdit

Parameters:
c -
Returns:
A WALEdit that has c serialized as its value

getCompaction

public static WALProtos.CompactionDescriptor getCompaction(Cell kv)
                                                    throws IOException
Deserialized and returns a CompactionDescriptor is the KeyValue contains one.

Parameters:
kv - the key value
Returns:
deserialized CompactionDescriptor or null.
Throws:
IOException


Copyright © 2015 The Apache Software Foundation. All rights reserved.