You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by wc...@apache.org on 2019/06/10 09:43:58 UTC

[hbase-operator-tools] branch master updated: HBASE-22183 [hbck2] Update hbck2 README to explain new setRegionState method.

This is an automated email from the ASF dual-hosted git repository.

wchevreuil pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase-operator-tools.git


The following commit(s) were added to refs/heads/master by this push:
     new c0802fc  HBASE-22183 [hbck2] Update hbck2 README to explain new setRegionState method.
c0802fc is described below

commit c0802fc02084a17a38bd718ff861333fe7ebae43
Author: Wellington Chevreuil <wc...@apache.org>
AuthorDate: Mon Jun 10 10:43:40 2019 +0100

    HBASE-22183 [hbck2] Update hbck2 README to explain new setRegionState method.
---
 hbase-hbck2/README.md                              | 37 +++++++++++++++++++---
 .../src/main/java/org/apache/hbase/HBCK2.java      | 11 ++++---
 2 files changed, 38 insertions(+), 10 deletions(-)

diff --git a/hbase-hbck2/README.md b/hbase-hbck2/README.md
index 83f3830..fd74014 100644
--- a/hbase-hbck2/README.md
+++ b/hbase-hbck2/README.md
@@ -107,6 +107,25 @@ default=1
    An example making table name 'user' ENABLED:
      $ HBCK2 setTableState users ENABLED
    Returns whatever the previous table state was.
+
+ setRegionState <ENCODED_REGINNAME> <STATE>
+      Possible region states: OFFLINE, OPENING, OPEN, CLOSING, CLOSED,
+      SPLITTING, SPLIT, FAILED_OPEN, FAILED_CLOSE, MERGING, MERGED,
+      SPLITTING_NEW, MERGING_NEW
+      WARNING: This is a very risky option intended for use as last resort.
+       Example scenarios are when unassigns/assigns can't move
+   forward
+        due to region being in an inconsistent state in META. For example,
+        'unassigns' command can only proceed
+         if passed in region is in one of following states:
+                   [SPLITTING|SPLIT|MERGING|OPEN|CLOSING]
+      Before manually setting a region state with this command,
+      please certify that this region is not being handled
+      by a running procedure, such as Assign or Split.
+      An example setting region 'de00010733901a05f5a2a3a382e27dd4' to
+   CLOSING:
+        $ HBCK2 setRegionState de00010733901a05f5a2a3a382e27dd4 CLOSING
+      Returns "0" SUCCESS code if it informed region state is changed, "1" FAIL code otherwise.
 ```
 
 ## _HBCK2_ Overview
@@ -115,18 +134,26 @@ _HBCK2_ is currently a simple tool that does one thing at a time only.
 _HBCK2_ does not do diagnosis, leaving that function to other tooling,
 described below.
 
-In hbase-2.x, the Master is the final arbiter of all state, so a general principal of
-_HBCK2_ is that it asks the Master to effect all repair. This means a Master must be
+In hbase-2.x, the Master is the final arbiter of all state, so a general principal for most of
+_HBCK2_ commands is that it asks the Master to effect all repair. This means a Master must be
 up before you can run an _HBCK2_ command.
 
-_HBCK2_ works by making use of an intentionally obscured `HbckService` hosted on the
-Master. The Service publishes a few methods for the _HBCK2_ tool to pull on. The
+_HBCK2_ commands preferable implementation approach is to make use of an intentionally obscured
+`HbckService` hosted on the Master. The Service publishes a few methods for the _HBCK2_ tool to
+pull on. Therefore, for _HBCK2_ commands relying on Master's `HbckService` facade,
 first thing _HBCK2_ does is poke the cluster to ensure the service is available.
-It will fail if it is not or if the `HbckService` is lacking a wanted facility.
+It will fail if it is not or if the `HbckService` is lacking the given method, and the same does
+not have a client side counterpart implementation.
+
 _HBCK2_ versions should be able to work across multiple hbase-2 releases. It will
 fail with a complaint if it is unable to run. There is no `HbckService` in versions
 of hbase before 2.0.3 and 2.1.1. _HBCK2_ will not work against these versions.
 
+As _HBCK2_ evolves independently from _HBase_ main project, there will be eventually the need to
+define new fix methods with client side implementations (at least until a related one can be added
+on Master's `HbckService` facade), so that _HBCK2_ can operate on such _HBase_ releases without
+requiring a cluster upgrade. One example of such methods is the _setRegionState_.
+
 ## Finding Problems
 
 While _hbck1_ performed analysis reporting your cluster GOOD or BAD, _HBCK2_
diff --git a/hbase-hbck2/src/main/java/org/apache/hbase/HBCK2.java b/hbase-hbck2/src/main/java/org/apache/hbase/HBCK2.java
index ff0eeee..1432312 100644
--- a/hbase-hbck2/src/main/java/org/apache/hbase/HBCK2.java
+++ b/hbase-hbck2/src/main/java/org/apache/hbase/HBCK2.java
@@ -319,19 +319,20 @@ public class HBCK2 extends Configured implements Tool {
     writer.println(" " + SET_REGION_STATE + " <ENCODED_REGIONNAME> <STATE>");
     writer.println("   Possible region states: " + Arrays.stream(RegionState.State.values()).
       map(i -> i.toString()).collect(Collectors.joining(", ")));
-    writer.println("   WARNING: This is a very risky option intended for use as last resource.");
-    writer.println("    Example scenarios for this is when unassings/assigns can't move forward ");
-    writer.println("     due region being on an inconsistent state in META. For example, ");
+    writer.println("   WARNING: This is a very risky option intended for use as last resort.");
+    writer.println("    Example scenarios are when unassigns/assigns can't move forward ");
+    writer.println("     due to region being in an inconsistent state in META. For example, ");
     writer.println("     'unassigns' command can only proceed ");
     writer.println("      if passed in region is in one of following states: ");
     writer.println("                [SPLITTING|SPLIT|MERGING|OPEN|CLOSING]");
     writer.println("   Before manually setting a region state with this command,");
     writer.println("   please certify that this region is not being handled by");
-    writer.println("   a running procedure, such as Assign or Split. You can get a view of ");
+    writer.println("   by a running procedure, such as Assign or Split. You can get a view of ");
     writer.println("   running procedures from hbase shell, using 'list_procedures' command. ");
     writer.println("   An example setting region 'de00010733901a05f5a2a3a382e27dd4' to CLOSING:");
     writer.println("     $ HBCK2 setRegionState de00010733901a05f5a2a3a382e27dd4 CLOSING");
-    writer.println("   Returns whatever the previous region state was.");
+    writer.println("   Returns \"0\" SUCCESS code if it informed region state is changed, "
+      + "\"1\" FAIL code otherwise.");
     writer.println();
 
     writer.close();