diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/ha/OMFailoverProxyProviderBase.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/ha/OMFailoverProxyProviderBase.java index 3b07921d379..cd72ff7b308 100644 --- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/ha/OMFailoverProxyProviderBase.java +++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/ha/OMFailoverProxyProviderBase.java @@ -39,7 +39,6 @@ import org.apache.hadoop.net.NetUtils; import org.apache.hadoop.ozone.OmUtils; import org.apache.hadoop.ozone.OzoneConfigKeys; -import org.apache.hadoop.ozone.om.exceptions.OMException; import org.apache.hadoop.ozone.om.exceptions.OMLeaderNotReadyException; import org.apache.hadoop.ozone.om.exceptions.OMNotLeaderException; import org.apache.hadoop.security.AccessControlException; @@ -47,7 +46,6 @@ import org.apache.hadoop.security.token.SecretManager; import org.apache.ratis.protocol.exceptions.ReadException; import org.apache.ratis.protocol.exceptions.ReadIndexException; -import org.apache.ratis.protocol.exceptions.StateMachineException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -159,16 +157,6 @@ protected synchronized boolean shouldFailover(Exception ex) { } } else if (HddsUtils.shouldNotFailoverOnRpcException(unwrappedException)) { return false; - } else if (ex instanceof StateMachineException) { - StateMachineException smEx = (StateMachineException) ex; - Throwable cause = smEx.getCause(); - if (cause instanceof OMException) { - OMException omEx = (OMException) cause; - // Do not failover if the operation was blocked because the OM was - // prepared. - return omEx.getResult() != - OMException.ResultCodes.NOT_SUPPORTED_OPERATION_WHEN_PREPARED; - } } return true; } diff --git a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/ha/TestOMFailoverProxyProvider.java b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/ha/TestOMFailoverProxyProvider.java index 4fdb3e1cb1d..54b4237c164 100644 --- a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/ha/TestOMFailoverProxyProvider.java +++ b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/ha/TestOMFailoverProxyProvider.java @@ -38,8 +38,10 @@ import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.io.Text; import org.apache.hadoop.ozone.ha.ConfUtils; +import org.apache.hadoop.ozone.om.exceptions.OMException; import org.apache.hadoop.ozone.om.protocolPB.OzoneManagerProtocolPB; import org.apache.hadoop.security.UserGroupInformation; +import org.apache.ratis.protocol.exceptions.StateMachineException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -254,4 +256,16 @@ public void testCanonicalTokenServiceName() throws IOException { } } + /** + * If OM is in prepare mode it should still retry. + */ + @Test + public void testShouldFailoverOnPreparedStateMachineException() { + OMException omEx = new OMException("prepared", + OMException.ResultCodes.NOT_SUPPORTED_OPERATION_WHEN_PREPARED); + StateMachineException smEx = new StateMachineException("sme", omEx); + + assertTrue(provider.shouldFailover(smEx)); + } + }