(hbase) 02/02: HBASE-28150 CreateTableProcedure and DeleteTableProcedure should sleep a while before retrying (#5502)
This is an automated email from the ASF dual-hosted git repository. zhangduo pushed a commit to branch branch-3 in repository https://gitbox.apache.org/repos/asf/hbase.git commit 300608cfcec47001199cf7b7aefc3ba3ea3a6ed9 Author: chaijunjie0101 <64140218+chaijunjie0...@users.noreply.github.com> AuthorDate: Sun Apr 21 19:39:32 2024 +0800 HBASE-28150 CreateTableProcedure and DeleteTableProcedure should sleep a while before retrying (#5502) Signed-off-by: Duo Zhang (cherry picked from commit 5a404c49504edfef250b248228093823942c5e1b) --- .../master/procedure/CreateTableProcedure.java | 24 +- .../master/procedure/DeleteTableProcedure.java | 24 +- .../BadMasterObserverForCreateDeleteTable.java | 55 ++ .../TestCreateDeleteTableProcedureWithRetry.java | 88 ++ .../master/procedure/TestCreateTableProcedure.java | 4 +- 5 files changed, 190 insertions(+), 5 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java index 17998fec7bd..23ad3b42aef 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java @@ -35,12 +35,15 @@ import org.apache.hadoop.hbase.fs.ErasureCodingUtils; import org.apache.hadoop.hbase.master.MasterCoprocessorHost; import org.apache.hadoop.hbase.master.MasterFileSystem; import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer; +import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException; +import org.apache.hadoop.hbase.procedure2.ProcedureUtil; import org.apache.hadoop.hbase.regionserver.storefiletracker.StoreFileTrackerFactory; import org.apache.hadoop.hbase.regionserver.storefiletracker.StoreFileTrackerValidationUtils; import org.apache.hadoop.hbase.rsgroup.RSGroupInfo; import org.apache.hadoop.hbase.util.CommonFSUtils; import org.apache.hadoop.hbase.util.FSTableDescriptors; import org.apache.hadoop.hbase.util.ModifyRegionUtils; +import org.apache.hadoop.hbase.util.RetryCounter; import org.apache.yetus.audience.InterfaceAudience; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -51,6 +54,7 @@ import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState; +import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos; @InterfaceAudience.Private public class CreateTableProcedure extends AbstractStateMachineTableProcedure { @@ -60,6 +64,7 @@ public class CreateTableProcedure extends AbstractStateMachineTableProcedure newRegions; + private RetryCounter retryCounter; public CreateTableProcedure() { // Required by the Procedure framework to create the procedure on replay @@ -80,7 +85,7 @@ public class CreateTableProcedure extends AbstractStateMachineTableProcedure { @@ -61,6 +65,7 @@ public class DeleteTableProcedure extends AbstractStateMachineTableProcedure regions; private TableName tableName; + private RetryCounter retryCounter; public DeleteTableProcedure() { // Required by the Procedure framework to create the procedure on replay @@ -79,7 +84,7 @@ public class DeleteTableProcedure extends AbstractStateMachineTableProcedurehttp://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hbase.coprocessor; + +import java.io.IOException; +import java.util.Optional; +import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.client.RegionInfo; +import org.apache.hadoop.hbase.client.TableDescriptor; + +/** + * A bad Master Observer to prevent user to create/delete table once. + */ +public class BadMasterObserverForCreateDeleteTable implements MasterObserver, MasterCoprocessor { + private boolean createFailedOnce = false; + private boolean deleteFailedOnce = false; + + @Override + public void postCompletedCreateTableAction(ObserverContext ctx, +TableDescriptor desc, RegionInfo[] regions) throws IOException { +if (!createFailedOnce && !desc.getTableName().isSystemTable()) { + createFailedOnce = true; + throw new IOException("execute postCompletedCreateTableAction failed once."); +} + } + + @Override + public void postCompletedDeleteTableAction(ObserverContext ctx, +TableName tableName) throws
(hbase) 02/02: HBASE-28150 CreateTableProcedure and DeleteTableProcedure should sleep a while before retrying (#5502)
This is an automated email from the ASF dual-hosted git repository. zhangduo pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/hbase.git commit 5a404c49504edfef250b248228093823942c5e1b Author: chaijunjie0101 <64140218+chaijunjie0...@users.noreply.github.com> AuthorDate: Sun Apr 21 19:39:32 2024 +0800 HBASE-28150 CreateTableProcedure and DeleteTableProcedure should sleep a while before retrying (#5502) Signed-off-by: Duo Zhang --- .../master/procedure/CreateTableProcedure.java | 24 +- .../master/procedure/DeleteTableProcedure.java | 24 +- .../BadMasterObserverForCreateDeleteTable.java | 55 ++ .../TestCreateDeleteTableProcedureWithRetry.java | 88 ++ .../master/procedure/TestCreateTableProcedure.java | 4 +- 5 files changed, 190 insertions(+), 5 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java index 17998fec7bd..23ad3b42aef 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java @@ -35,12 +35,15 @@ import org.apache.hadoop.hbase.fs.ErasureCodingUtils; import org.apache.hadoop.hbase.master.MasterCoprocessorHost; import org.apache.hadoop.hbase.master.MasterFileSystem; import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer; +import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException; +import org.apache.hadoop.hbase.procedure2.ProcedureUtil; import org.apache.hadoop.hbase.regionserver.storefiletracker.StoreFileTrackerFactory; import org.apache.hadoop.hbase.regionserver.storefiletracker.StoreFileTrackerValidationUtils; import org.apache.hadoop.hbase.rsgroup.RSGroupInfo; import org.apache.hadoop.hbase.util.CommonFSUtils; import org.apache.hadoop.hbase.util.FSTableDescriptors; import org.apache.hadoop.hbase.util.ModifyRegionUtils; +import org.apache.hadoop.hbase.util.RetryCounter; import org.apache.yetus.audience.InterfaceAudience; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -51,6 +54,7 @@ import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState; +import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos; @InterfaceAudience.Private public class CreateTableProcedure extends AbstractStateMachineTableProcedure { @@ -60,6 +64,7 @@ public class CreateTableProcedure extends AbstractStateMachineTableProcedure newRegions; + private RetryCounter retryCounter; public CreateTableProcedure() { // Required by the Procedure framework to create the procedure on replay @@ -80,7 +85,7 @@ public class CreateTableProcedure extends AbstractStateMachineTableProcedure { @@ -61,6 +65,7 @@ public class DeleteTableProcedure extends AbstractStateMachineTableProcedure regions; private TableName tableName; + private RetryCounter retryCounter; public DeleteTableProcedure() { // Required by the Procedure framework to create the procedure on replay @@ -79,7 +84,7 @@ public class DeleteTableProcedure extends AbstractStateMachineTableProcedurehttp://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hbase.coprocessor; + +import java.io.IOException; +import java.util.Optional; +import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.client.RegionInfo; +import org.apache.hadoop.hbase.client.TableDescriptor; + +/** + * A bad Master Observer to prevent user to create/delete table once. + */ +public class BadMasterObserverForCreateDeleteTable implements MasterObserver, MasterCoprocessor { + private boolean createFailedOnce = false; + private boolean deleteFailedOnce = false; + + @Override + public void postCompletedCreateTableAction(ObserverContext ctx, +TableDescriptor desc, RegionInfo[] regions) throws IOException { +if (!createFailedOnce && !desc.getTableName().isSystemTable()) { + createFailedOnce = true; + throw new IOException("execute postCompletedCreateTableAction failed once."); +} + } + + @Override + public void postCompletedDeleteTableAction(ObserverContext ctx, +TableName tableName) throws IOException { +if (!deleteFailedOnce && !tableName.isSystemTable()) { +