adoroszlai commented on code in PR #6577:
URL: https://github.com/apache/ozone/pull/6577#discussion_r1577784337


##########
hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/pipeline/FilterPipelineOptions.java:
##########
@@ -0,0 +1,65 @@
+package org.apache.hadoop.hdds.scm.cli.pipeline;
+
+import com.google.common.base.Strings;
+import org.apache.hadoop.hdds.client.RatisReplicationConfig;
+import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.ReplicationFactor;
+import org.apache.hadoop.hdds.client.ReplicationType;
+import org.apache.hadoop.hdds.conf.OzoneConfiguration;
+import org.apache.hadoop.hdds.scm.pipeline.Pipeline;
+import picocli.CommandLine;
+
+import java.util.Optional;
+import java.util.function.Predicate;
+
+public class FilterPipelineOptions {

Review Comment:
   
https://github.com/unisonteam/ozone/actions/runs/8813149705/job/24190292814#step:7:12
   
   Javadoc comment is required for public classes.



##########
hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/pipeline/ClosePipelineSubcommand.java:
##########
@@ -35,13 +40,52 @@
     mixinStandardHelpOptions = true,
     versionProvider = HddsVersionProvider.class)
 public class ClosePipelineSubcommand extends ScmSubcommand {
+  @CommandLine.ArgGroup(multiplicity = "1")
+  private CloseOptionGroup closeOption;
 
-  @CommandLine.Parameters(description = "ID of the pipeline to close")
-  private String pipelineId;
+  @CommandLine.Mixin
+  private final FilterPipelineOptions filterOptions = new 
FilterPipelineOptions();
 
   @Override
   public void execute(ScmClient scmClient) throws IOException {
-    scmClient.closePipeline(
-        HddsProtos.PipelineID.newBuilder().setId(pipelineId).build());
+    if (!Strings.isNullOrEmpty(closeOption.pipelineId)) {
+      
scmClient.closePipeline(HddsProtos.PipelineID.newBuilder().setId(closeOption.pipelineId).build());
+    }
+
+    if (closeOption.closeAll) {
+      Optional<Predicate<? super Pipeline>> replicationFilter = 
filterOptions.getReplicationFilter();
+
+      Stream<Pipeline> stream = scmClient.listPipelines()
+          .stream()
+          .filter(p -> p.getPipelineState() != Pipeline.PipelineState.CLOSED);
+      if (replicationFilter.isPresent()) {
+        stream = stream.filter(replicationFilter.get());
+      }
+
+      stream.forEach(pipeline -> {
+        try {
+          scmClient.closePipeline(
+              
HddsProtos.PipelineID.newBuilder().setId(pipeline.getId().getId().toString()).build());
+        } catch (IOException e) {
+          System.err.println("Error closing pipeline: " + pipeline.getId() + 
", cause: " + e.getMessage());
+        }
+      });
+    }
+  }
+
+  private static class CloseOptionGroup {
+    @CommandLine.Option(
+        names = {"pipelineId"},
+        arity = "1",
+        defaultValue = "",
+        description = "ID of the pipeline to close")
+    private String pipelineId;
+
+    @CommandLine.Option(
+        names = {"--all"},
+        arity = "0",

Review Comment:
   The command:
   
   ```
   $ ozone admin pipeline close --all
   ```
   
   does nothing, maybe due to `arity=0`.



##########
hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/pipeline/ClosePipelineSubcommand.java:
##########
@@ -35,13 +40,52 @@
     mixinStandardHelpOptions = true,
     versionProvider = HddsVersionProvider.class)
 public class ClosePipelineSubcommand extends ScmSubcommand {
+  @CommandLine.ArgGroup(multiplicity = "1")
+  private CloseOptionGroup closeOption;
 
-  @CommandLine.Parameters(description = "ID of the pipeline to close")
-  private String pipelineId;
+  @CommandLine.Mixin
+  private final FilterPipelineOptions filterOptions = new 
FilterPipelineOptions();
 
   @Override
   public void execute(ScmClient scmClient) throws IOException {
-    scmClient.closePipeline(
-        HddsProtos.PipelineID.newBuilder().setId(pipelineId).build());
+    if (!Strings.isNullOrEmpty(closeOption.pipelineId)) {
+      
scmClient.closePipeline(HddsProtos.PipelineID.newBuilder().setId(closeOption.pipelineId).build());
+    }
+
+    if (closeOption.closeAll) {
+      Optional<Predicate<? super Pipeline>> replicationFilter = 
filterOptions.getReplicationFilter();
+
+      Stream<Pipeline> stream = scmClient.listPipelines()
+          .stream()
+          .filter(p -> p.getPipelineState() != Pipeline.PipelineState.CLOSED);
+      if (replicationFilter.isPresent()) {
+        stream = stream.filter(replicationFilter.get());
+      }
+
+      stream.forEach(pipeline -> {
+        try {
+          scmClient.closePipeline(
+              
HddsProtos.PipelineID.newBuilder().setId(pipeline.getId().getId().toString()).build());
+        } catch (IOException e) {
+          System.err.println("Error closing pipeline: " + pipeline.getId() + 
", cause: " + e.getMessage());
+        }
+      });
+    }
+  }
+
+  private static class CloseOptionGroup {
+    @CommandLine.Option(
+        names = {"pipelineId"},

Review Comment:
   This should still be a `Parameter` (which is a value without a name).  
Currently the command gives error:
   
   ```
   $ ozone admin pipeline close 123
   Unmatched argument at index 2: '123'
   ```



##########
hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/pipeline/FilterPipelineOptions.java:
##########
@@ -0,0 +1,65 @@
+package org.apache.hadoop.hdds.scm.cli.pipeline;

Review Comment:
   
https://github.com/unisonteam/ozone/actions/runs/8813149705/job/24190293734#step:7:11
   
   License header is needed in all files.  Example:
   
   
https://github.com/apache/ozone/blob/131eec0587adefa9131eadef046dd20dc7a0dda9/hadoop-hdds/config/src/main/java/org/apache/hadoop/hdds/conf/ConfigFileAppender.java#L1-L17



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to