org.apache.hadoop.hbase.regionserver
Class SplitTransaction

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

@InterfaceAudience.Private
public class SplitTransaction
extends Object

Executes region split as a "transaction". Call prepare() 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:

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

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


Constructor Summary
SplitTransaction(HRegion r, byte[] splitrow)
          Constructor
 
Method Summary
 Put addLocation(Put p, ServerName sn, long openSeqNum)
           
static void createNodeSplitting(ZooKeeperWatcher zkw, HRegionInfo region, ServerName serverName, HRegionInfo a, HRegionInfo b)
          Creates a new ephemeral node in the PENDING_SPLIT state for the specified region.
 PairOfSameType<HRegion> execute(Server server, RegionServerServices services)
           
 PairOfSameType<HRegion> execute(Server server, RegionServerServices services, User user)
          Run the transaction.
 boolean prepare()
          Does checks on split inputs.
 boolean rollback(Server server, RegionServerServices services)
           
 boolean rollback(Server server, RegionServerServices services, User user)
           
 PairOfSameType<HRegion> stepsAfterPONR(Server server, RegionServerServices services, PairOfSameType<HRegion> regions)
          Deprecated. 
 PairOfSameType<HRegion> stepsAfterPONR(Server server, RegionServerServices services, PairOfSameType<HRegion> regions, User user)
           
 PairOfSameType<HRegion> stepsBeforePONR(Server server, RegionServerServices services, boolean testing)
           
static int transitionSplittingNode(ZooKeeperWatcher zkw, HRegionInfo parent, HRegionInfo a, HRegionInfo b, ServerName serverName, int znodeVersion, EventType beginState, EventType endState)
          Transitions an existing ephemeral node for the specified region which is currently in the begin state to be in the end state.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SplitTransaction

public SplitTransaction(HRegion r,
                        byte[] splitrow)
Constructor

Parameters:
r - Region to split
splitrow - Row to split around
Method Detail

prepare

public boolean prepare()
Does checks on split inputs.

Returns:
true if the region is splittable else false if it is not (e.g. its already closed, etc.).

stepsBeforePONR

public PairOfSameType<HRegion> stepsBeforePONR(Server server,
                                               RegionServerServices services,
                                               boolean testing)
                                        throws IOException
Throws:
IOException

execute

public PairOfSameType<HRegion> execute(Server server,
                                       RegionServerServices services)
                                throws IOException
Throws:
IOException

execute

public PairOfSameType<HRegion> execute(Server server,
                                       RegionServerServices services,
                                       User user)
                                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:
Regions created
Throws:
IOException - If thrown, transaction failed. Call rollback(Server, RegionServerServices)
IOException
See Also:
rollback(Server, RegionServerServices)

stepsAfterPONR

@Deprecated
public PairOfSameType<HRegion> stepsAfterPONR(Server server,
                                                         RegionServerServices services,
                                                         PairOfSameType<HRegion> regions)
                                       throws IOException
Deprecated. 

Throws:
IOException

stepsAfterPONR

public PairOfSameType<HRegion> stepsAfterPONR(Server server,
                                              RegionServerServices services,
                                              PairOfSameType<HRegion> regions,
                                              User user)
                                       throws IOException
Throws:
IOException

addLocation

public Put addLocation(Put p,
                       ServerName sn,
                       long openSeqNum)

rollback

public boolean rollback(Server server,
                        RegionServerServices services)
                 throws IOException
Throws:
IOException

rollback

public boolean rollback(Server server,
                        RegionServerServices services,
                        User user)
                 throws IOException
Parameters:
server - Hosting server instance (May be null when testing).
services -
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.

createNodeSplitting

public static void createNodeSplitting(ZooKeeperWatcher zkw,
                                       HRegionInfo region,
                                       ServerName serverName,
                                       HRegionInfo a,
                                       HRegionInfo b)
                                throws org.apache.zookeeper.KeeperException,
                                       IOException
Creates a new ephemeral node in the PENDING_SPLIT state for the specified region. Create it ephemeral in case regionserver dies mid-split.

Does not transition nodes from other states. If a node already exists for this region, a KeeperException.NodeExistsException will be thrown.

Parameters:
zkw - zk reference
region - region to be created as offline
serverName - server event originates from
Throws:
org.apache.zookeeper.KeeperException
IOException

transitionSplittingNode

public static int transitionSplittingNode(ZooKeeperWatcher zkw,
                                          HRegionInfo parent,
                                          HRegionInfo a,
                                          HRegionInfo b,
                                          ServerName serverName,
                                          int znodeVersion,
                                          EventType beginState,
                                          EventType endState)
                                   throws org.apache.zookeeper.KeeperException,
                                          IOException
Transitions an existing ephemeral node for the specified region which is currently in the begin state to be in the end state. Master cleans up the final SPLIT znode when it reads it (or if we crash, zk will clean it up).

Does not transition nodes from other states. If for some reason the node could not be transitioned, the method returns -1. If the transition is successful, the version of the node after transition is returned.

This method can fail and return false for three different reasons:

Does not set any watches.

This method should only be used by a RegionServer when splitting a region.

Parameters:
zkw - zk reference
parent - region to be transitioned to opened
a - Daughter a of split
b - Daughter b of split
serverName - server event originates from
znodeVersion - expected version of data before modification
beginState - the expected current state the znode should be
endState - the state to be transition to
Returns:
version of node after transition, -1 if unsuccessful transition
Throws:
org.apache.zookeeper.KeeperException - if unexpected zookeeper exception
IOException


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