org.apache.hadoop.hbase.catalog
Class CatalogTracker

java.lang.Object
  extended by org.apache.hadoop.hbase.catalog.CatalogTracker

public class CatalogTracker
extends Object

Tracks the availability of the catalog tables -ROOT- and .META.. This class is "read-only" in that the locations of the catalog tables cannot be explicitly set. Instead, ZooKeeper is used to learn of the availability and location of -ROOT-. -ROOT- is used to learn of the location of .META. If not available in -ROOT-, ZooKeeper is used to monitor for a new location of .META..

Call start() to start up operation. Call stop()} to interrupt waits and close up shop.


Constructor Summary
CatalogTracker(org.apache.hadoop.conf.Configuration conf)
          Constructs a catalog tracker.
CatalogTracker(ZooKeeperWatcher zk, org.apache.hadoop.conf.Configuration conf, Abortable abortable)
          Constructs the catalog tracker.
 
Method Summary
 HConnection getConnection()
           
 ServerName getMetaLocation()
           
 ServerName getMetaLocationOrReadLocationFromRoot()
          Method used by master on startup trying to figure state of cluster.
 ServerName getRootLocation()
          Gets the current location for -ROOT- or null if location is not currently available.
 boolean isStopped()
           
 void resetMetaLocation()
          Called when we figure current meta is off (called from zk callback).
 void start()
          Starts the catalog tracker.
 void stop()
          Stop working.
 boolean verifyMetaRegionLocation(long timeout)
          Verify .META. is deployed and accessible.
 boolean verifyRootRegionLocation(long timeout)
          Verify -ROOT- is deployed and accessible.
 void waitForMeta()
          Waits indefinitely for availability of .META..
 ServerName waitForMeta(long timeout)
          Gets the current location for .META. if available and waits for up to the specified timeout if not immediately available.
 HRegionInterface waitForMetaServerConnection(long timeout)
          Deprecated. Does not retry; use an HTable instance instead.
 void waitForRoot()
          Waits indefinitely for availability of -ROOT-.
 ServerName waitForRoot(long timeout)
          Gets the current location for -ROOT- if available and waits for up to the specified timeout if not immediately available.
 HRegionInterface waitForRootServerConnection(long timeout)
          Deprecated. Use #getRootServerConnection(long)
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CatalogTracker

public CatalogTracker(org.apache.hadoop.conf.Configuration conf)
               throws IOException
Constructs a catalog tracker. Find current state of catalog tables. Begin active tracking by executing start() post construction. Does not timeout.

Parameters:
conf - the Configuration from which a HConnection will be obtained; if problem, this connections Abortable.abort(String, Throwable) will be called.
Throws:
IOException

CatalogTracker

public CatalogTracker(ZooKeeperWatcher zk,
                      org.apache.hadoop.conf.Configuration conf,
                      Abortable abortable)
               throws IOException
Constructs the catalog tracker. Find current state of catalog tables. Begin active tracking by executing start() post construction. Does not timeout.

Parameters:
zk - If zk is null, we'll create an instance (and shut it down when stop() is called) else we'll use what is passed.
conf -
abortable - If fatal exception we'll call abort on this. May be null. If it is we'll use the Connection associated with the passed Configuration as our Abortable.
Throws:
IOException
Method Detail

start

public void start()
           throws IOException,
                  InterruptedException
Starts the catalog tracker. Determines current availability of catalog tables and ensures all further transitions of either region are tracked.

Throws:
IOException
InterruptedException

isStopped

public boolean isStopped()
Returns:
True if we are stopped. Call only after start else indeterminate answer.

stop

public void stop()
Stop working. Interrupts any ongoing waits.


getRootLocation

public ServerName getRootLocation()
                           throws InterruptedException
Gets the current location for -ROOT- or null if location is not currently available.

Returns:
ServerName for server hosting -ROOT- or null if none available
Throws:
InterruptedException

getMetaLocation

public ServerName getMetaLocation()
Returns:
ServerName for server hosting .META. or null if none available

getMetaLocationOrReadLocationFromRoot

public ServerName getMetaLocationOrReadLocationFromRoot()
                                                 throws IOException
Method used by master on startup trying to figure state of cluster. Returns the current meta location unless its null. In this latter case, it has not yet been set so go check whats up in -ROOT- and return that.

Returns:
ServerName for server hosting .META. or if null, we'll read the location that is up in -ROOT- table (which could be null or just plain stale).
Throws:
IOException

waitForRoot

public void waitForRoot()
                 throws InterruptedException
Waits indefinitely for availability of -ROOT-. Used during cluster startup.

Throws:
InterruptedException - if interrupted while waiting

waitForRoot

public ServerName waitForRoot(long timeout)
                       throws InterruptedException,
                              NotAllMetaRegionsOnlineException
Gets the current location for -ROOT- if available and waits for up to the specified timeout if not immediately available. Returns null if the timeout elapses before root is available.

Parameters:
timeout - maximum time to wait for root availability, in milliseconds
Returns:
ServerName for server hosting -ROOT- or null if none available
Throws:
InterruptedException - if interrupted while waiting
NotAllMetaRegionsOnlineException - if root not available before timeout

waitForRootServerConnection

public HRegionInterface waitForRootServerConnection(long timeout)
                                             throws InterruptedException,
                                                    NotAllMetaRegionsOnlineException,
                                                    IOException
Deprecated. Use #getRootServerConnection(long)

Gets a connection to the server hosting root, as reported by ZooKeeper, waiting up to the specified timeout for availability.

Parameters:
timeout - How long to wait on root location
Returns:
connection to server hosting root
Throws:
InterruptedException
NotAllMetaRegionsOnlineException - if timed out waiting
IOException
See Also:
for additional information

waitForMeta

public void waitForMeta()
                 throws InterruptedException
Waits indefinitely for availability of .META.. Used during cluster startup. Does not verify meta, just that something has been set up in zk.

Throws:
InterruptedException - if interrupted while waiting
See Also:
waitForMeta(long)

waitForMeta

public ServerName waitForMeta(long timeout)
                       throws InterruptedException,
                              IOException,
                              NotAllMetaRegionsOnlineException
Gets the current location for .META. if available and waits for up to the specified timeout if not immediately available. Throws an exception if timed out waiting. This method differs from waitForMeta() in that it will go ahead and verify the location gotten from ZooKeeper and -ROOT- region by trying to use returned connection.

Parameters:
timeout - maximum time to wait for meta availability, in milliseconds
Returns:
ServerName for server hosting .META. or null if none available
Throws:
InterruptedException - if interrupted while waiting
IOException - unexpected exception connecting to meta server
NotAllMetaRegionsOnlineException - if meta not available before timeout

waitForMetaServerConnection

public HRegionInterface waitForMetaServerConnection(long timeout)
                                             throws InterruptedException,
                                                    NotAllMetaRegionsOnlineException,
                                                    IOException
Deprecated. Does not retry; use an HTable instance instead.

Gets a connection to the server hosting meta, as reported by ZooKeeper, waiting up to the specified timeout for availability.

Returns:
connection to server hosting meta
Throws:
InterruptedException
NotAllMetaRegionsOnlineException - if timed out waiting
IOException
See Also:
for additional information

resetMetaLocation

public void resetMetaLocation()
Called when we figure current meta is off (called from zk callback).


verifyRootRegionLocation

public boolean verifyRootRegionLocation(long timeout)
                                 throws InterruptedException,
                                        IOException
Verify -ROOT- is deployed and accessible.

Parameters:
timeout - How long to wait on zk for root address (passed through to the internal call to waitForRootServerConnection(long).
Returns:
True if the -ROOT- location is healthy.
Throws:
IOException
InterruptedException

verifyMetaRegionLocation

public boolean verifyMetaRegionLocation(long timeout)
                                 throws InterruptedException,
                                        IOException
Verify .META. is deployed and accessible.

Parameters:
timeout - How long to wait on zk for .META. address (passed through to the internal call to waitForMetaServerConnection(long).
Returns:
True if the .META. location is healthy.
Throws:
IOException - Some unexpected IOE.
InterruptedException

getConnection

public HConnection getConnection()


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