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]