org.apache.hadoop.hbase.regionserver
Class RegionMergeTransaction

java.lang.Object
  extended by org.apache.hadoop.hbase.regionserver.RegionMergeTransaction

@InterfaceAudience.Private
public class RegionMergeTransaction
extends Object

Executes region merge as a "transaction". It is similar with SplitTransaction. Call prepare(RegionServerServices) to setup the transaction, execute(Server, RegionServerServices) to run the transaction and rollback(Server, RegionServerServices) to cleanup if execute fails.

Here is an example of how you would use this class:

  RegionMergeTransaction mt = new RegionMergeTransaction(this.conf, parent, midKey)
  if (!mt.prepare(services)) return;
  try {
    mt.execute(server, services);
  } catch (IOException ioe) {
    try {
      mt.rollback(server, services);
      return;
    } catch (RuntimeException e) {
      myAbortable.abort("Failed merge, abort");
    }
  }
 

This class is not thread safe. Caller needs ensure merge is run by one thread only.


Constructor Summary
RegionMergeTransaction(HRegion a, HRegion b, boolean forcible)
          Constructor
 
Method Summary
 HRegion execute(Server server, RegionServerServices services)
          Run the transaction.
static HRegionInfo getMergedRegionInfo(HRegionInfo a, HRegionInfo b)
          Get merged region info through the specified two regions
 boolean prepare(RegionServerServices services)
          Does checks on merge inputs.
 boolean rollback(Server server, RegionServerServices services)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RegionMergeTransaction

public RegionMergeTransaction(HRegion a,
                              HRegion b,
                              boolean forcible)
Constructor

Parameters:
a - region a to merge
b - region b to merge
forcible - if false, we will only merge adjacent regions
Method Detail

prepare

public boolean prepare(RegionServerServices services)
Does checks on merge inputs.

Parameters:
services -
Returns:
true if the regions are mergeable else false if they are not (e.g. its already closed, etc.).

execute

public HRegion execute(Server server,
                       RegionServerServices services)
                throws IOException
Run the transaction.

Parameters:
server - Hosting server instance. Can be null when testing (won't try and update in zk if a null server)
services - Used to online/offline regions.
Returns:
merged region
Throws:
IOException - If thrown, transaction failed. Call rollback(Server, RegionServerServices)
IOException
See Also:
rollback(Server, RegionServerServices)

getMergedRegionInfo

public static HRegionInfo getMergedRegionInfo(HRegionInfo a,
                                              HRegionInfo b)
Get merged region info through the specified two regions

Parameters:
a - merging region A
b - merging region B
Returns:
the merged region info

rollback

public boolean rollback(Server server,
                        RegionServerServices services)
                 throws IOException
Parameters:
server - Hosting server instance (May be null when testing).
services - Services of regionserver, used to online regions.
Returns:
True if we successfully rolled back, false if we got to the point of no return and so now need to abort the server to minimize damage.
Throws:
IOException - If thrown, rollback failed. Take drastic action.


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