Revert "HBASE-28215 CreateTableProcedure and DeleteTableProcedure should sleep a while before retrying (#5502)"
This reverts commit aaeef2db6accaf6d5301400bbf79e28c020469db.
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 23ad3b4..17998fe 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,15 +35,12 @@
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;
@@ -54,7 +51,6 @@
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<CreateTableState> {
@@ -64,7 +60,6 @@
private TableDescriptor tableDescriptor;
private List<RegionInfo> newRegions;
- private RetryCounter retryCounter;
public CreateTableProcedure() {
// Required by the Procedure framework to create the procedure on replay
@@ -85,7 +80,7 @@
@Override
protected Flow executeFromState(final MasterProcedureEnv env, final CreateTableState state)
- throws InterruptedException, ProcedureSuspendedException {
+ throws InterruptedException {
LOG.info("{} execute state={}", this, state);
try {
switch (state) {
@@ -136,7 +131,6 @@
break;
case CREATE_TABLE_POST_OPERATION:
postCreate(env);
- retryCounter = null;
return Flow.NO_MORE_STATE;
default:
throw new UnsupportedOperationException("unhandled state=" + state);
@@ -145,27 +139,13 @@
if (isRollbackSupported(state)) {
setFailure("master-create-table", e);
} else {
- if (retryCounter == null) {
- retryCounter = ProcedureUtil.createRetryCounter(env.getMasterConfiguration());
- }
- long backoff = retryCounter.getBackoffTimeAndIncrementAttempts();
- LOG.warn("Retriable error trying to create table={},state={},suspend {}secs.",
- getTableName(), state, backoff / 1000, e);
- throw suspend(Math.toIntExact(backoff), true);
+ LOG.warn("Retriable error trying to create table=" + getTableName() + " state=" + state, e);
}
}
- retryCounter = null;
return Flow.HAS_MORE_STATE;
}
@Override
- protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {
- setState(ProcedureProtos.ProcedureState.RUNNABLE);
- env.getProcedureScheduler().addFront(this);
- return false;
- }
-
- @Override
protected void rollbackState(final MasterProcedureEnv env, final CreateTableState state)
throws IOException {
if (state == CreateTableState.CREATE_TABLE_PRE_OPERATION) {
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.java
index 8c2f106..80fb5d0 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.java
@@ -41,12 +41,9 @@
import org.apache.hadoop.hbase.mob.MobConstants;
import org.apache.hadoop.hbase.mob.MobUtils;
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.util.CommonFSUtils;
import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
import org.apache.hadoop.hbase.util.FSUtils;
-import org.apache.hadoop.hbase.util.RetryCounter;
import org.apache.yetus.audience.InterfaceAudience;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -57,7 +54,6 @@
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.DeleteTableState;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;
@InterfaceAudience.Private
public class DeleteTableProcedure extends AbstractStateMachineTableProcedure<DeleteTableState> {
@@ -65,7 +61,6 @@
private List<RegionInfo> regions;
private TableName tableName;
- private RetryCounter retryCounter;
public DeleteTableProcedure() {
// Required by the Procedure framework to create the procedure on replay
@@ -84,7 +79,7 @@
@Override
protected Flow executeFromState(final MasterProcedureEnv env, DeleteTableState state)
- throws InterruptedException, ProcedureSuspendedException {
+ throws InterruptedException {
if (LOG.isTraceEnabled()) {
LOG.trace(this + " execute state=" + state);
}
@@ -129,7 +124,6 @@
break;
case DELETE_TABLE_POST_OPERATION:
postDelete(env);
- retryCounter = null;
LOG.debug("Finished {}", this);
return Flow.NO_MORE_STATE;
default:
@@ -139,27 +133,13 @@
if (isRollbackSupported(state)) {
setFailure("master-delete-table", e);
} else {
- if (retryCounter == null) {
- retryCounter = ProcedureUtil.createRetryCounter(env.getMasterConfiguration());
- }
- long backoff = retryCounter.getBackoffTimeAndIncrementAttempts();
- LOG.warn("Retriable error trying to delete table={},state={},suspend {}secs.",
- getTableName(), state, backoff / 1000, e);
- throw suspend(Math.toIntExact(backoff), true);
+ LOG.warn("Retriable error trying to delete table=" + getTableName() + " state=" + state, e);
}
}
- retryCounter = null;
return Flow.HAS_MORE_STATE;
}
@Override
- protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {
- setState(ProcedureProtos.ProcedureState.RUNNABLE);
- env.getProcedureScheduler().addFront(this);
- return false;
- }
-
- @Override
protected boolean abort(MasterProcedureEnv env) {
// TODO: Current behavior is: with no rollback and no abort support, procedure may get stuck
// looping in retrying failing a step forever. Default behavior of abort is changed to support
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/BadMasterObserverForCreateDeleteTable.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/BadMasterObserverForCreateDeleteTable.java
deleted file mode 100644
index 454a24e..0000000
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/BadMasterObserverForCreateDeleteTable.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://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<MasterCoprocessorEnvironment> 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<MasterCoprocessorEnvironment> ctx,
- TableName tableName) throws IOException {
- if (!deleteFailedOnce && !tableName.isSystemTable()) {
- deleteFailedOnce = true;
- throw new IOException("execute postCompletedDeleteTableAction failed once.");
- }
- }
-
- @Override
- public Optional<MasterObserver> getMasterObserver() {
- return Optional.of(this);
- }
-}
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCreateDeleteTableProcedureWithRetry.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCreateDeleteTableProcedureWithRetry.java
deleted file mode 100644
index 3491aa6..0000000
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCreateDeleteTableProcedureWithRetry.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://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.master.procedure;
-
-import java.io.IOException;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hbase.HBaseClassTestRule;
-import org.apache.hadoop.hbase.HBaseTestingUtil;
-import org.apache.hadoop.hbase.TableName;
-import org.apache.hadoop.hbase.client.RegionInfo;
-import org.apache.hadoop.hbase.client.TableDescriptor;
-import org.apache.hadoop.hbase.coprocessor.BadMasterObserverForCreateDeleteTable;
-import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;
-import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;
-import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;
-import org.apache.hadoop.hbase.testclassification.MasterTests;
-import org.apache.hadoop.hbase.testclassification.MediumTests;
-import org.apache.hadoop.hbase.util.ModifyRegionUtils;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.ClassRule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-@Category({ MasterTests.class, MediumTests.class })
-public class TestCreateDeleteTableProcedureWithRetry {
- @ClassRule
- public static final HBaseClassTestRule CLASS_RULE =
- HBaseClassTestRule.forClass(TestCreateDeleteTableProcedureWithRetry.class);
-
- private static final HBaseTestingUtil UTIL = new HBaseTestingUtil();
-
- private static final TableName TABLE_NAME =
- TableName.valueOf(TestCreateDeleteTableProcedureWithRetry.class.getSimpleName());
-
- private static final String CF = "cf";
-
- @BeforeClass
- public static void setUp() throws Exception {
- Configuration conf = UTIL.getConfiguration();
- conf.set(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY,
- BadMasterObserverForCreateDeleteTable.class.getName());
- UTIL.startMiniCluster(1);
- }
-
- @AfterClass
- public static void tearDown() throws Exception {
- UTIL.shutdownMiniCluster();
- }
-
- @Test
- public void testCreateDeleteTableRetry() throws IOException {
- ProcedureExecutor<MasterProcedureEnv> procExec =
- UTIL.getMiniHBaseCluster().getMaster().getMasterProcedureExecutor();
- TableDescriptor htd = MasterProcedureTestingUtility.createHTD(TABLE_NAME, CF);
- RegionInfo[] regions = ModifyRegionUtils.createRegionInfos(htd, null);
- CreateTableProcedure createProc =
- new CreateTableProcedure(procExec.getEnvironment(), htd, regions);
- ProcedureTestingUtility.submitAndWait(procExec, createProc);
- Assert.assertTrue(UTIL.getAdmin().tableExists(TABLE_NAME));
- MasterProcedureTestingUtility.validateTableCreation(UTIL.getMiniHBaseCluster().getMaster(),
- TABLE_NAME, regions, CF);
-
- UTIL.getAdmin().disableTable(TABLE_NAME);
- DeleteTableProcedure deleteProc =
- new DeleteTableProcedure(procExec.getEnvironment(), TABLE_NAME);
- ProcedureTestingUtility.submitAndWait(procExec, deleteProc);
- Assert.assertFalse(UTIL.getAdmin().tableExists(TABLE_NAME));
- MasterProcedureTestingUtility.validateTableDeletion(UTIL.getMiniHBaseCluster().getMaster(),
- TABLE_NAME);
- }
-}
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.java
index 0bb54cc..bed41f4 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.java
@@ -39,7 +39,6 @@
import org.apache.hadoop.hbase.master.MasterFileSystem;
import org.apache.hadoop.hbase.procedure2.Procedure;
import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;
-import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;
import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;
import org.apache.hadoop.hbase.regionserver.storefiletracker.StoreFileTrackerFactory;
import org.apache.hadoop.hbase.regionserver.storefiletracker.StoreFileTrackerForTest;
@@ -245,8 +244,7 @@
@Override
protected Flow executeFromState(MasterProcedureEnv env,
- MasterProcedureProtos.CreateTableState state)
- throws InterruptedException, ProcedureSuspendedException {
+ MasterProcedureProtos.CreateTableState state) throws InterruptedException {
if (
!failOnce && state == MasterProcedureProtos.CreateTableState.CREATE_TABLE_WRITE_FS_LAYOUT