From 705c2ec90fcb31e3a0bb03919f8ba4254315bf35 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Date: Thu, 2 Nov 2023 13:30:01 +0530 Subject: [PATCH 01/12] HBASE-28151: Option to allow/disallow bypassing pre transit check for assing/unassign --- .../apache/hadoop/hbase/client/HBaseHbck.java | 8 ++++---- .../org/apache/hadoop/hbase/client/Hbck.java | 8 ++++---- .../shaded/protobuf/RequestConverter.java | 8 ++++---- .../main/protobuf/server/master/Master.proto | 2 ++ .../hbase/master/MasterRpcServices.java | 6 ++++-- .../master/assignment/AssignmentManager.java | 20 ++++++++++++------- .../apache/hadoop/hbase/client/TestHbck.java | 2 +- .../master/assignment/TestRegionBypass.java | 2 +- 8 files changed, 33 insertions(+), 23 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java index 8df0504b2a9a..ea010055ba10 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java @@ -135,10 +135,10 @@ public Map setRegionStateInMeta( } @Override - public List assigns(List encodedRegionNames, boolean override) throws IOException { + public List assigns(List encodedRegionNames, boolean override, boolean forceOverride) throws IOException { try { AssignsResponse response = this.hbck.assigns(rpcControllerFactory.newController(), - RequestConverter.toAssignRegionsRequest(encodedRegionNames, override)); + RequestConverter.toAssignRegionsRequest(encodedRegionNames, override, forceOverride)); return response.getPidList(); } catch (ServiceException se) { LOG.debug(toCommaDelimitedString(encodedRegionNames), se); @@ -147,11 +147,11 @@ public List assigns(List encodedRegionNames, boolean override) thr } @Override - public List unassigns(List encodedRegionNames, boolean override) + public List unassigns(List encodedRegionNames, boolean override, boolean forceOverride) throws IOException { try { UnassignsResponse response = this.hbck.unassigns(rpcControllerFactory.newController(), - RequestConverter.toUnassignRegionsRequest(encodedRegionNames, override)); + RequestConverter.toUnassignRegionsRequest(encodedRegionNames, override, forceOverride)); return response.getPidList(); } catch (ServiceException se) { LOG.debug(toCommaDelimitedString(encodedRegionNames), se); diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java index b5ba25058838..5773ead23c4b 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java @@ -71,10 +71,10 @@ public interface Hbck extends Abortable, Closeable { * hbase:meta region and de00010733901a05f5a2a3a382e27dd4 is an example * of what a random user-space encoded Region name looks like. */ - List assigns(List encodedRegionNames, boolean override) throws IOException; + List assigns(List encodedRegionNames, boolean override, boolean forceOverride) throws IOException; default List assigns(List encodedRegionNames) throws IOException { - return assigns(encodedRegionNames, false); + return assigns(encodedRegionNames, false, false); } /** @@ -91,10 +91,10 @@ default List assigns(List encodedRegionNames) throws IOException { * hbase:meta region and de00010733901a05f5a2a3a382e27dd4 is an example * of what a random user-space encoded Region name looks like. */ - List unassigns(List encodedRegionNames, boolean override) throws IOException; + List unassigns(List encodedRegionNames, boolean override, boolean forceOverride) throws IOException; default List unassigns(List encodedRegionNames) throws IOException { - return unassigns(encodedRegionNames, false); + return unassigns(encodedRegionNames, false, false); } /** diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java index 33884158da48..9a0ce2ec8a41 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java @@ -1577,17 +1577,17 @@ private static List toProtoServerNames(List // HBCK2 public static MasterProtos.AssignsRequest toAssignRegionsRequest(List encodedRegionNames, - boolean override) { + boolean override, boolean forceOverride) { MasterProtos.AssignsRequest.Builder b = MasterProtos.AssignsRequest.newBuilder(); return b.addAllRegion(toEncodedRegionNameRegionSpecifiers(encodedRegionNames)) - .setOverride(override).build(); + .setOverride(override).setForceOverride(forceOverride).build(); } public static MasterProtos.UnassignsRequest - toUnassignRegionsRequest(List encodedRegionNames, boolean override) { + toUnassignRegionsRequest(List encodedRegionNames, boolean override, boolean forceOverride) { MasterProtos.UnassignsRequest.Builder b = MasterProtos.UnassignsRequest.newBuilder(); return b.addAllRegion(toEncodedRegionNameRegionSpecifiers(encodedRegionNames)) - .setOverride(override).build(); + .setOverride(override).setForceOverride(forceOverride).build(); } public static MasterProtos.ScheduleServerCrashProcedureRequest diff --git a/hbase-protocol-shaded/src/main/protobuf/server/master/Master.proto b/hbase-protocol-shaded/src/main/protobuf/server/master/Master.proto index 5d715fdcdd16..44de98e3321c 100644 --- a/hbase-protocol-shaded/src/main/protobuf/server/master/Master.proto +++ b/hbase-protocol-shaded/src/main/protobuf/server/master/Master.proto @@ -1285,6 +1285,7 @@ message SetRegionStateInMetaResponse { message AssignsRequest { repeated RegionSpecifier region = 1; optional bool override = 2 [default = false]; + optional bool forceOverride = 3 [default = false]; } /** Like Admin's AssignRegionResponse except it can @@ -1300,6 +1301,7 @@ message AssignsResponse { message UnassignsRequest { repeated RegionSpecifier region = 1; optional bool override = 2 [default = false]; + optional bool forceOverride = 3 [default = false]; } /** Like Admin's UnassignRegionResponse except it can diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java index b6a17d8503b2..becfa9cf7dfc 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java @@ -2699,6 +2699,7 @@ public MasterProtos.AssignsResponse assigns(RpcController controller, MasterProtos.AssignsResponse.Builder responseBuilder = MasterProtos.AssignsResponse.newBuilder(); final boolean override = request.getOverride(); + final boolean forceOverride = request.getForceOverride(); LOG.info("{} assigns, override={}", server.getClientIdAuditPrefix(), override); for (HBaseProtos.RegionSpecifier rs : request.getRegionList()) { final RegionInfo info = getRegionInfo(rs); @@ -2706,7 +2707,7 @@ public MasterProtos.AssignsResponse assigns(RpcController controller, LOG.info("Unknown region {}", rs); continue; } - responseBuilder.addPid(Optional.ofNullable(am.createOneAssignProcedure(info, override)) + responseBuilder.addPid(Optional.ofNullable(am.createOneAssignProcedure(info, override, forceOverride)) .map(pe::submitProcedure).orElse(Procedure.NO_PROC_ID)); } return responseBuilder.build(); @@ -2726,6 +2727,7 @@ public MasterProtos.UnassignsResponse unassigns(RpcController controller, MasterProtos.UnassignsResponse.Builder responseBuilder = MasterProtos.UnassignsResponse.newBuilder(); final boolean override = request.getOverride(); + final boolean forceOverride = request.getForceOverride(); LOG.info("{} unassigns, override={}", server.getClientIdAuditPrefix(), override); for (HBaseProtos.RegionSpecifier rs : request.getRegionList()) { final RegionInfo info = getRegionInfo(rs); @@ -2733,7 +2735,7 @@ public MasterProtos.UnassignsResponse unassigns(RpcController controller, LOG.info("Unknown region {}", rs); continue; } - responseBuilder.addPid(Optional.ofNullable(am.createOneUnassignProcedure(info, override)) + responseBuilder.addPid(Optional.ofNullable(am.createOneUnassignProcedure(info, override, forceOverride)) .map(pe::submitProcedure).orElse(Procedure.NO_PROC_ID)); } return responseBuilder.build(); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java index f2cfad87997c..a9714edd8db7 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java @@ -756,11 +756,14 @@ private void preTransitCheck(RegionStateNode regionNode, RegionState.State[] exp * @param override If false, check RegionState is appropriate for assign; if not throw exception. */ private TransitRegionStateProcedure createAssignProcedure(RegionInfo regionInfo, ServerName sn, - boolean override) throws IOException { + boolean override, boolean forceOverride) throws IOException { RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(regionInfo); regionNode.lock(); try { if (override) { + if (!forceOverride) { + preTransitCheck(regionNode, STATES_EXPECTED_ON_ASSIGN); + } if (regionNode.getProcedure() != null) { regionNode.unsetProcedure(regionNode.getProcedure()); } @@ -778,7 +781,7 @@ private TransitRegionStateProcedure createAssignProcedure(RegionInfo regionInfo, /** * Create an assign TransitRegionStateProcedure. Does NO checking of RegionState. Presumes * appriopriate state ripe for assign. - * @see #createAssignProcedure(RegionInfo, ServerName, boolean) + * @see #createAssignProcedure(RegionInfo, ServerName, boolean, boolean) */ private TransitRegionStateProcedure createAssignProcedure(RegionStateNode regionNode, ServerName targetServer) { @@ -792,7 +795,7 @@ private TransitRegionStateProcedure createAssignProcedure(RegionStateNode region } public long assign(RegionInfo regionInfo, ServerName sn) throws IOException { - TransitRegionStateProcedure proc = createAssignProcedure(regionInfo, sn, false); + TransitRegionStateProcedure proc = createAssignProcedure(regionInfo, sn, false, false); ProcedureSyncWait.submitAndWaitProcedure(master.getMasterProcedureExecutor(), proc); return proc.getProcId(); } @@ -808,7 +811,7 @@ public long assign(RegionInfo regionInfo) throws IOException { */ public Future assignAsync(RegionInfo regionInfo, ServerName sn) throws IOException { return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), - createAssignProcedure(regionInfo, sn, false)); + createAssignProcedure(regionInfo, sn, false, false)); } /** @@ -952,10 +955,10 @@ static int compare(TransitRegionStateProcedure left, TransitRegionStateProcedure * method is called from HBCK2. * @return an assign or null */ - public TransitRegionStateProcedure createOneAssignProcedure(RegionInfo ri, boolean override) { + public TransitRegionStateProcedure createOneAssignProcedure(RegionInfo ri, boolean override, boolean forceOverride) { TransitRegionStateProcedure trsp = null; try { - trsp = createAssignProcedure(ri, null, override); + trsp = createAssignProcedure(ri, null, override, forceOverride); } catch (IOException ioe) { LOG.info( "Failed {} assign, override={}" @@ -969,12 +972,15 @@ public TransitRegionStateProcedure createOneAssignProcedure(RegionInfo ri, boole * Create one TransitRegionStateProcedure to unassign a region. This method is called from HBCK2. * @return an unassign or null */ - public TransitRegionStateProcedure createOneUnassignProcedure(RegionInfo ri, boolean override) { + public TransitRegionStateProcedure createOneUnassignProcedure(RegionInfo ri, boolean override, boolean forceOverride) { RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(ri); TransitRegionStateProcedure trsp = null; regionNode.lock(); try { if (override) { + if (!forceOverride) { + preTransitCheck(regionNode, STATES_EXPECTED_ON_UNASSIGN_OR_MOVE); + } if (regionNode.getProcedure() != null) { regionNode.unsetProcedure(regionNode.getProcedure()); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java index 406b25fed4e0..fde49da7e6cf 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java @@ -254,7 +254,7 @@ public void testAssigns() throws Exception { // unassigned.... makes for a mess but operator might want to do this at an extreme when // doing fixup of broke cluster. pids = hbck.unassigns( - regions.stream().map(RegionInfo::getEncodedName).collect(Collectors.toList()), true); + regions.stream().map(RegionInfo::getEncodedName).collect(Collectors.toList()), true, true); waitOnPids(pids); for (long pid : pids) { assertNotEquals(Procedure.NO_PROC_ID, pid); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestRegionBypass.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestRegionBypass.java index 3678210ee9c5..0604c72e2693 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestRegionBypass.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestRegionBypass.java @@ -135,7 +135,7 @@ public void testBypass() throws IOException, InterruptedException { } // Now assign with the override flag. for (RegionInfo ri : regions) { - TEST_UTIL.getHbck().assigns(Arrays. asList(ri.getEncodedName()), true); + TEST_UTIL.getHbck().assigns(Arrays. asList(ri.getEncodedName()), true, false); } while ( !TEST_UTIL.getHBaseCluster().getMaster().getMasterProcedureExecutor().getActiveProcIds() From 2e5b2ee11d9d228254198587e6339637eebf1cd1 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Date: Thu, 2 Nov 2023 13:46:57 +0530 Subject: [PATCH 02/12] HBASE-28151: Option to allow/disallow bypassing pre transit check for assing/unassign --- .../src/main/java/org/apache/hadoop/hbase/client/Hbck.java | 2 ++ .../src/test/java/org/apache/hadoop/hbase/client/TestHbck.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java index 5773ead23c4b..b675ef489adb 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java @@ -67,6 +67,7 @@ public interface Hbck extends Abortable, Closeable { * 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. + * @param forceOverride Skips preTransitCheck only when selected along with override option * @param 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. @@ -87,6 +88,7 @@ default List assigns(List encodedRegionNames) throws IOException { * 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. + * @param forceOverride Skips preTransitCheck only when selected along with override option * @param 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. diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java index fde49da7e6cf..bcf8e45b4d88 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java @@ -250,7 +250,7 @@ public void testAssigns() throws Exception { for (long pid : pids) { assertEquals(Procedure.NO_PROC_ID, pid); } - // If we pass override, then we should be able to unassign EVEN THOUGH Regions already + // If we pass force override, then we should be able to unassign EVEN THOUGH Regions already // unassigned.... makes for a mess but operator might want to do this at an extreme when // doing fixup of broke cluster. pids = hbck.unassigns( From 78fbc917fc9b12f1eb37c98f044ee6758485c451 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Date: Thu, 2 Nov 2023 14:23:56 +0530 Subject: [PATCH 03/12] HBASE-28151: Option to allow/disallow bypassing pre transit check for assing/unassign --- .../hbase/master/procedure/TruncateRegionProcedure.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/TruncateRegionProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/TruncateRegionProcedure.java index 5e907c1681ac..cba506187c72 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/TruncateRegionProcedure.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/TruncateRegionProcedure.java @@ -210,10 +210,10 @@ public TableOperationType getTableOperationType() { private TransitRegionStateProcedure createUnAssignProcedures(MasterProcedureEnv env) throws IOException { - return env.getAssignmentManager().createOneUnassignProcedure(getRegion(), true); + return env.getAssignmentManager().createOneUnassignProcedure(getRegion(), true, false); } private TransitRegionStateProcedure createAssignProcedures(MasterProcedureEnv env) { - return env.getAssignmentManager().createOneAssignProcedure(getRegion(), true); + return env.getAssignmentManager().createOneAssignProcedure(getRegion(), true, false); } } From af93e516d9be48ef8997abd60d8f591327efa8e0 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Date: Thu, 2 Nov 2023 16:19:09 +0530 Subject: [PATCH 04/12] HBASE-28151: Option to allow/disallow bypassing pre transit check for assing/unassign --- .../java/org/apache/hadoop/hbase/client/HBaseHbck.java | 7 ++++--- .../main/java/org/apache/hadoop/hbase/client/Hbck.java | 6 ++++-- .../hadoop/hbase/shaded/protobuf/RequestConverter.java | 4 ++-- .../apache/hadoop/hbase/master/MasterRpcServices.java | 10 ++++++---- .../hbase/master/assignment/AssignmentManager.java | 6 ++++-- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java index ea010055ba10..29636b81ea9e 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java @@ -135,7 +135,8 @@ public Map setRegionStateInMeta( } @Override - public List assigns(List encodedRegionNames, boolean override, boolean forceOverride) throws IOException { + public List assigns(List encodedRegionNames, boolean override, + boolean forceOverride) throws IOException { try { AssignsResponse response = this.hbck.assigns(rpcControllerFactory.newController(), RequestConverter.toAssignRegionsRequest(encodedRegionNames, override, forceOverride)); @@ -147,8 +148,8 @@ public List assigns(List encodedRegionNames, boolean override, boo } @Override - public List unassigns(List encodedRegionNames, boolean override, boolean forceOverride) - throws IOException { + public List unassigns(List encodedRegionNames, boolean override, + boolean forceOverride) throws IOException { try { UnassignsResponse response = this.hbck.unassigns(rpcControllerFactory.newController(), RequestConverter.toUnassignRegionsRequest(encodedRegionNames, override, forceOverride)); diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java index b675ef489adb..0d0418c25b90 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java @@ -72,7 +72,8 @@ public interface Hbck extends Abortable, Closeable { * hbase:meta region and de00010733901a05f5a2a3a382e27dd4 is an example * of what a random user-space encoded Region name looks like. */ - List assigns(List encodedRegionNames, boolean override, boolean forceOverride) throws IOException; + List assigns(List encodedRegionNames, boolean override, boolean forceOverride) + throws IOException; default List assigns(List encodedRegionNames) throws IOException { return assigns(encodedRegionNames, false, false); @@ -93,7 +94,8 @@ default List assigns(List encodedRegionNames) throws IOException { * hbase:meta region and de00010733901a05f5a2a3a382e27dd4 is an example * of what a random user-space encoded Region name looks like. */ - List unassigns(List encodedRegionNames, boolean override, boolean forceOverride) throws IOException; + List unassigns(List encodedRegionNames, boolean override, boolean forceOverride) + throws IOException; default List unassigns(List encodedRegionNames) throws IOException { return unassigns(encodedRegionNames, false, false); diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java index 9d22f6cfc894..76b1473411c1 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java @@ -1594,8 +1594,8 @@ public static MasterProtos.AssignsRequest toAssignRegionsRequest(List en .setOverride(override).setForceOverride(forceOverride).build(); } - public static MasterProtos.UnassignsRequest - toUnassignRegionsRequest(List encodedRegionNames, boolean override, boolean forceOverride) { + public static MasterProtos.UnassignsRequest toUnassignRegionsRequest( + List encodedRegionNames, boolean override, boolean forceOverride) { MasterProtos.UnassignsRequest.Builder b = MasterProtos.UnassignsRequest.newBuilder(); return b.addAllRegion(toEncodedRegionNameRegionSpecifiers(encodedRegionNames)) .setOverride(override).setForceOverride(forceOverride).build(); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java index 8bec438788a6..74e244e79501 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java @@ -2721,8 +2721,9 @@ public MasterProtos.AssignsResponse assigns(RpcController controller, LOG.info("Unknown region {}", rs); continue; } - responseBuilder.addPid(Optional.ofNullable(am.createOneAssignProcedure(info, override, forceOverride)) - .map(pe::submitProcedure).orElse(Procedure.NO_PROC_ID)); + responseBuilder + .addPid(Optional.ofNullable(am.createOneAssignProcedure(info, override, forceOverride)) + .map(pe::submitProcedure).orElse(Procedure.NO_PROC_ID)); } return responseBuilder.build(); } @@ -2749,8 +2750,9 @@ public MasterProtos.UnassignsResponse unassigns(RpcController controller, LOG.info("Unknown region {}", rs); continue; } - responseBuilder.addPid(Optional.ofNullable(am.createOneUnassignProcedure(info, override, forceOverride)) - .map(pe::submitProcedure).orElse(Procedure.NO_PROC_ID)); + responseBuilder + .addPid(Optional.ofNullable(am.createOneUnassignProcedure(info, override, forceOverride)) + .map(pe::submitProcedure).orElse(Procedure.NO_PROC_ID)); } return responseBuilder.build(); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java index 982b37628c6a..7c3318b3c832 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java @@ -956,7 +956,8 @@ static int compare(TransitRegionStateProcedure left, TransitRegionStateProcedure * method is called from HBCK2. * @return an assign or null */ - public TransitRegionStateProcedure createOneAssignProcedure(RegionInfo ri, boolean override, boolean forceOverride) { + public TransitRegionStateProcedure createOneAssignProcedure(RegionInfo ri, boolean override, + boolean forceOverride) { TransitRegionStateProcedure trsp = null; try { trsp = createAssignProcedure(ri, null, override, forceOverride); @@ -973,7 +974,8 @@ public TransitRegionStateProcedure createOneAssignProcedure(RegionInfo ri, boole * Create one TransitRegionStateProcedure to unassign a region. This method is called from HBCK2. * @return an unassign or null */ - public TransitRegionStateProcedure createOneUnassignProcedure(RegionInfo ri, boolean override, boolean forceOverride) { + public TransitRegionStateProcedure createOneUnassignProcedure(RegionInfo ri, boolean override, + boolean forceOverride) { RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(ri); TransitRegionStateProcedure trsp = null; regionNode.lock(); From 65500d7510950bd94ab851910da5aa8aca751171 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Date: Fri, 3 Nov 2023 12:58:14 +0530 Subject: [PATCH 05/12] HBASE-28151: Option to allow/disallow bypassing pre transit check for assing/unassign --- .../apache/hadoop/hbase/master/assignment/TestRegionBypass.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestRegionBypass.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestRegionBypass.java index 0604c72e2693..bdefc4bb3a29 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestRegionBypass.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestRegionBypass.java @@ -112,7 +112,7 @@ public void testBypass() throws IOException, InterruptedException { for (Procedure p : ps) { if (p instanceof StallingAssignProcedure) { List bs = - TEST_UTIL.getHbck().bypassProcedure(Arrays.asList(p.getProcId()), 1000, true, false); + TEST_UTIL.getHbck().bypassProcedure(Arrays.asList(p.getProcId()), 1000, true, true); for (Boolean b : bs) { LOG.info("BYPASSED {} {}", p.getProcId(), b); } From 008339a11db390039463f960c16c3ab317d414ec Mon Sep 17 00:00:00 2001 From: Rahul Kumar Date: Fri, 3 Nov 2023 17:49:03 +0530 Subject: [PATCH 06/12] HBASE-28151: Option to allow/disallow bypassing pre transit check for assing/unassign --- .../hadoop/hbase/master/assignment/TestRegionBypass.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestRegionBypass.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestRegionBypass.java index bdefc4bb3a29..6dd717ab66bc 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestRegionBypass.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestRegionBypass.java @@ -112,7 +112,7 @@ public void testBypass() throws IOException, InterruptedException { for (Procedure p : ps) { if (p instanceof StallingAssignProcedure) { List bs = - TEST_UTIL.getHbck().bypassProcedure(Arrays.asList(p.getProcId()), 1000, true, true); + TEST_UTIL.getHbck().bypassProcedure(Arrays.asList(p.getProcId()), 1000, true, false); for (Boolean b : bs) { LOG.info("BYPASSED {} {}", p.getProcId(), b); } @@ -135,7 +135,7 @@ public void testBypass() throws IOException, InterruptedException { } // Now assign with the override flag. for (RegionInfo ri : regions) { - TEST_UTIL.getHbck().assigns(Arrays. asList(ri.getEncodedName()), true, false); + TEST_UTIL.getHbck().assigns(Arrays. asList(ri.getEncodedName()), true, true); } while ( !TEST_UTIL.getHBaseCluster().getMaster().getMasterProcedureExecutor().getActiveProcIds() From 2a5f22019878f77b4750b79682c6c9f205daab60 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Date: Mon, 13 Nov 2023 15:18:54 +0530 Subject: [PATCH 07/12] HBASE-28151: Option to allow/disallow bypassing pre transit check for assing/unassign --- .../org/apache/hadoop/hbase/client/TestHbck.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java index bcf8e45b4d88..75ae3f710309 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java @@ -250,6 +250,15 @@ public void testAssigns() throws Exception { for (long pid : pids) { assertEquals(Procedure.NO_PROC_ID, pid); } + // Rerun the unassign with override. Should fail for all Regions since they already + // unassigned; failed + // unassign will manifest as all pids being -1 (ever since HBASE-24885). + pids = hbck.unassigns( + regions.stream().map(RegionInfo::getEncodedName).collect(Collectors.toList()), true, false); + waitOnPids(pids); + for (long pid : pids) { + assertEquals(Procedure.NO_PROC_ID, pid); + } // If we pass force override, then we should be able to unassign EVEN THOUGH Regions already // unassigned.... makes for a mess but operator might want to do this at an extreme when // doing fixup of broke cluster. @@ -283,6 +292,12 @@ public void testAssigns() throws Exception { LOG.info("RS: {}", rs.toString()); assertTrue(rs.toString(), rs.isOpened()); } + // Rerun the assign with override. Should fail for all Regions since they already assigned + pids = hbck.assigns( + regions.stream().map(RegionInfo::getEncodedName).collect(Collectors.toList()), true, false); + for (long pid : pids) { + assertEquals(Procedure.NO_PROC_ID, pid); + } // What happens if crappy region list passed? pids = hbck.assigns( Arrays.stream(new String[] { "a", "some rubbish name" }).collect(Collectors.toList())); From 91c20396552a3cdf486f4c54fcdcfa8a78a820c0 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Date: Tue, 14 Nov 2023 12:09:49 +0530 Subject: [PATCH 08/12] HBASE-28151: Option to allow/disallow bypassing pre transit check for assing/unassign --- .../main/java/org/apache/hadoop/hbase/client/Hbck.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java index 0d0418c25b90..a32ab8e8bda1 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java @@ -75,6 +75,10 @@ public interface Hbck extends Abortable, Closeable { List assigns(List encodedRegionNames, boolean override, boolean forceOverride) throws IOException; + List assigns(List encodedRegionNames, boolean override) { + return assigns(encodedRegionNames, override, false); + } + default List assigns(List encodedRegionNames) throws IOException { return assigns(encodedRegionNames, false, false); } @@ -97,6 +101,10 @@ default List assigns(List encodedRegionNames) throws IOException { List unassigns(List encodedRegionNames, boolean override, boolean forceOverride) throws IOException; + List unassigns(List encodedRegionNames, boolean override) { + return unassigns(encodedRegionNames, override, false); + } + default List unassigns(List encodedRegionNames) throws IOException { return unassigns(encodedRegionNames, false, false); } From 06bfc847453b0c1c4c5bb2e587b8823e6ba663b6 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Date: Tue, 14 Nov 2023 13:34:34 +0530 Subject: [PATCH 09/12] HBASE-28151: Option to allow/disallow bypassing pre transit check for assing/unassign --- .../apache/hadoop/hbase/client/HBaseHbck.java | 1 + .../org/apache/hadoop/hbase/client/Hbck.java | 22 ++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java index 29636b81ea9e..8263dc7ab805 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java @@ -134,6 +134,7 @@ public Map setRegionStateInMeta( } } + @Override public List assigns(List encodedRegionNames, boolean override, boolean forceOverride) throws IOException { diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java index a32ab8e8bda1..1624c436436a 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java @@ -62,12 +62,13 @@ public interface Hbck extends Abortable, Closeable { * 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. - * @param override You need to add the override for case where a region has previously + * @param override You need to add override for unset of the procedure from + * RegionStateNode without byPassing preTransitCheck + * @param forceOverride You need to add forceOverride 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. - * @param forceOverride Skips preTransitCheck only when selected along with override option + * on the target entity (intentionally). + * Skips preTransitCheck only when selected along with override option * @param 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. @@ -75,7 +76,7 @@ public interface Hbck extends Abortable, Closeable { List assigns(List encodedRegionNames, boolean override, boolean forceOverride) throws IOException; - List assigns(List encodedRegionNames, boolean override) { + default List assigns(List encodedRegionNames, boolean override) throws IOException { return assigns(encodedRegionNames, override, false); } @@ -88,12 +89,13 @@ default List assigns(List encodedRegionNames) throws IOException { * 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. - * @param override You need to add the override for case where a region has previously + * @param override You need to add override for unset of the procedure from + * RegionStateNode without byPassing preTransitCheck + * @param forceOverride You need to add forceOverride 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. - * @param forceOverride Skips preTransitCheck only when selected along with override option + * on the target entity (intentionally). + * Skips preTransitCheck only when selected along with override option * @param 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. @@ -101,7 +103,7 @@ default List assigns(List encodedRegionNames) throws IOException { List unassigns(List encodedRegionNames, boolean override, boolean forceOverride) throws IOException; - List unassigns(List encodedRegionNames, boolean override) { + default List unassigns(List encodedRegionNames, boolean override) throws IOException { return unassigns(encodedRegionNames, override, false); } From 97c44029e05ca86f78c98791823a09a1f5c4c645 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Date: Tue, 14 Nov 2023 15:01:51 +0530 Subject: [PATCH 10/12] HBASE-28151: Option to allow/disallow bypassing pre transit check for assing/unassign --- .../org/apache/hadoop/hbase/client/HBaseHbck.java | 1 - .../java/org/apache/hadoop/hbase/client/Hbck.java | 11 ++++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java index 8263dc7ab805..29636b81ea9e 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java @@ -134,7 +134,6 @@ public Map setRegionStateInMeta( } } - @Override public List assigns(List encodedRegionNames, boolean override, boolean forceOverride) throws IOException { diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java index 1624c436436a..7e02e2bde22a 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java @@ -67,8 +67,8 @@ public interface Hbck extends Abortable, Closeable { * @param forceOverride You need to add forceOverride 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). - * Skips preTransitCheck only when selected along with override option + * on the target entity (intentionally). Skips preTransitCheck only when + * selected along with override option * @param 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. @@ -94,8 +94,8 @@ default List assigns(List encodedRegionNames) throws IOException { * @param forceOverride You need to add forceOverride 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). - * Skips preTransitCheck only when selected along with override option + * on the target entity (intentionally). Skips preTransitCheck only when + * selected along with override option * @param 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. @@ -103,7 +103,8 @@ default List assigns(List encodedRegionNames) throws IOException { List unassigns(List encodedRegionNames, boolean override, boolean forceOverride) throws IOException; - default List unassigns(List encodedRegionNames, boolean override) throws IOException { + default List unassigns(List encodedRegionNames, boolean override) + throws IOException { return unassigns(encodedRegionNames, override, false); } From c9c5efba49efd17f7ce291318ae67d3235d9ce13 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Date: Tue, 19 Dec 2023 17:10:13 +0530 Subject: [PATCH 11/12] HBASE-28151: Option to allow/disallow bypassing pre transit check for assing/unassign --- .../org/apache/hadoop/hbase/client/HBaseHbck.java | 8 ++++---- .../java/org/apache/hadoop/hbase/client/Hbck.java | 14 +++++++------- .../hbase/shaded/protobuf/RequestConverter.java | 8 ++++---- .../src/main/protobuf/server/master/Master.proto | 4 ++-- .../hadoop/hbase/master/MasterRpcServices.java | 8 ++++---- .../hbase/master/assignment/AssignmentManager.java | 12 ++++++------ .../master/procedure/TruncateRegionProcedure.java | 4 ++-- .../org/apache/hadoop/hbase/client/TestHbck.java | 2 +- 8 files changed, 30 insertions(+), 30 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java index 29636b81ea9e..a05a1c12f1ab 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java @@ -136,10 +136,10 @@ public Map setRegionStateInMeta( @Override public List assigns(List encodedRegionNames, boolean override, - boolean forceOverride) throws IOException { + boolean force) throws IOException { try { AssignsResponse response = this.hbck.assigns(rpcControllerFactory.newController(), - RequestConverter.toAssignRegionsRequest(encodedRegionNames, override, forceOverride)); + RequestConverter.toAssignRegionsRequest(encodedRegionNames, override, force)); return response.getPidList(); } catch (ServiceException se) { LOG.debug(toCommaDelimitedString(encodedRegionNames), se); @@ -149,10 +149,10 @@ public List assigns(List encodedRegionNames, boolean override, @Override public List unassigns(List encodedRegionNames, boolean override, - boolean forceOverride) throws IOException { + boolean force) throws IOException { try { UnassignsResponse response = this.hbck.unassigns(rpcControllerFactory.newController(), - RequestConverter.toUnassignRegionsRequest(encodedRegionNames, override, forceOverride)); + RequestConverter.toUnassignRegionsRequest(encodedRegionNames, override, force)); return response.getPidList(); } catch (ServiceException se) { LOG.debug(toCommaDelimitedString(encodedRegionNames), se); diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java index 7e02e2bde22a..b9607127747a 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java @@ -64,7 +64,7 @@ public interface Hbck extends Abortable, Closeable { * hooks. * @param override You need to add override for unset of the procedure from * RegionStateNode without byPassing preTransitCheck - * @param forceOverride You need to add forceOverride for case where a region has previously + * @param force You need to add force 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). Skips preTransitCheck only when @@ -73,11 +73,11 @@ public interface Hbck extends Abortable, Closeable { * hbase:meta region and de00010733901a05f5a2a3a382e27dd4 is an example * of what a random user-space encoded Region name looks like. */ - List assigns(List encodedRegionNames, boolean override, boolean forceOverride) + List assigns(List encodedRegionNames, boolean override, boolean force) throws IOException; default List assigns(List encodedRegionNames, boolean override) throws IOException { - return assigns(encodedRegionNames, override, false); + return assigns(encodedRegionNames, override, true); } default List assigns(List encodedRegionNames) throws IOException { @@ -91,7 +91,7 @@ default List assigns(List encodedRegionNames) throws IOException { * Coprocessor hooks. * @param override You need to add override for unset of the procedure from * RegionStateNode without byPassing preTransitCheck - * @param forceOverride You need to add forceOverride for case where a region has previously + * @param force You need to add force 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). Skips preTransitCheck only when @@ -100,16 +100,16 @@ default List assigns(List encodedRegionNames) throws IOException { * hbase:meta region and de00010733901a05f5a2a3a382e27dd4 is an example * of what a random user-space encoded Region name looks like. */ - List unassigns(List encodedRegionNames, boolean override, boolean forceOverride) + List unassigns(List encodedRegionNames, boolean override, boolean force) throws IOException; default List unassigns(List encodedRegionNames, boolean override) throws IOException { - return unassigns(encodedRegionNames, override, false); + return unassigns(encodedRegionNames, override, true); } default List unassigns(List encodedRegionNames) throws IOException { - return unassigns(encodedRegionNames, false, false); + return unassigns(encodedRegionNames, false, true); } /** diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java index e87a451070e1..0773c697c64f 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java @@ -1590,17 +1590,17 @@ private static List toProtoServerNames(List // HBCK2 public static MasterProtos.AssignsRequest toAssignRegionsRequest(List encodedRegionNames, - boolean override, boolean forceOverride) { + boolean override, boolean force) { MasterProtos.AssignsRequest.Builder b = MasterProtos.AssignsRequest.newBuilder(); return b.addAllRegion(toEncodedRegionNameRegionSpecifiers(encodedRegionNames)) - .setOverride(override).setForceOverride(forceOverride).build(); + .setOverride(override).setForce(force).build(); } public static MasterProtos.UnassignsRequest toUnassignRegionsRequest( - List encodedRegionNames, boolean override, boolean forceOverride) { + List encodedRegionNames, boolean override, boolean force) { MasterProtos.UnassignsRequest.Builder b = MasterProtos.UnassignsRequest.newBuilder(); return b.addAllRegion(toEncodedRegionNameRegionSpecifiers(encodedRegionNames)) - .setOverride(override).setForceOverride(forceOverride).build(); + .setOverride(override).setForce(force).build(); } public static MasterProtos.ScheduleServerCrashProcedureRequest diff --git a/hbase-protocol-shaded/src/main/protobuf/server/master/Master.proto b/hbase-protocol-shaded/src/main/protobuf/server/master/Master.proto index d0e2f5b12546..a8adaa27453f 100644 --- a/hbase-protocol-shaded/src/main/protobuf/server/master/Master.proto +++ b/hbase-protocol-shaded/src/main/protobuf/server/master/Master.proto @@ -1302,7 +1302,7 @@ message SetRegionStateInMetaResponse { message AssignsRequest { repeated RegionSpecifier region = 1; optional bool override = 2 [default = false]; - optional bool forceOverride = 3 [default = false]; + optional bool force = 3 [default = false]; } /** Like Admin's AssignRegionResponse except it can @@ -1318,7 +1318,7 @@ message AssignsResponse { message UnassignsRequest { repeated RegionSpecifier region = 1; optional bool override = 2 [default = false]; - optional bool forceOverride = 3 [default = false]; + optional bool force= 3 [default = false]; } /** Like Admin's UnassignRegionResponse except it can diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java index 0badc9145dbe..87aa8b2fe50a 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java @@ -2714,7 +2714,7 @@ public MasterProtos.AssignsResponse assigns(RpcController controller, MasterProtos.AssignsResponse.Builder responseBuilder = MasterProtos.AssignsResponse.newBuilder(); final boolean override = request.getOverride(); - final boolean forceOverride = request.getForceOverride(); + final boolean force = request.getForce(); LOG.info("{} assigns, override={}", server.getClientIdAuditPrefix(), override); for (HBaseProtos.RegionSpecifier rs : request.getRegionList()) { final RegionInfo info = getRegionInfo(rs); @@ -2723,7 +2723,7 @@ public MasterProtos.AssignsResponse assigns(RpcController controller, continue; } responseBuilder - .addPid(Optional.ofNullable(am.createOneAssignProcedure(info, override, forceOverride)) + .addPid(Optional.ofNullable(am.createOneAssignProcedure(info, override, force)) .map(pe::submitProcedure).orElse(Procedure.NO_PROC_ID)); } return responseBuilder.build(); @@ -2743,7 +2743,7 @@ public MasterProtos.UnassignsResponse unassigns(RpcController controller, MasterProtos.UnassignsResponse.Builder responseBuilder = MasterProtos.UnassignsResponse.newBuilder(); final boolean override = request.getOverride(); - final boolean forceOverride = request.getForceOverride(); + final boolean force = request.getForce(); LOG.info("{} unassigns, override={}", server.getClientIdAuditPrefix(), override); for (HBaseProtos.RegionSpecifier rs : request.getRegionList()) { final RegionInfo info = getRegionInfo(rs); @@ -2752,7 +2752,7 @@ public MasterProtos.UnassignsResponse unassigns(RpcController controller, continue; } responseBuilder - .addPid(Optional.ofNullable(am.createOneUnassignProcedure(info, override, forceOverride)) + .addPid(Optional.ofNullable(am.createOneUnassignProcedure(info, override, force)) .map(pe::submitProcedure).orElse(Procedure.NO_PROC_ID)); } return responseBuilder.build(); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java index 7c3318b3c832..10a96e3350d8 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java @@ -757,12 +757,12 @@ private void preTransitCheck(RegionStateNode regionNode, RegionState.State[] exp * @param override If false, check RegionState is appropriate for assign; if not throw exception. */ private TransitRegionStateProcedure createAssignProcedure(RegionInfo regionInfo, ServerName sn, - boolean override, boolean forceOverride) throws IOException { + boolean override, boolean force) throws IOException { RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(regionInfo); regionNode.lock(); try { if (override) { - if (!forceOverride) { + if (!force) { preTransitCheck(regionNode, STATES_EXPECTED_ON_ASSIGN); } if (regionNode.getProcedure() != null) { @@ -957,10 +957,10 @@ static int compare(TransitRegionStateProcedure left, TransitRegionStateProcedure * @return an assign or null */ public TransitRegionStateProcedure createOneAssignProcedure(RegionInfo ri, boolean override, - boolean forceOverride) { + boolean force) { TransitRegionStateProcedure trsp = null; try { - trsp = createAssignProcedure(ri, null, override, forceOverride); + trsp = createAssignProcedure(ri, null, override, force); } catch (IOException ioe) { LOG.info( "Failed {} assign, override={}" @@ -975,13 +975,13 @@ public TransitRegionStateProcedure createOneAssignProcedure(RegionInfo ri, boole * @return an unassign or null */ public TransitRegionStateProcedure createOneUnassignProcedure(RegionInfo ri, boolean override, - boolean forceOverride) { + boolean force) { RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(ri); TransitRegionStateProcedure trsp = null; regionNode.lock(); try { if (override) { - if (!forceOverride) { + if (!force) { preTransitCheck(regionNode, STATES_EXPECTED_ON_UNASSIGN_OR_MOVE); } if (regionNode.getProcedure() != null) { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/TruncateRegionProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/TruncateRegionProcedure.java index cba506187c72..f40ef9e4f65c 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/TruncateRegionProcedure.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/TruncateRegionProcedure.java @@ -210,10 +210,10 @@ public TableOperationType getTableOperationType() { private TransitRegionStateProcedure createUnAssignProcedures(MasterProcedureEnv env) throws IOException { - return env.getAssignmentManager().createOneUnassignProcedure(getRegion(), true, false); + return env.getAssignmentManager().createOneUnassignProcedure(getRegion(), true, true); } private TransitRegionStateProcedure createAssignProcedures(MasterProcedureEnv env) { - return env.getAssignmentManager().createOneAssignProcedure(getRegion(), true, false); + return env.getAssignmentManager().createOneAssignProcedure(getRegion(), true, true); } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java index 75ae3f710309..360641e64b7d 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java @@ -259,7 +259,7 @@ public void testAssigns() throws Exception { for (long pid : pids) { assertEquals(Procedure.NO_PROC_ID, pid); } - // If we pass force override, then we should be able to unassign EVEN THOUGH Regions already + // If we pass force, then we should be able to unassign EVEN THOUGH Regions already // unassigned.... makes for a mess but operator might want to do this at an extreme when // doing fixup of broke cluster. pids = hbck.unassigns( From 765fbb3ea12f034902b2af47ce5b5b4b89b8df37 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Date: Wed, 20 Dec 2023 15:11:12 +0530 Subject: [PATCH 12/12] ran spotless:apply --- .../apache/hadoop/hbase/client/HBaseHbck.java | 8 ++++---- .../org/apache/hadoop/hbase/client/Hbck.java | 16 ++++++++-------- .../hbase/shaded/protobuf/RequestConverter.java | 4 ++-- .../hadoop/hbase/master/MasterRpcServices.java | 5 ++--- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java index a05a1c12f1ab..83b53ccba3c3 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java @@ -135,8 +135,8 @@ public Map setRegionStateInMeta( } @Override - public List assigns(List encodedRegionNames, boolean override, - boolean force) throws IOException { + public List assigns(List encodedRegionNames, boolean override, boolean force) + throws IOException { try { AssignsResponse response = this.hbck.assigns(rpcControllerFactory.newController(), RequestConverter.toAssignRegionsRequest(encodedRegionNames, override, force)); @@ -148,8 +148,8 @@ public List assigns(List encodedRegionNames, boolean override, } @Override - public List unassigns(List encodedRegionNames, boolean override, - boolean force) throws IOException { + public List unassigns(List encodedRegionNames, boolean override, boolean force) + throws IOException { try { UnassignsResponse response = this.hbck.unassigns(rpcControllerFactory.newController(), RequestConverter.toUnassignRegionsRequest(encodedRegionNames, override, force)); diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java index b9607127747a..6baa876f9387 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java @@ -64,10 +64,10 @@ public interface Hbck extends Abortable, Closeable { * hooks. * @param override You need to add override for unset of the procedure from * RegionStateNode without byPassing preTransitCheck - * @param force You need to add force 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). Skips preTransitCheck only when + * @param force You need to add force 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). Skips preTransitCheck only when * selected along with override option * @param encodedRegionNames Region encoded names; e.g. 1588230740 is the hard-coded encoding for * hbase:meta region and de00010733901a05f5a2a3a382e27dd4 is an example @@ -91,10 +91,10 @@ default List assigns(List encodedRegionNames) throws IOException { * Coprocessor hooks. * @param override You need to add override for unset of the procedure from * RegionStateNode without byPassing preTransitCheck - * @param force You need to add force 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). Skips preTransitCheck only when + * @param force You need to add force 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). Skips preTransitCheck only when * selected along with override option * @param encodedRegionNames Region encoded names; e.g. 1588230740 is the hard-coded encoding for * hbase:meta region and de00010733901a05f5a2a3a382e27dd4 is an example diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java index 0773c697c64f..ce12aaea0d24 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java @@ -1596,8 +1596,8 @@ public static MasterProtos.AssignsRequest toAssignRegionsRequest(List en .setOverride(override).setForce(force).build(); } - public static MasterProtos.UnassignsRequest toUnassignRegionsRequest( - List encodedRegionNames, boolean override, boolean force) { + public static MasterProtos.UnassignsRequest + toUnassignRegionsRequest(List encodedRegionNames, boolean override, boolean force) { MasterProtos.UnassignsRequest.Builder b = MasterProtos.UnassignsRequest.newBuilder(); return b.addAllRegion(toEncodedRegionNameRegionSpecifiers(encodedRegionNames)) .setOverride(override).setForce(force).build(); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java index 87aa8b2fe50a..1da8e03d179e 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java @@ -2722,9 +2722,8 @@ public MasterProtos.AssignsResponse assigns(RpcController controller, LOG.info("Unknown region {}", rs); continue; } - responseBuilder - .addPid(Optional.ofNullable(am.createOneAssignProcedure(info, override, force)) - .map(pe::submitProcedure).orElse(Procedure.NO_PROC_ID)); + responseBuilder.addPid(Optional.ofNullable(am.createOneAssignProcedure(info, override, force)) + .map(pe::submitProcedure).orElse(Procedure.NO_PROC_ID)); } return responseBuilder.build(); }