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

sumitagrawal 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 a2f5faaf67 HDDS-9544. Incorrect pipeline ID and state for closed 
container. (#5541)
a2f5faaf67 is described below

commit a2f5faaf67b8932a97842a155facd97f8b275f2e
Author: Aryan Gupta <[email protected]>
AuthorDate: Tue Nov 21 15:58:24 2023 +0530

    HDDS-9544. Incorrect pipeline ID and state for closed container. (#5541)
---
 .../hdds/scm/cli/container/InfoSubcommand.java     | 40 +++++++++++++++++++---
 .../hdds/scm/cli/container/TestInfoSubCommand.java |  6 ++++
 2 files changed, 42 insertions(+), 4 deletions(-)

diff --git 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/container/InfoSubcommand.java
 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/container/InfoSubcommand.java
index f045ec63bc..9524ce9471 100644
--- 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/container/InfoSubcommand.java
+++ 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/container/InfoSubcommand.java
@@ -39,8 +39,10 @@ import org.apache.hadoop.hdds.scm.container.common.helpers
     .ContainerWithPipeline;
 
 import com.google.common.base.Preconditions;
+import org.apache.hadoop.hdds.scm.ha.SCMHAUtils;
 import org.apache.hadoop.hdds.scm.pipeline.Pipeline;
 import org.apache.hadoop.hdds.scm.pipeline.PipelineID;
+import org.apache.hadoop.hdds.scm.pipeline.PipelineNotFoundException;
 import org.apache.hadoop.hdds.server.JsonUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -90,12 +92,14 @@ public class InfoSubcommand extends ScmSubcommand {
       if (container.getPipeline().size() != 0) {
         ContainerWithPipelineAndReplicas wrapper =
             new ContainerWithPipelineAndReplicas(container.getContainerInfo(),
-                container.getPipeline(), replicas);
+                container.getPipeline(), replicas,
+                container.getContainerInfo().getPipelineID());
         LOG.info(JsonUtils.toJsonStringWithDefaultPrettyPrinter(wrapper));
       } else {
         ContainerWithoutDatanodes wrapper =
             new ContainerWithoutDatanodes(container.getContainerInfo(),
-                container.getPipeline(), replicas);
+                container.getPipeline(), replicas,
+                container.getContainerInfo().getPipelineID());
         LOG.info(JsonUtils.toJsonStringWithDefaultPrettyPrinter(wrapper));
       }
     } else {
@@ -109,6 +113,21 @@ public class InfoSubcommand extends ScmSubcommand {
       } else {
         LOG.info("Pipeline id: {}", container.getPipeline().getId().getId());
       }
+      LOG.info("Write PipelineId: {}",
+          container.getContainerInfo().getPipelineID().getId());
+      try {
+        String pipelineState = scmClient.getPipeline(
+                container.getContainerInfo().getPipelineID().getProtobuf())
+            .getPipelineState().toString();
+        LOG.info("Write Pipeline State: {}", pipelineState);
+      } catch (IOException ioe) {
+        if (SCMHAUtils.unwrapException(
+            ioe) instanceof PipelineNotFoundException) {
+          LOG.info("Write Pipeline State: CLOSED");
+        } else {
+          LOG.error("Failed to retrieve pipeline info");
+        }
+      }
       LOG.info("Container State: {}", container.getContainerInfo().getState());
 
       // Print pipeline of an existing container.
@@ -149,12 +168,14 @@ public class InfoSubcommand extends ScmSubcommand {
     private ContainerInfo containerInfo;
     private Pipeline pipeline;
     private List<ContainerReplicaInfo> replicas;
+    private PipelineID writePipelineID;
 
     ContainerWithPipelineAndReplicas(ContainerInfo container, Pipeline 
pipeline,
-                                     List<ContainerReplicaInfo> replicas) {
+        List<ContainerReplicaInfo> replicas, PipelineID pipelineID) {
       this.containerInfo = container;
       this.pipeline = pipeline;
       this.replicas = replicas;
+      this.writePipelineID = pipelineID;
     }
 
     public ContainerInfo getContainerInfo() {
@@ -168,6 +189,11 @@ public class InfoSubcommand extends ScmSubcommand {
     public List<ContainerReplicaInfo> getReplicas() {
       return replicas;
     }
+
+    public PipelineID getWritePipelineID() {
+      return writePipelineID;
+    }
+
   }
 
   private static class ContainerWithoutDatanodes {
@@ -175,12 +201,14 @@ public class InfoSubcommand extends ScmSubcommand {
     private ContainerInfo containerInfo;
     private PipelineWithoutDatanodes pipeline;
     private List<ContainerReplicaInfo> replicas;
+    private PipelineID writePipelineId;
 
     ContainerWithoutDatanodes(ContainerInfo container, Pipeline pipeline,
-                                     List<ContainerReplicaInfo> replicas) {
+        List<ContainerReplicaInfo> replicas, PipelineID pipelineID) {
       this.containerInfo = container;
       this.pipeline = new PipelineWithoutDatanodes(pipeline);
       this.replicas = replicas;
+      this.writePipelineId = pipelineID;
     }
 
     public ContainerInfo getContainerInfo() {
@@ -194,6 +222,10 @@ public class InfoSubcommand extends ScmSubcommand {
     public List<ContainerReplicaInfo> getReplicas() {
       return replicas;
     }
+
+    public PipelineID getWritePipelineId() {
+      return writePipelineId;
+    }
   }
 
   // All Pipeline information except the ones dependent on datanodes
diff --git 
a/hadoop-hdds/tools/src/test/java/org/apache/hadoop/hdds/scm/cli/container/TestInfoSubCommand.java
 
b/hadoop-hdds/tools/src/test/java/org/apache/hadoop/hdds/scm/cli/container/TestInfoSubCommand.java
index 128708c44a..6058546c97 100644
--- 
a/hadoop-hdds/tools/src/test/java/org/apache/hadoop/hdds/scm/cli/container/TestInfoSubCommand.java
+++ 
b/hadoop-hdds/tools/src/test/java/org/apache/hadoop/hdds/scm/cli/container/TestInfoSubCommand.java
@@ -27,6 +27,7 @@ import 
org.apache.hadoop.hdds.scm.container.ContainerReplicaInfo;
 import 
org.apache.hadoop.hdds.scm.container.common.helpers.ContainerWithPipeline;
 import org.apache.hadoop.hdds.scm.pipeline.Pipeline;
 import org.apache.hadoop.hdds.scm.pipeline.PipelineID;
+import org.apache.hadoop.hdds.scm.pipeline.PipelineNotFoundException;
 import org.apache.log4j.AppenderSkeleton;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
@@ -49,6 +50,7 @@ import java.util.stream.Collectors;
 import static 
org.apache.hadoop.hdds.protocol.proto.HddsProtos.LifeCycleState.CLOSED;
 import static 
org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationFactor.THREE;
 import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 
 /**
@@ -95,6 +97,8 @@ public class TestInfoSubCommand {
       throws IOException {
     Mockito.when(scmClient.getContainerReplicas(anyLong()))
         .thenReturn(getReplicas(includeIndex));
+    Mockito.when(scmClient.getPipeline(any()))
+        .thenThrow(new PipelineNotFoundException("Pipeline not found."));
     cmd = new InfoSubcommand();
     CommandLine c = new CommandLine(cmd);
     c.parseArgs("1");
@@ -135,6 +139,8 @@ public class TestInfoSubCommand {
   public void testReplicasNotOutputIfError() throws IOException {
     Mockito.when(scmClient.getContainerReplicas(anyLong()))
         .thenThrow(new IOException("Error getting Replicas"));
+    Mockito.when(scmClient.getPipeline(any()))
+        .thenThrow(new PipelineNotFoundException("Pipeline not found."));
     cmd = new InfoSubcommand();
     CommandLine c = new CommandLine(cmd);
     c.parseArgs("1");


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

Reply via email to