This is an automated email from the ASF dual-hosted git repository.
jacksonyao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 22cdd95a9e HDDS-6141. terminate om if statemachine is shut down by
ratis (#2953)
22cdd95a9e is described below
commit 22cdd95a9e89b9a9dc9c52ab32c458b5b9251e3c
Author: Jackson Yao <[email protected]>
AuthorDate: Thu Apr 14 15:54:33 2022 +0800
HDDS-6141. terminate om if statemachine is shut down by ratis (#2953)
---
.../apache/hadoop/hdds/scm/ha/SCMHAManager.java | 2 +-
.../hadoop/hdds/scm/ha/SCMHAManagerImpl.java | 3 +--
.../hadoop/hdds/scm/ha/SCMHAManagerStub.java | 18 +++++++-------
.../apache/hadoop/hdds/scm/ha/SCMRatisServer.java | 2 ++
.../hadoop/hdds/scm/ha/SCMRatisServerImpl.java | 10 ++++++++
.../apache/hadoop/hdds/scm/ha/SCMStateMachine.java | 15 ++++++++----
.../scm/pipeline/BackgroundPipelineCreator.java | 6 +----
.../scm/server/OzoneStorageContainerManager.java | 2 ++
.../hdds/scm/server/StorageContainerManager.java | 9 ++++++-
.../hdds/scm/ha/TestReplicationAnnotation.java | 5 ++++
.../TestSCMHAUnfinalizedStateValidationAction.java | 8 +++++++
.../apache/hadoop/ozone/TestDelegationToken.java | 8 +++++++
.../apache/hadoop/ozone/om/TestKeyManagerImpl.java | 3 +++
.../ozone/scm/TestStorageContainerManagerHA.java | 2 +-
.../org/apache/hadoop/ozone/om/OzoneManager.java | 28 ++++++++++------------
.../ozone/om/ratis/OzoneManagerRatisServer.java | 2 +-
.../ozone/om/ratis/OzoneManagerStateMachine.java | 8 ++++---
.../hadoop/ozone/om/TestKeyDeletingService.java | 7 ++++++
.../apache/hadoop/ozone/om/TestKeyManagerUnit.java | 9 ++++++-
.../apache/hadoop/ozone/om/TestTrashService.java | 2 ++
.../om/ratis/TestOzoneManagerRatisServer.java | 7 ++++++
.../scm/ReconStorageContainerManagerFacade.java | 7 ++++++
22 files changed, 121 insertions(+), 42 deletions(-)
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManager.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManager.java
index 541ceaaeca..bc4748e3fe 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManager.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManager.java
@@ -59,7 +59,7 @@ public interface SCMHAManager {
/**
* Stops the HA service.
*/
- void shutdown() throws IOException;
+ void stop() throws IOException;
/**
* Adds the SC M instance to the SCM HA group.
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManagerImpl.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManagerImpl.java
index a69f2cbbb4..0fcc1ec93f 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManagerImpl.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManagerImpl.java
@@ -334,10 +334,9 @@ public class SCMHAManagerImpl implements SCMHAManager {
* {@inheritDoc}
*/
@Override
- public void shutdown() throws IOException {
+ public void stop() throws IOException {
if (ratisServer != null) {
ratisServer.stop();
- ratisServer.getSCMStateMachine().close();
grpcServer.stop();
}
}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManagerStub.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManagerStub.java
index 65f3da3a32..6dbbea32cf 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManagerStub.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManagerStub.java
@@ -78,6 +78,11 @@ public final class SCMHAManagerStub implements SCMHAManager {
ratisServer.start();
}
+ @Override
+ public void stop() throws IOException {
+ ratisServer.stop();
+ }
+
/**
* Informs RatisServerStub to behaviour as a leader SCM or a follower SCM.
*/
@@ -112,14 +117,6 @@ public final class SCMHAManagerStub implements
SCMHAManager {
return null;
}
- /**
- * {@inheritDoc}
- */
- @Override
- public void shutdown() throws IOException {
- ratisServer.stop();
- }
-
@Override
public boolean addSCM(AddSCMRequest request) throws IOException {
return false;
@@ -216,6 +213,11 @@ public final class SCMHAManagerStub implements
SCMHAManager {
public void stop() {
}
+ @Override
+ public boolean isStopped() {
+ return false;
+ }
+
@Override
public RaftServer.Division getDivision() {
return null;
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServer.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServer.java
index e23c984685..7a97697428 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServer.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServer.java
@@ -43,6 +43,8 @@ public interface SCMRatisServer {
void stop() throws IOException;
+ boolean isStopped();
+
RaftServer.Division getDivision();
/**
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServerImpl.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServerImpl.java
index 3a68ad1a0b..f8193fa21b 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServerImpl.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServerImpl.java
@@ -76,6 +76,7 @@ public class SCMRatisServerImpl implements SCMRatisServer {
private final AtomicLong callId = new AtomicLong();
private final RaftServer.Division division;
private final GrpcTlsConfig grpcTlsConfig;
+ private boolean isStopped;
// TODO: Refactor and remove ConfigurationSource and use only
// SCMHAConfiguration.
@@ -108,6 +109,7 @@ public class SCMRatisServerImpl implements SCMRatisServer {
(SCMStateMachine) server.getDivision(groupId).getStateMachine();
this.division = server.getDivision(groupId);
+ this.isStopped = false;
}
public static void initialize(String clusterId, String scmId,
@@ -235,8 +237,16 @@ public class SCMRatisServerImpl implements SCMRatisServer {
public void stop() throws IOException {
LOG.info("stopping ratis server {}", server.getPeer().getAddress());
server.close();
+ isStopped = true;
+ getSCMStateMachine().close();
}
+ @Override
+ public boolean isStopped() {
+ return isStopped;
+ }
+
+
@Override
public List<String> getRatisRoles() throws IOException {
Collection<RaftPeer> peers = division.getGroup().getPeers();
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMStateMachine.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMStateMachine.java
index 9aeda10225..74074bc454 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMStateMachine.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMStateMachine.java
@@ -390,10 +390,17 @@ public class SCMStateMachine extends BaseStateMachine {
if (!isInitialized) {
return;
}
- super.close();
- transactionBuffer.close();
- HadoopExecutors.
- shutdown(installSnapshotExecutor, LOG, 5, TimeUnit.SECONDS);
+ //if ratis server is stopped , it indicates this `close` originates
+ // from `scm.stop()`, otherwise, it indicates this `close` originates
+ // from ratis.
+ if (scm.getScmHAManager().getRatisServer().isStopped()) {
+ super.close();
+ transactionBuffer.close();
+ HadoopExecutors.
+ shutdown(installSnapshotExecutor, LOG, 5, TimeUnit.SECONDS);
+ } else {
+ scm.shutDown("scm statemachine is closed by ratis, terminate SCM");
+ }
}
@VisibleForTesting
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/BackgroundPipelineCreator.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/BackgroundPipelineCreator.java
index 86a4061bfe..75abd53f32 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/BackgroundPipelineCreator.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/BackgroundPipelineCreator.java
@@ -32,7 +32,6 @@ import org.apache.hadoop.hdds.scm.ha.SCMService;
import org.apache.hadoop.hdds.scm.ha.SCMServiceManager;
import org.apache.hadoop.ozone.OzoneConfigKeys;
import org.apache.hadoop.util.Time;
-import org.apache.ratis.util.ExitUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -133,12 +132,9 @@ public class BackgroundPipelineCreator implements
SCMService {
.setDaemon(false)
.setNameFormat(THREAD_NAME + " - %d")
.setUncaughtExceptionHandler((Thread t, Throwable ex) -> {
- // gracefully shutdown SCM.
- scmContext.getScm().stop();
-
String message = "Terminate SCM, encounter uncaught exception"
+ " in RatisPipelineUtilsThread";
- ExitUtils.terminate(1, message, ex, LOG);
+ scmContext.getScm().shutDown(message);
})
.build()
.newThread(this::run);
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/OzoneStorageContainerManager.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/OzoneStorageContainerManager.java
index 3784f97322..fca789d56c 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/OzoneStorageContainerManager.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/OzoneStorageContainerManager.java
@@ -41,6 +41,8 @@ public interface OzoneStorageContainerManager {
void join();
+ void shutDown(String message);
+
NodeManager getScmNodeManager();
BlockManager getScmBlockManager();
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
index e869754829..395b77c216 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
@@ -141,6 +141,7 @@ import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.UserGroupInformation.AuthenticationMethod;
import
org.apache.hadoop.security.authentication.client.AuthenticationException;
import org.apache.hadoop.util.JvmPauseMonitor;
+import org.apache.ratis.util.ExitUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -1511,7 +1512,7 @@ public final class StorageContainerManager extends
ServiceRuntimeInfoImpl
try {
LOG.info("Stopping SCM HA services.");
- scmHAManager.shutdown();
+ scmHAManager.stop();
} catch (Exception ex) {
LOG.error("SCM HA Manager stop failed", ex);
}
@@ -1533,6 +1534,12 @@ public final class StorageContainerManager extends
ServiceRuntimeInfoImpl
scmSafeModeManager.stop();
}
+ @Override
+ public void shutDown(String message) {
+ stop();
+ ExitUtils.terminate(1, message, LOG);
+ }
+
/**
* Wait until service has completed shutdown.
*/
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestReplicationAnnotation.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestReplicationAnnotation.java
index c64615f4b3..5326f1543b 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestReplicationAnnotation.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestReplicationAnnotation.java
@@ -66,6 +66,11 @@ public class TestReplicationAnnotation {
public void stop() throws IOException {
}
+ @Override
+ public boolean isStopped() {
+ return false;
+ }
+
@Override
public RaftServer.Division getDivision() {
return null;
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/upgrade/TestSCMHAUnfinalizedStateValidationAction.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/upgrade/TestSCMHAUnfinalizedStateValidationAction.java
index 17c6dee1f4..c92820ea43 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/upgrade/TestSCMHAUnfinalizedStateValidationAction.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/upgrade/TestSCMHAUnfinalizedStateValidationAction.java
@@ -27,7 +27,9 @@ import org.apache.hadoop.ozone.OzoneConfigKeys;
import org.apache.hadoop.ozone.upgrade.UpgradeException;
import org.apache.hadoop.ozone.upgrade.UpgradeFinalizer;
import org.apache.ozone.test.LambdaTestUtils;
+import org.apache.ratis.util.ExitUtils;
import org.junit.Assert;
+import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -63,6 +65,12 @@ public class TestSCMHAUnfinalizedStateValidationAction {
private final String dataPath;
private static final String CLUSTER_ID = UUID.randomUUID().toString();
+ @BeforeClass
+ public static void setup() {
+ ExitUtils.disableSystemExit();
+ }
+
+
@Parameterized.Parameters(name = "haEnabledBefore={0} " +
"haEnabledPreFinalized={1}")
public static Collection<Object[]> cases() {
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestDelegationToken.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestDelegationToken.java
index b1b619695c..dc6e237591 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestDelegationToken.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestDelegationToken.java
@@ -80,12 +80,15 @@ import static
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.INVA
import static
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.TOKEN_ERROR_OTHER;
import static
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.VOLUME_NOT_FOUND;
import static
org.apache.hadoop.security.UserGroupInformation.AuthenticationMethod.KERBEROS;
+
+import org.apache.ratis.util.ExitUtils;
import org.junit.After;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -129,6 +132,11 @@ public final class TestDelegationToken {
private String omId;
private OzoneManagerProtocolClientSideTranslatorPB omClient;
+ @BeforeClass
+ public static void setup() {
+ ExitUtils.disableSystemExit();
+ }
+
@Before
public void init() {
try {
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestKeyManagerImpl.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestKeyManagerImpl.java
index 2a3d5cc73b..3eeb3e93dd 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestKeyManagerImpl.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestKeyManagerImpl.java
@@ -113,6 +113,8 @@ import static
org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_SCM_BLOCK_SIZE_DEFAU
import static org.apache.hadoop.ozone.OzoneConsts.OZONE_URI_DELIMITER;
import static
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.SCM_GET_PIPELINE_EXCEPTION;
import static
org.apache.hadoop.ozone.security.acl.IAccessAuthorizer.ACLType.ALL;
+
+import org.apache.ratis.util.ExitUtils;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
@@ -168,6 +170,7 @@ public class TestKeyManagerImpl {
@BeforeClass
public static void setUp() throws Exception {
+ ExitUtils.disableSystemExit();
conf = new OzoneConfiguration();
dir = GenericTestUtils.getRandomizedTestDir();
conf.set(HddsConfigKeys.OZONE_METADATA_DIRS, dir.toString());
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/scm/TestStorageContainerManagerHA.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/scm/TestStorageContainerManagerHA.java
index 01c5f5a9a8..fb5b437334 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/scm/TestStorageContainerManagerHA.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/scm/TestStorageContainerManagerHA.java
@@ -226,7 +226,7 @@ public class TestStorageContainerManagerHA {
conf2.set(ScmConfigKeys.OZONE_SCM_PRIMORDIAL_NODE_ID_KEY,
scm1.getSCMNodeId());
Assert.assertTrue(StorageContainerManager.scmBootstrap(conf1));
- scm1.getScmHAManager().shutdown();
+ scm1.getScmHAManager().stop();
Assert.assertTrue(
StorageContainerManager.scmInit(conf1, scm1.getClusterId()));
Assert.assertTrue(StorageContainerManager.scmBootstrap(conf2));
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
index 58cccde6c5..1a0e7d461c 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
@@ -251,6 +251,7 @@ import static
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.
import org.apache.ratis.proto.RaftProtos.RaftPeerRole;
import org.apache.ratis.protocol.RaftGroupId;
import org.apache.ratis.server.protocol.TermIndex;
+import org.apache.ratis.util.ExitUtils;
import org.apache.ratis.util.FileUtils;
import org.apache.ratis.util.LifeCycle;
import org.bouncycastle.pkcs.PKCS10CertificationRequest;
@@ -560,6 +561,10 @@ public final class OzoneManager extends
ServiceRuntimeInfoImpl
}
}
+ public boolean isStopped() {
+ return omState == State.STOPPED;
+ }
+
/**
* Set the {@link S3Authentication} for the current rpc handler thread.
*/
@@ -779,20 +784,6 @@ public final class OzoneManager extends
ServiceRuntimeInfoImpl
stop();
}
- public void shutdown(Exception ex) throws IOException {
- if (omState != State.STOPPED) {
- stop();
- exitManager.exitSystem(1, ex.getLocalizedMessage(), ex, LOG);
- }
- }
-
- public void shutdown(String errorMsg) throws IOException {
- if (omState != State.STOPPED) {
- stop();
- exitManager.exitSystem(1, errorMsg, LOG);
- }
- }
-
/**
* Class which schedule saving metrics to a file.
*/
@@ -1891,6 +1882,9 @@ public final class OzoneManager extends
ServiceRuntimeInfoImpl
*/
public void stop() {
LOG.info("{}: Stopping Ozone Manager", omNodeDetails.getOMPrintInfo());
+ if (isStopped()) {
+ return;
+ }
try {
omState = State.STOPPED;
// Cancel the metrics timer and set to null.
@@ -1926,12 +1920,16 @@ public final class OzoneManager extends
ServiceRuntimeInfoImpl
if (omSnapshotProvider != null) {
omSnapshotProvider.stop();
}
- omState = State.STOPPED;
} catch (Exception e) {
LOG.error("OzoneManager stop failed.", e);
}
}
+ public void shutDown(String message) {
+ stop();
+ ExitUtils.terminate(1, message, LOG);
+ }
+
/**
* Wait until service has completed shutdown.
*/
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerRatisServer.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerRatisServer.java
index 5305ce3a23..761c8e120a 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerRatisServer.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerRatisServer.java
@@ -559,7 +559,7 @@ public final class OzoneManagerRatisServer {
public void stop() {
try {
server.close();
- omStateMachine.stop();
+ omStateMachine.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerStateMachine.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerStateMachine.java
index e45c52c257..28b7651d70 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerStateMachine.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerStateMachine.java
@@ -53,7 +53,6 @@ import org.apache.ratis.protocol.Message;
import org.apache.ratis.protocol.RaftClientRequest;
import org.apache.ratis.protocol.RaftGroupId;
import org.apache.ratis.protocol.RaftPeerId;
-import org.apache.ratis.protocol.exceptions.RaftException;
import org.apache.ratis.protocol.exceptions.StateMachineException;
import org.apache.ratis.server.RaftServer;
import org.apache.ratis.server.protocol.TermIndex;
@@ -470,8 +469,11 @@ public class OzoneManagerStateMachine extends
BaseStateMachine {
// OM should be shutdown as the StateMachine has shutdown.
LOG.info("StateMachine has shutdown. Shutdown OzoneManager if not " +
"already shutdown.");
- ozoneManager.shutdown(new RaftException("RaftServer called shutdown on " +
- "StateMachine"));
+ if (!ozoneManager.isStopped()) {
+ ozoneManager.shutDown("OM state machine is shutdown by Ratis server");
+ } else {
+ stop();
+ }
}
/**
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestKeyDeletingService.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestKeyDeletingService.java
index 02718a6207..4089a07095 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestKeyDeletingService.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestKeyDeletingService.java
@@ -27,6 +27,8 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.apache.hadoop.ozone.om.request.OMRequestTestUtils;
+import org.apache.ratis.util.ExitUtils;
+import org.junit.BeforeClass;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -72,6 +74,11 @@ public class TestKeyDeletingService {
private static final Logger LOG =
LoggerFactory.getLogger(TestKeyDeletingService.class);
+ @BeforeClass
+ public static void setup() {
+ ExitUtils.disableSystemExit();
+ }
+
private OzoneConfiguration createConfAndInitValues() throws IOException {
OzoneConfiguration conf = new OzoneConfiguration();
File newFolder = folder.newFolder();
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestKeyManagerUnit.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestKeyManagerUnit.java
index 826571ec07..748519ef2d 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestKeyManagerUnit.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestKeyManagerUnit.java
@@ -70,9 +70,11 @@ import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
import org.apache.ozone.test.GenericTestUtils;
import org.apache.hadoop.util.Time;
+import org.apache.ratis.util.ExitUtils;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mockito;
@@ -99,9 +101,14 @@ public class TestKeyManagerUnit {
private OzoneManagerProtocol writeClient;
private OzoneManager om;
+
+ @BeforeClass
+ public static void setup() {
+ ExitUtils.disableSystemExit();
+ }
@Before
- public void setup() throws Exception {
+ public void init() throws Exception {
configuration = new OzoneConfiguration();
testDir = GenericTestUtils.getRandomizedTestDir();
configuration.set(HddsConfigKeys.OZONE_METADATA_DIRS,
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestTrashService.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestTrashService.java
index c62e3cc623..2544f32be8 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestTrashService.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestTrashService.java
@@ -32,6 +32,7 @@ import org.apache.hadoop.ozone.om.helpers.OpenKeySession;
import org.apache.hadoop.ozone.om.protocol.OzoneManagerProtocol;
import org.apache.hadoop.ozone.om.request.OMRequestTestUtils;
import
org.apache.hadoop.security.authentication.client.AuthenticationException;
+import org.apache.ratis.util.ExitUtils;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
@@ -66,6 +67,7 @@ public class TestTrashService {
@Before
public void setup() throws IOException, AuthenticationException {
+ ExitUtils.disableSystemExit();
OzoneConfiguration configuration = new OzoneConfiguration();
File folder = tempFolder.newFolder();
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerRatisServer.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerRatisServer.java
index 351f524c1d..ba4c55e2c7 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerRatisServer.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerRatisServer.java
@@ -46,10 +46,12 @@ import org.apache.ozone.test.GenericTestUtils;
import org.apache.ratis.protocol.RaftGroupId;
import org.apache.ratis.server.protocol.TermIndex;
import org.apache.ratis.statemachine.SnapshotInfo;
+import org.apache.ratis.util.ExitUtils;
import org.apache.ratis.util.LifeCycle;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -82,6 +84,11 @@ public class TestOzoneManagerRatisServer {
private SecurityConfig secConfig;
private OMCertificateClient certClient;
+ @BeforeClass
+ public static void setup() {
+ ExitUtils.disableSystemExit();
+ }
+
@Before
public void init() throws Exception {
conf = new OzoneConfiguration();
diff --git
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java
index c72d2e4987..c693bd2cbd 100644
---
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java
+++
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java
@@ -83,6 +83,7 @@ import static
org.apache.hadoop.hdds.recon.ReconConfigKeys.RECON_SCM_CONFIG_PREF
import static
org.apache.hadoop.hdds.scm.server.StorageContainerManager.buildRpcServerStartMessage;
import static org.apache.hadoop.ozone.OzoneConsts.OZONE_URI_DELIMITER;
+import org.apache.ratis.util.ExitUtils;
import org.hadoop.ozone.recon.schema.tables.daos.ReconTaskStatusDao;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -313,6 +314,12 @@ public class ReconStorageContainerManagerFacade
}
}
+ @Override
+ public void shutDown(String message) {
+ stop();
+ ExitUtils.terminate(1, message, LOG);
+ }
+
public ReconDatanodeProtocolServer getDatanodeProtocolServer() {
return datanodeProtocolServer;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]