Class HBaseHbck

java.lang.Object
org.apache.hadoop.hbase.client.HBaseHbck
All Implemented Interfaces:
Closeable, AutoCloseable, Abortable, Hbck

@Private public class HBaseHbck extends Object implements Hbck
Use Connection.getHbck() to obtain an instance of Hbck instead of constructing an HBaseHbck directly.

Connection should be an unmanaged connection obtained via ConnectionFactory.createConnection(Configuration).

NOTE: The methods in here can do damage to a cluster if applied in the wrong sequence or at the wrong time. Use with caution. For experts only. These methods are only for the extreme case where the cluster has been damaged or has achieved an inconsistent state because of some unforeseen circumstance or bug and requires manual intervention.

An instance of this class is lightweight and not-thread safe. A new instance should be created by each thread. Pooling or caching of the instance is not recommended.

See Also:
  • Field Details

    • LOG

      private static final org.slf4j.Logger LOG
    • aborted

      private boolean aborted
    • hbck

      private final org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.HbckService.BlockingInterface hbck
    • rpcControllerFactory

  • Constructor Details

    • HBaseHbck

      HBaseHbck(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.HbckService.BlockingInterface hbck, RpcControllerFactory rpcControllerFactory)
  • Method Details

    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Throws:
      IOException
    • abort

      public void abort(String why, Throwable e)
      Description copied from interface: Abortable
      Abort the server or client.
      Specified by:
      abort in interface Abortable
      Parameters:
      why - Why we're aborting.
      e - Throwable that caused abort. Can be null.
    • isAborted

      public boolean isAborted()
      Description copied from interface: Abortable
      Check if the server or client was aborted.
      Specified by:
      isAborted in interface Abortable
      Returns:
      true if the server or client was aborted, false otherwise
    • setTableStateInMeta

      Description copied from interface: Hbck
      Update table state in Meta only. No procedures are submitted to open/assign or close/unassign regions of the table.
      Specified by:
      setTableStateInMeta in interface Hbck
      Parameters:
      state - table state
      Returns:
      previous state of the table in Meta
      Throws:
      IOException
    • setRegionStateInMeta

      Description copied from interface: Hbck
      Update region state in Meta only. No procedures are submitted to manipulate the given region or any other region from same table.
      Specified by:
      setRegionStateInMeta in interface Hbck
      Parameters:
      nameOrEncodedName2State - list of all region states to be updated in meta
      Returns:
      previous state of the region in Meta
      Throws:
      IOException
    • assigns

      public List<Long> assigns(List<String> encodedRegionNames, boolean override) throws IOException
      Description copied from interface: Hbck
      Like Admin.assign(byte[]) but 'raw' in that it can do more than one Region at a time -- good if many Regions to online -- and it will schedule the assigns even in the case where Master is initializing (as long as the ProcedureExecutor is up). Does NOT call Coprocessor hooks.
      Specified by:
      assigns in interface Hbck
      Parameters:
      encodedRegionNames - Region encoded names; e.g. 1588230740 is the hard-coded encoding for hbase:meta region and de00010733901a05f5a2a3a382e27dd4 is an example of what a random user-space encoded Region name looks like.
      override - You need to add the override for case where a region has previously been bypassed. When a Procedure has been bypassed, a Procedure will have completed but no other Procedure will be able to make progress on the target entity (intentionally). This override flag will override this fencing mechanism.
      Throws:
      IOException
    • unassigns

      public List<Long> unassigns(List<String> encodedRegionNames, boolean override) throws IOException
      Description copied from interface: Hbck
      Like Admin.unassign(byte[], boolean) but 'raw' in that it can do more than one Region at a time -- good if many Regions to offline -- and it will schedule the assigns even in the case where Master is initializing (as long as the ProcedureExecutor is up). Does NOT call Coprocessor hooks.
      Specified by:
      unassigns in interface Hbck
      Parameters:
      encodedRegionNames - Region encoded names; e.g. 1588230740 is the hard-coded encoding for hbase:meta region and de00010733901a05f5a2a3a382e27dd4 is an example of what a random user-space encoded Region name looks like.
      override - You need to add the override for case where a region has previously been bypassed. When a Procedure has been bypassed, a Procedure will have completed but no other Procedure will be able to make progress on the target entity (intentionally). This override flag will override this fencing mechanism.
      Throws:
      IOException
    • toCommaDelimitedString

      private static String toCommaDelimitedString(List<String> list)
    • bypassProcedure

      public List<Boolean> bypassProcedure(List<Long> pids, long waitTime, boolean override, boolean recursive) throws IOException
      Description copied from interface: Hbck
      Bypass specified procedure and move it to completion. Procedure is marked completed but no actual work is done from the current state/step onwards. Parents of the procedure are also marked for bypass.
      Specified by:
      bypassProcedure in interface Hbck
      Parameters:
      pids - of procedures to complete.
      waitTime - wait time in ms for acquiring lock for a procedure
      override - if override set to true, we will bypass the procedure even if it is executing. This is for procedures which can't break out during execution (bugs?).
      recursive - If set, if a parent procedure, we will find and bypass children and then the parent procedure (Dangerous but useful in case where child procedure has been 'lost'). Does not always work. Experimental.
      Returns:
      true if procedure is marked for bypass successfully, false otherwise
      Throws:
      IOException
    • scheduleServerCrashProcedures

      Specified by:
      scheduleServerCrashProcedures in interface Hbck
      Throws:
      IOException
    • scheduleSCPsForUnknownServers

      Specified by:
      scheduleSCPsForUnknownServers in interface Hbck
      Throws:
      IOException
    • runHbckChore

      public boolean runHbckChore() throws IOException
      Description copied from interface: Hbck
      Request HBCK chore to run at master side.
      Specified by:
      runHbckChore in interface Hbck
      Returns:
      true if HBCK chore ran, false if HBCK chore already running
      Throws:
      IOException - if a remote or network exception occurs
    • fixMeta

      public void fixMeta() throws IOException
      Description copied from interface: Hbck
      Fix Meta.
      Specified by:
      fixMeta in interface Hbck
      Throws:
      IOException