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

adoroszlai 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 6ba309a359 HDDS-11831. Finer-grained interface for dynamically 
registered subcommands (#7514)
6ba309a359 is described below

commit 6ba309a359262ea876bd3e0a94ca1e54be95f613
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Mon Dec 2 14:23:18 2024 +0100

    HDDS-11831. Finer-grained interface for dynamically registered subcommands 
(#7514)
---
 .../hadoop/hdds/cli/ExtensibleParentCommand.java   | 56 ++++++++++++++++++++++
 .../org/apache/hadoop/hdds/cli/GenericCli.java     | 12 +++--
 .../apache/hadoop/hdds/cli/AdminSubcommand.java    | 23 +++++++++
 .../org/apache/hadoop/hdds/cli/OzoneAdmin.java     | 10 ++--
 .../hdds/scm/cli/ContainerBalancerCommands.java    | 13 ++---
 .../hdds/scm/cli/ReplicationManagerCommands.java   | 13 ++---
 .../hadoop/hdds/scm/cli/SafeModeCommands.java      | 12 ++---
 .../hadoop/hdds/scm/cli/TopologySubcommand.java    | 12 ++---
 .../hadoop/hdds/scm/cli/cert/CertCommands.java     | 12 ++---
 .../hdds/scm/cli/container/ContainerCommands.java  | 11 ++---
 .../hdds/scm/cli/datanode/DatanodeCommands.java    | 13 ++---
 .../hdds/scm/cli/datanode/StatusSubCommand.java    | 10 +---
 .../hdds/scm/cli/pipeline/PipelineCommands.java    | 12 ++---
 .../ozone/admin/nssummary/NSSummaryAdmin.java      | 11 ++---
 .../org/apache/hadoop/ozone/admin/om/OMAdmin.java  | 11 ++---
 .../ozone/admin/reconfig/ReconfigureCommands.java  | 12 ++---
 .../apache/hadoop/ozone/admin/scm/ScmAdmin.java    | 12 ++---
 17 files changed, 132 insertions(+), 123 deletions(-)

diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/cli/ExtensibleParentCommand.java
 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/cli/ExtensibleParentCommand.java
new file mode 100644
index 0000000000..45bbb44005
--- /dev/null
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/cli/ExtensibleParentCommand.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.hadoop.hdds.cli;
+
+import picocli.CommandLine;
+
+import java.util.ServiceLoader;
+
+/**
+ * Interface for parent commands that accept subcommands to be dynamically 
registered.
+ * Subcommands should:
+ * <li>implement the interface returned by {@link #subcommandType()}</li>
+ * <li>be annotated with {@code MetaInfServices} parameterized with the same 
type</li>
+ */
+public interface ExtensibleParentCommand {
+
+  /** @return The class of the marker interface for subcommands. */
+  Class<?> subcommandType();
+
+  /** Recursively find and add subcommands to {@code cli}. */
+  static void addSubcommands(CommandLine cli) {
+    Object command = cli.getCommand();
+
+    // find and add subcommands
+    if (command instanceof ExtensibleParentCommand) {
+      ExtensibleParentCommand parentCommand = (ExtensibleParentCommand) 
command;
+      ServiceLoader<?> subcommands = 
ServiceLoader.load(parentCommand.subcommandType());
+      for (Object subcommand : subcommands) {
+        final CommandLine.Command commandAnnotation = 
subcommand.getClass().getAnnotation(CommandLine.Command.class);
+        CommandLine subcommandCommandLine = new CommandLine(subcommand);
+        cli.addSubcommand(commandAnnotation.name(), subcommandCommandLine);
+      }
+    }
+
+    // process subcommands recursively
+    for (CommandLine subcommand : cli.getSubcommands().values()) {
+      addSubcommands(subcommand);
+    }
+  }
+
+}
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/cli/GenericCli.java 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/cli/GenericCli.java
index 4c5f3fdc87..a8ff931b23 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/cli/GenericCli.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/cli/GenericCli.java
@@ -52,16 +52,20 @@ public class GenericCli implements Callable<Void>, 
GenericParentCommand {
   private final CommandLine cmd;
 
   public GenericCli() {
+    this(null);
+  }
+
+  public GenericCli(Class<?> type) {
     cmd = new CommandLine(this);
     cmd.setExecutionExceptionHandler((ex, commandLine, parseResult) -> {
       printError(ex);
       return EXECUTION_ERROR_EXIT_CODE;
     });
-  }
 
-  public GenericCli(Class<?> type) {
-    this();
-    addSubcommands(getCmd(), type);
+    if (type != null) {
+      addSubcommands(getCmd(), type);
+    }
+    ExtensibleParentCommand.addSubcommands(cmd);
   }
 
   private void addSubcommands(CommandLine cli, Class<?> type) {
diff --git 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/cli/AdminSubcommand.java
 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/cli/AdminSubcommand.java
new file mode 100644
index 0000000000..b03b75eb8a
--- /dev/null
+++ 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/cli/AdminSubcommand.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.hadoop.hdds.cli;
+
+/** Marker interface for subcommands to be added to {@code OzoneAdmin}. */
+public interface AdminSubcommand {
+  // marker
+}
diff --git 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/cli/OzoneAdmin.java 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/cli/OzoneAdmin.java
index cc496a28e7..5a9736e5e5 100644
--- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/cli/OzoneAdmin.java
+++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/cli/OzoneAdmin.java
@@ -33,19 +33,18 @@ import picocli.CommandLine;
     description = "Developer tools for Ozone Admin operations",
     versionProvider = HddsVersionProvider.class,
     mixinStandardHelpOptions = true)
-public class OzoneAdmin extends GenericCli {
+public class OzoneAdmin extends GenericCli implements ExtensibleParentCommand {
 
   private OzoneConfiguration ozoneConf;
 
   private UserGroupInformation user;
 
   public OzoneAdmin() {
-    super(OzoneAdmin.class);
+    super();
   }
 
   @VisibleForTesting
   public OzoneAdmin(OzoneConfiguration conf) {
-    super(OzoneAdmin.class);
     ozoneConf = conf;
   }
 
@@ -79,4 +78,9 @@ public class OzoneAdmin extends GenericCli {
     return TracingUtil.executeInNewSpan(spanName,
         () -> super.execute(argv));
   }
+
+  @Override
+  public Class<? extends AdminSubcommand> subcommandType() {
+    return AdminSubcommand.class;
+  }
 }
diff --git 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/ContainerBalancerCommands.java
 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/ContainerBalancerCommands.java
index 7f24d843b0..2264f096a2 100644
--- 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/ContainerBalancerCommands.java
+++ 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/ContainerBalancerCommands.java
@@ -17,10 +17,9 @@
  */
 package org.apache.hadoop.hdds.scm.cli;
 
+import org.apache.hadoop.hdds.cli.AdminSubcommand;
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
-import org.apache.hadoop.hdds.cli.OzoneAdmin;
-import org.apache.hadoop.hdds.cli.SubcommandWithParent;
 import org.kohsuke.MetaInfServices;
 import picocli.CommandLine.Command;
 import picocli.CommandLine.Model.CommandSpec;
@@ -90,9 +89,8 @@ import java.util.concurrent.Callable;
         ContainerBalancerStopSubcommand.class,
         ContainerBalancerStatusSubcommand.class
     })
-@MetaInfServices(SubcommandWithParent.class)
-public class ContainerBalancerCommands implements Callable<Void>,
-    SubcommandWithParent {
+@MetaInfServices(AdminSubcommand.class)
+public class ContainerBalancerCommands implements Callable<Void>, 
AdminSubcommand {
 
   @Spec
   private CommandSpec spec;
@@ -102,9 +100,4 @@ public class ContainerBalancerCommands implements 
Callable<Void>,
     GenericCli.missingSubcommand(spec);
     return null;
   }
-
-  @Override
-  public Class<?> getParentType() {
-    return OzoneAdmin.class;
-  }
 }
diff --git 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/ReplicationManagerCommands.java
 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/ReplicationManagerCommands.java
index cd5aba3a82..a16e522751 100644
--- 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/ReplicationManagerCommands.java
+++ 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/ReplicationManagerCommands.java
@@ -19,10 +19,9 @@ package org.apache.hadoop.hdds.scm.cli;
 
 import java.util.concurrent.Callable;
 
+import org.apache.hadoop.hdds.cli.AdminSubcommand;
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
-import org.apache.hadoop.hdds.cli.OzoneAdmin;
-import org.apache.hadoop.hdds.cli.SubcommandWithParent;
 
 import org.kohsuke.MetaInfServices;
 import picocli.CommandLine.Command;
@@ -42,9 +41,8 @@ import picocli.CommandLine.Spec;
         ReplicationManagerStopSubcommand.class,
         ReplicationManagerStatusSubcommand.class
     })
-@MetaInfServices(SubcommandWithParent.class)
-public class ReplicationManagerCommands implements Callable<Void>,
-    SubcommandWithParent {
+@MetaInfServices(AdminSubcommand.class)
+public class ReplicationManagerCommands implements Callable<Void>, 
AdminSubcommand {
 
   @Spec
   private CommandSpec spec;
@@ -54,9 +52,4 @@ public class ReplicationManagerCommands implements 
Callable<Void>,
     GenericCli.missingSubcommand(spec);
     return null;
   }
-
-  @Override
-  public Class<?> getParentType() {
-    return OzoneAdmin.class;
-  }
 }
diff --git 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/SafeModeCommands.java
 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/SafeModeCommands.java
index 6ba7cf2954..49f73e6fae 100644
--- 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/SafeModeCommands.java
+++ 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/SafeModeCommands.java
@@ -19,10 +19,9 @@ package org.apache.hadoop.hdds.scm.cli;
 
 import java.util.concurrent.Callable;
 
+import org.apache.hadoop.hdds.cli.AdminSubcommand;
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
-import org.apache.hadoop.hdds.cli.OzoneAdmin;
-import org.apache.hadoop.hdds.cli.SubcommandWithParent;
 
 import org.kohsuke.MetaInfServices;
 import picocli.CommandLine.Command;
@@ -42,8 +41,8 @@ import picocli.CommandLine.Spec;
         SafeModeExitSubcommand.class,
         SafeModeWaitSubcommand.class
     })
-@MetaInfServices(SubcommandWithParent.class)
-public class SafeModeCommands implements Callable<Void>, SubcommandWithParent {
+@MetaInfServices(AdminSubcommand.class)
+public class SafeModeCommands implements Callable<Void>, AdminSubcommand {
 
   @Spec
   private CommandSpec spec;
@@ -53,9 +52,4 @@ public class SafeModeCommands implements Callable<Void>, 
SubcommandWithParent {
     GenericCli.missingSubcommand(spec);
     return null;
   }
-
-  @Override
-  public Class<?> getParentType() {
-    return OzoneAdmin.class;
-  }
 }
diff --git 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/TopologySubcommand.java
 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/TopologySubcommand.java
index 9ac275fd5c..72bca50693 100644
--- 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/TopologySubcommand.java
+++ 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/TopologySubcommand.java
@@ -33,9 +33,8 @@ import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.databind.JsonSerializer;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import org.apache.hadoop.hdds.cli.AdminSubcommand;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
-import org.apache.hadoop.hdds.cli.OzoneAdmin;
-import org.apache.hadoop.hdds.cli.SubcommandWithParent;
 import org.apache.hadoop.hdds.protocol.DatanodeDetails;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
 import org.apache.hadoop.hdds.scm.client.ScmClient;
@@ -56,9 +55,9 @@ import picocli.CommandLine;
     description = "Print a tree of the network topology as reported by SCM",
     mixinStandardHelpOptions = true,
     versionProvider = HddsVersionProvider.class)
-@MetaInfServices(SubcommandWithParent.class)
+@MetaInfServices(AdminSubcommand.class)
 public class TopologySubcommand extends ScmSubcommand
-    implements SubcommandWithParent {
+    implements AdminSubcommand {
 
   private static final List<HddsProtos.NodeState> STATES = new ArrayList<>();
 
@@ -137,11 +136,6 @@ public class TopologySubcommand extends ScmSubcommand
     }
   }
 
-  @Override
-  public Class<?> getParentType() {
-    return OzoneAdmin.class;
-  }
-
   // Format
   // Location: rack1
   //  ipAddress(hostName) OperationalState
diff --git 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/cert/CertCommands.java
 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/cert/CertCommands.java
index d466c9554a..211e3bb092 100644
--- 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/cert/CertCommands.java
+++ 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/cert/CertCommands.java
@@ -19,10 +19,9 @@ package org.apache.hadoop.hdds.scm.cli.cert;
 
 import java.util.concurrent.Callable;
 
+import org.apache.hadoop.hdds.cli.AdminSubcommand;
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
-import org.apache.hadoop.hdds.cli.OzoneAdmin;
-import org.apache.hadoop.hdds.cli.SubcommandWithParent;
 
 import org.kohsuke.MetaInfServices;
 import picocli.CommandLine.Command;
@@ -43,8 +42,8 @@ import picocli.CommandLine.Spec;
         CleanExpiredCertsSubcommand.class,
     })
 
-@MetaInfServices(SubcommandWithParent.class)
-public class CertCommands implements Callable<Void>, SubcommandWithParent {
+@MetaInfServices(AdminSubcommand.class)
+public class CertCommands implements Callable<Void>, AdminSubcommand {
 
   @Spec
   private CommandSpec spec;
@@ -54,9 +53,4 @@ public class CertCommands implements Callable<Void>, 
SubcommandWithParent {
     GenericCli.missingSubcommand(spec);
     return null;
   }
-
-  @Override
-  public Class<?> getParentType() {
-    return OzoneAdmin.class;
-  }
 }
diff --git 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/container/ContainerCommands.java
 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/container/ContainerCommands.java
index 15dd873491..a38b98c53a 100644
--- 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/container/ContainerCommands.java
+++ 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/container/ContainerCommands.java
@@ -19,10 +19,10 @@ package org.apache.hadoop.hdds.scm.cli.container;
 
 import java.util.concurrent.Callable;
 
+import org.apache.hadoop.hdds.cli.AdminSubcommand;
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.cli.OzoneAdmin;
-import org.apache.hadoop.hdds.cli.SubcommandWithParent;
 
 import org.kohsuke.MetaInfServices;
 import picocli.CommandLine.Command;
@@ -46,8 +46,8 @@ import picocli.CommandLine.Spec;
         ReportSubcommand.class,
         UpgradeSubcommand.class
     })
-@MetaInfServices(SubcommandWithParent.class)
-public class ContainerCommands implements Callable<Void>, SubcommandWithParent 
{
+@MetaInfServices(AdminSubcommand.class)
+public class ContainerCommands implements Callable<Void>, AdminSubcommand {
 
   @Spec
   private CommandSpec spec;
@@ -61,11 +61,6 @@ public class ContainerCommands implements Callable<Void>, 
SubcommandWithParent {
     return null;
   }
 
-  @Override
-  public Class<?> getParentType() {
-    return OzoneAdmin.class;
-  }
-
   public OzoneAdmin getParent() {
     return parent;
   }
diff --git 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DatanodeCommands.java
 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DatanodeCommands.java
index 8cb2114f57..6c020e46f3 100644
--- 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DatanodeCommands.java
+++ 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DatanodeCommands.java
@@ -17,10 +17,9 @@
  */
 package org.apache.hadoop.hdds.scm.cli.datanode;
 
+import org.apache.hadoop.hdds.cli.AdminSubcommand;
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
-import org.apache.hadoop.hdds.cli.OzoneAdmin;
-import org.apache.hadoop.hdds.cli.SubcommandWithParent;
 import org.kohsuke.MetaInfServices;
 import picocli.CommandLine;
 import picocli.CommandLine.Model.CommandSpec;
@@ -41,10 +40,11 @@ import java.util.concurrent.Callable;
         DecommissionSubCommand.class,
         MaintenanceSubCommand.class,
         RecommissionSubCommand.class,
+        StatusSubCommand.class,
         UsageInfoSubcommand.class
     })
-@MetaInfServices(SubcommandWithParent.class)
-public class DatanodeCommands implements Callable<Void>, SubcommandWithParent {
+@MetaInfServices(AdminSubcommand.class)
+public class DatanodeCommands implements Callable<Void>, AdminSubcommand {
 
   @Spec
   private CommandSpec spec;
@@ -54,9 +54,4 @@ public class DatanodeCommands implements Callable<Void>, 
SubcommandWithParent {
     GenericCli.missingSubcommand(spec);
     return null;
   }
-
-  @Override
-  public Class<?> getParentType() {
-    return OzoneAdmin.class;
-  }
 }
diff --git 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/StatusSubCommand.java
 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/StatusSubCommand.java
index 9edcd3425a..b33a5d1ea9 100644
--- 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/StatusSubCommand.java
+++ 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/StatusSubCommand.java
@@ -19,8 +19,6 @@ package org.apache.hadoop.hdds.scm.cli.datanode;
 
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
-import org.apache.hadoop.hdds.cli.SubcommandWithParent;
-import org.kohsuke.MetaInfServices;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 import java.util.concurrent.Callable;
@@ -37,8 +35,7 @@ import java.util.concurrent.Callable;
         DecommissionStatusSubCommand.class
     })
 
-@MetaInfServices(SubcommandWithParent.class)
-public class StatusSubCommand implements Callable<Void>, SubcommandWithParent {
+public class StatusSubCommand implements Callable<Void> {
 
   @CommandLine.Spec
   private CommandLine.Model.CommandSpec spec;
@@ -48,9 +45,4 @@ public class StatusSubCommand implements Callable<Void>, 
SubcommandWithParent {
     GenericCli.missingSubcommand(spec);
     return null;
   }
-
-  @Override
-  public Class<?> getParentType() {
-    return DatanodeCommands.class;
-  }
 }
diff --git 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/pipeline/PipelineCommands.java
 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/pipeline/PipelineCommands.java
index ba7371e621..9c39103556 100644
--- 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/pipeline/PipelineCommands.java
+++ 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/pipeline/PipelineCommands.java
@@ -19,10 +19,9 @@ package org.apache.hadoop.hdds.scm.cli.pipeline;
 
 import java.util.concurrent.Callable;
 
+import org.apache.hadoop.hdds.cli.AdminSubcommand;
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
-import org.apache.hadoop.hdds.cli.OzoneAdmin;
-import org.apache.hadoop.hdds.cli.SubcommandWithParent;
 
 import org.kohsuke.MetaInfServices;
 import picocli.CommandLine.Command;
@@ -44,8 +43,8 @@ import picocli.CommandLine.Spec;
         CreatePipelineSubcommand.class,
         ClosePipelineSubcommand.class
     })
-@MetaInfServices(SubcommandWithParent.class)
-public class PipelineCommands implements Callable<Void>, SubcommandWithParent {
+@MetaInfServices(AdminSubcommand.class)
+public class PipelineCommands implements Callable<Void>, AdminSubcommand {
 
   @Spec
   private CommandSpec spec;
@@ -55,9 +54,4 @@ public class PipelineCommands implements Callable<Void>, 
SubcommandWithParent {
     GenericCli.missingSubcommand(spec);
     return null;
   }
-
-  @Override
-  public Class<?> getParentType() {
-    return OzoneAdmin.class;
-  }
 }
diff --git 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java
 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java
index 46a311e354..af039cfff6 100644
--- 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java
+++ 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java
@@ -21,7 +21,7 @@ import org.apache.hadoop.fs.ozone.OzoneClientUtils;
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.cli.OzoneAdmin;
-import org.apache.hadoop.hdds.cli.SubcommandWithParent;
+import org.apache.hadoop.hdds.cli.AdminSubcommand;
 import org.apache.hadoop.hdds.conf.ConfigurationSource;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.server.http.HttpConfig;
@@ -62,8 +62,8 @@ import static 
org.apache.hadoop.hdds.server.http.HttpServer2.HTTP_SCHEME;
         QuotaUsageSubCommand.class,
         FileSizeDistSubCommand.class
     })
-@MetaInfServices(SubcommandWithParent.class)
-public class NSSummaryAdmin extends GenericCli implements SubcommandWithParent 
{
+@MetaInfServices(AdminSubcommand.class)
+public class NSSummaryAdmin extends GenericCli implements AdminSubcommand {
   @CommandLine.ParentCommand
   private OzoneAdmin parent;
 
@@ -80,11 +80,6 @@ public class NSSummaryAdmin extends GenericCli implements 
SubcommandWithParent {
     return null;
   }
 
-  @Override
-  public Class<?> getParentType() {
-    return OzoneAdmin.class;
-  }
-
   private boolean isObjectStoreBucket(OzoneBucket bucket, ObjectStore 
objectStore) {
     boolean enableFileSystemPaths = getOzoneConfig()
         .getBoolean(OMConfigKeys.OZONE_OM_ENABLE_FILESYSTEM_PATHS,
diff --git 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/om/OMAdmin.java
 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/om/OMAdmin.java
index 3162c55635..9e2e31b6f8 100644
--- 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/om/OMAdmin.java
+++ 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/om/OMAdmin.java
@@ -20,7 +20,7 @@ package org.apache.hadoop.ozone.admin.om;
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.cli.OzoneAdmin;
-import org.apache.hadoop.hdds.cli.SubcommandWithParent;
+import org.apache.hadoop.hdds.cli.AdminSubcommand;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.ipc.ProtobufRpcEngine;
 import org.apache.hadoop.ipc.RPC;
@@ -63,8 +63,8 @@ import java.util.Collection;
         TransferOmLeaderSubCommand.class,
         FetchKeySubCommand.class
     })
-@MetaInfServices(SubcommandWithParent.class)
-public class OMAdmin extends GenericCli implements SubcommandWithParent {
+@MetaInfServices(AdminSubcommand.class)
+public class OMAdmin extends GenericCli implements AdminSubcommand {
 
   @CommandLine.ParentCommand
   private OzoneAdmin parent;
@@ -146,9 +146,4 @@ public class OMAdmin extends GenericCli implements 
SubcommandWithParent {
         conf.getTrimmedStringCollection(OZONE_OM_SERVICE_IDS_KEY);
     return omServiceIds;
   }
-
-  @Override
-  public Class<?> getParentType() {
-    return OzoneAdmin.class;
-  }
 }
diff --git 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/reconfig/ReconfigureCommands.java
 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/reconfig/ReconfigureCommands.java
index fc171e52d8..d14102c4e8 100644
--- 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/reconfig/ReconfigureCommands.java
+++ 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/reconfig/ReconfigureCommands.java
@@ -17,10 +17,10 @@
  */
 package org.apache.hadoop.ozone.admin.reconfig;
 
+import org.apache.hadoop.hdds.cli.AdminSubcommand;
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.cli.OzoneAdmin;
-import org.apache.hadoop.hdds.cli.SubcommandWithParent;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
 import org.apache.hadoop.hdds.scm.cli.ContainerOperationClient;
 import org.apache.hadoop.hdds.scm.client.ScmClient;
@@ -47,9 +47,8 @@ import java.util.concurrent.Callable;
         ReconfigureStatusSubcommand.class,
         ReconfigurePropertiesSubcommand.class
     })
-@MetaInfServices(SubcommandWithParent.class)
-public class ReconfigureCommands implements Callable<Void>,
-    SubcommandWithParent {
+@MetaInfServices(AdminSubcommand.class)
+public class ReconfigureCommands implements Callable<Void>, AdminSubcommand {
 
   @CommandLine.ParentCommand
   private OzoneAdmin parent;
@@ -87,11 +86,6 @@ public class ReconfigureCommands implements Callable<Void>,
     return HddsProtos.NodeType.valueOf(service);
   }
 
-  @Override
-  public Class<?> getParentType() {
-    return OzoneAdmin.class;
-  }
-
   public boolean isBatchReconfigDatanodes() {
     return batchReconfigDatanodes;
   }
diff --git 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/scm/ScmAdmin.java
 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/scm/ScmAdmin.java
index 98eba154b2..d31f752704 100644
--- 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/scm/ScmAdmin.java
+++ 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/scm/ScmAdmin.java
@@ -20,7 +20,7 @@ package org.apache.hadoop.ozone.admin.scm;
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.cli.OzoneAdmin;
-import org.apache.hadoop.hdds.cli.SubcommandWithParent;
+import org.apache.hadoop.hdds.cli.AdminSubcommand;
 import org.kohsuke.MetaInfServices;
 import picocli.CommandLine;
 import picocli.CommandLine.Model.CommandSpec;
@@ -43,8 +43,8 @@ import picocli.CommandLine.Spec;
         DecommissionScmSubcommand.class,
         RotateKeySubCommand.class
     })
-@MetaInfServices(SubcommandWithParent.class)
-public class ScmAdmin extends GenericCli implements SubcommandWithParent {
+@MetaInfServices(AdminSubcommand.class)
+public class ScmAdmin extends GenericCli implements AdminSubcommand {
 
   @CommandLine.ParentCommand
   private OzoneAdmin parent;
@@ -61,10 +61,4 @@ public class ScmAdmin extends GenericCli implements 
SubcommandWithParent {
     GenericCli.missingSubcommand(spec);
     return null;
   }
-
-  @Override
-  public Class<?> getParentType() {
-    return OzoneAdmin.class;
-  }
-
 }


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

Reply via email to