This package provides support for atomic transactions. Transactions can span multiple regions. Transaction writes are applied when committing a transaction. At commit time, the transaction is examined to see if it can be applied while still maintaining atomicity. This is done by looking for conflicts with the transactions that committed while the current transaction was running. This technique is known as optimistic concurrency control (OCC) because it relies on the assumption that transactions will mostly not have conflicts with each other.

For more details on OCC, see the paper On Optimistic Methods for Concurrency Control by Kung and Robinson available here .

To enable transactions, modify hbase-site.xml to turn on the TransactionalRegionServer. This is done by setting hbase.regionserver.class to org.apache.hadoop.hbase.ipc.TransactionalRegionInterface and hbase.regionserver.impl to org.apache.hadoop.hbase.regionserver.transactional.TransactionalRegionServer

Known Issues

Recovery in the face of hregion server failure is not fully implemented. Thus, you cannot rely on the transactional properties in the face of node failure.

In order to avoid phantom reads on scanners, scanners currently claim a write set for all rows in every regions which they scan through. This means that if transaction A writes to a region that transaction B is scanning, then there is a conflict (only one transacton can be committed). This will occur even if the scanner never went over the row that was written.