This is an automated email from the ASF dual-hosted git repository.

umamahesh 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 110dca5ec7 HDDS-6812. Fix INTERNAL_ERROR message on failed write. 
(#3529)
110dca5ec7 is described below

commit 110dca5ec74722109cf1bb890db0ba15b5557cb3
Author: Aswin Shakil Balasubramanian <[email protected]>
AuthorDate: Thu Jun 23 15:31:57 2022 -0700

    HDDS-6812. Fix INTERNAL_ERROR message on failed write. (#3529)
---
 .../SCMContainerPlacementRackScatter.java          |  3 +-
 .../scm/pipeline/WritableECContainerProvider.java  |  2 +-
 ...lockLocationProtocolServerSideTranslatorPB.java |  2 +-
 .../pipeline/TestWritableECContainerProvider.java  | 32 +++++++++++++++-------
 4 files changed, 26 insertions(+), 13 deletions(-)

diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/algorithms/SCMContainerPlacementRackScatter.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/algorithms/SCMContainerPlacementRackScatter.java
index 8db7ed5434..235bcd5965 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/algorithms/SCMContainerPlacementRackScatter.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/algorithms/SCMContainerPlacementRackScatter.java
@@ -116,7 +116,8 @@ public final class SCMContainerPlacementRackScatter
           "TotalNode = " + totalNodesCount +
           " AvailableNode = " + availableNodes.size() +
           " RequiredNode = " + nodesRequired +
-          " ExcludedNode = " + excludedNodesCount, null);
+          " ExcludedNode = " + excludedNodesCount,
+          SCMException.ResultCodes.FAILED_TO_FIND_SUITABLE_NODE);
     }
 
     List<DatanodeDetails> mutableFavoredNodes = new ArrayList<>();
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableECContainerProvider.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableECContainerProvider.java
index 117d957753..7e8e3d1e11 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableECContainerProvider.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableECContainerProvider.java
@@ -157,7 +157,7 @@ public class WritableECContainerProvider
     } catch (IOException e) {
       LOG.error("Unable to allocate a container for {} after trying all "
           + "existing containers", repConfig, e);
-      return null;
+      throw e;
     }
   }
 
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/ScmBlockLocationProtocolServerSideTranslatorPB.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/ScmBlockLocationProtocolServerSideTranslatorPB.java
index bdf248bea5..4ed5233840 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/ScmBlockLocationProtocolServerSideTranslatorPB.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/ScmBlockLocationProtocolServerSideTranslatorPB.java
@@ -178,7 +178,7 @@ public final class 
ScmBlockLocationProtocolServerSideTranslatorPB
   }
 
   private Status exceptionToResponseStatus(IOException ex) {
-    if (ex instanceof SCMException) {
+    if (ex instanceof SCMException && ((SCMException) ex).getResult() != null) 
{
       return Status.values()[((SCMException) ex).getResult().ordinal()];
     } else {
       return Status.INTERNAL_ERROR;
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestWritableECContainerProvider.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestWritableECContainerProvider.java
index e1065e8b52..9c0ddc180f 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestWritableECContainerProvider.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestWritableECContainerProvider.java
@@ -40,6 +40,7 @@ import 
org.apache.hadoop.hdds.scm.pipeline.choose.algorithms.HealthyPipelineChoo
 import org.apache.hadoop.hdds.utils.db.DBStore;
 import org.apache.hadoop.hdds.utils.db.DBStoreBuilder;
 import org.apache.ozone.test.GenericTestUtils;
+import org.junit.Assert;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.Matchers;
@@ -66,7 +67,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.verify;
 
@@ -221,7 +221,8 @@ public class TestWritableECContainerProvider {
   }
 
   @Test
-  public void testUnableToCreateAnyPipelinesReturnsNull() throws IOException {
+  public void testUnableToCreateAnyPipelinesThrowsException()
+      throws IOException {
     pipelineManager = new MockPipelineManager(
         dbStore, scmhaManager, nodeManager) {
       @Override
@@ -234,9 +235,12 @@ public class TestWritableECContainerProvider {
     provider = new WritableECContainerProvider(
         conf, pipelineManager, containerManager, pipelineChoosingPolicy);
 
-    ContainerInfo container =
-        provider.getContainer(1, repConfig, OWNER, new ExcludeList());
-    assertNull(container);
+    try {
+      provider.getContainer(1, repConfig, OWNER, new ExcludeList());
+      Assert.fail();
+    } catch (IOException ex) {
+      GenericTestUtils.assertExceptionContains("Cannot create pipelines", ex);
+    }
   }
 
   @Test
@@ -261,12 +265,20 @@ public class TestWritableECContainerProvider {
     provider = new WritableECContainerProvider(
         conf, pipelineManager, containerManager, pipelineChoosingPolicy);
 
-    ContainerInfo container =
-        provider.getContainer(1, repConfig, OWNER, new ExcludeList());
+    try {
+      provider.getContainer(1, repConfig, OWNER, new ExcludeList());
+      Assert.fail();
+    } catch (IOException ex) {
+      GenericTestUtils.assertExceptionContains("Cannot create pipelines", ex);
+    }
+
     for (int i = 0; i < 5; i++) {
-      ContainerInfo nextContainer =
-          provider.getContainer(1, repConfig, OWNER, new ExcludeList());
-      assertEquals(container, nextContainer);
+      try {
+        provider.getContainer(1, repConfig, OWNER, new ExcludeList());
+        Assert.fail();
+      } catch (IOException ex) {
+        GenericTestUtils.assertExceptionContains("Cannot create pipelines", 
ex);
+      }
     }
   }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to