From 71e2725b00cbe0c7832632cc6116ae45da0a746c Mon Sep 17 00:00:00 2001 From: "Doroszlai, Attila" Date: Tue, 3 Dec 2024 20:48:24 +0100 Subject: [PATCH 1/2] HDDS-11851. Finer-grained subcommand interface for OzoneDebug and OzoneRepair --- .../apache/hadoop/hdds/cli/GenericCli.java | 18 +-------------- .../hadoop/hdds/cli/SubcommandWithParent.java | 23 ++++++++++++++++++- .../hadoop/hdds/cli/DebugSubcommand.java | 23 +++++++++++++++++++ .../hadoop/hdds/cli/RepairSubcommand.java | 23 +++++++++++++++++++ .../ozone/debug/CompactionLogDagPrinter.java | 11 +++------ .../ozone/debug/FindMissingPadding.java | 14 +++-------- .../hadoop/ozone/debug/LeaseRecoverer.java | 14 +++-------- .../apache/hadoop/ozone/debug/OzoneDebug.java | 9 +++++++- .../hadoop/ozone/debug/PrefixParser.java | 11 +++------ .../hadoop/ozone/debug/ReadReplicas.java | 11 +++------ .../hadoop/ozone/debug/VersionDebug.java | 11 +++------ .../ozone/debug/chunk/ChunkKeyHandler.java | 12 +++------- .../debug/container/ContainerCommands.java | 11 +++------ .../hadoop/ozone/debug/ldb/DBScanner.java | 10 +------- .../hadoop/ozone/debug/ldb/DropTable.java | 8 +------ .../hadoop/ozone/debug/ldb/ListTables.java | 11 +-------- .../hadoop/ozone/debug/ldb/RDBParser.java | 18 +++++++-------- .../hadoop/ozone/debug/ldb/ValueSchema.java | 10 +------- .../debug/segmentparser/RatisLogParser.java | 12 +++------- .../hadoop/ozone/repair/OzoneRepair.java | 8 ++++++- .../ozone/repair/RecoverSCMCertificate.java | 11 +++------ .../hadoop/ozone/repair/ldb/RDBRepair.java | 16 ++++++------- .../ozone/repair/ldb/SnapshotRepair.java | 10 +------- .../repair/ldb/TransactionInfoRepair.java | 12 +--------- .../ozone/repair/quota/QuotaRepair.java | 15 ++++++------ .../ozone/repair/quota/QuotaStatus.java | 11 +-------- .../ozone/repair/quota/QuotaTrigger.java | 10 +------- 27 files changed, 145 insertions(+), 208 deletions(-) create mode 100644 hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/cli/DebugSubcommand.java create mode 100644 hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/cli/RepairSubcommand.java 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 a8ff931b23f0..c080e2bd613c 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 @@ -19,7 +19,6 @@ import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; -import java.util.ServiceLoader; import java.util.concurrent.Callable; import org.apache.hadoop.fs.Path; @@ -27,7 +26,6 @@ import com.google.common.annotations.VisibleForTesting; import picocli.CommandLine; -import picocli.CommandLine.Command; import picocli.CommandLine.ExitCode; import picocli.CommandLine.Model.CommandSpec; import picocli.CommandLine.Option; @@ -63,25 +61,11 @@ public GenericCli(Class type) { }); if (type != null) { - addSubcommands(getCmd(), type); + SubcommandWithParent.addSubcommands(getCmd(), type); } ExtensibleParentCommand.addSubcommands(cmd); } - private void addSubcommands(CommandLine cli, Class type) { - ServiceLoader registeredSubcommands = - ServiceLoader.load(SubcommandWithParent.class); - for (SubcommandWithParent subcommand : registeredSubcommands) { - if (subcommand.getParentType().equals(type)) { - final Command commandAnnotation = - subcommand.getClass().getAnnotation(Command.class); - CommandLine subcommandCommandLine = new CommandLine(subcommand); - addSubcommands(subcommandCommandLine, subcommand.getClass()); - cli.addSubcommand(commandAnnotation.name(), subcommandCommandLine); - } - } - } - /** * Handle the error when subcommand is required but not set. */ diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/cli/SubcommandWithParent.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/cli/SubcommandWithParent.java index 8421ab19cfaa..398c4f61ba83 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/cli/SubcommandWithParent.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/cli/SubcommandWithParent.java @@ -17,11 +17,32 @@ */ package org.apache.hadoop.hdds.cli; +import picocli.CommandLine; + +import java.util.ServiceLoader; + /** - * Defineds parent command for SPI based subcommand registration. + * Defines parent command for SPI based subcommand registration. + * @deprecated use more specific interfaces + * @see ExtensibleParentCommand */ +@Deprecated public interface SubcommandWithParent { + static void addSubcommands(CommandLine cli, Class type) { + ServiceLoader registeredSubcommands = + ServiceLoader.load(SubcommandWithParent.class); + for (SubcommandWithParent subcommand : registeredSubcommands) { + if (subcommand.getParentType().equals(type)) { + final CommandLine.Command commandAnnotation = + subcommand.getClass().getAnnotation(CommandLine.Command.class); + CommandLine subcommandCommandLine = new CommandLine(subcommand); + addSubcommands(subcommandCommandLine, subcommand.getClass()); + cli.addSubcommand(commandAnnotation.name(), subcommandCommandLine); + } + } + } + /** * Java type of the parent command. */ diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/cli/DebugSubcommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/cli/DebugSubcommand.java new file mode 100644 index 000000000000..3915fd868435 --- /dev/null +++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/cli/DebugSubcommand.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 OzoneDebug}. */ +public interface DebugSubcommand { + // marker +} diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/cli/RepairSubcommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/cli/RepairSubcommand.java new file mode 100644 index 000000000000..1eb12b01253f --- /dev/null +++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/cli/RepairSubcommand.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 OzoneRepair}. */ +public interface RepairSubcommand { + // marker +} diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/CompactionLogDagPrinter.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/CompactionLogDagPrinter.java index 91d033729adb..175fc03e398e 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/CompactionLogDagPrinter.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/CompactionLogDagPrinter.java @@ -18,7 +18,7 @@ package org.apache.hadoop.ozone.debug; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; +import org.apache.hadoop.hdds.cli.DebugSubcommand; import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.hadoop.ozone.shell.Handler; import org.apache.hadoop.ozone.shell.OzoneAddress; @@ -35,9 +35,9 @@ name = "print-log-dag", aliases = "pld", description = "Create an image of the current compaction log DAG in OM.") -@MetaInfServices(SubcommandWithParent.class) +@MetaInfServices(DebugSubcommand.class) public class CompactionLogDagPrinter extends Handler - implements SubcommandWithParent { + implements DebugSubcommand { @CommandLine.Option(names = {"-f", "--file-name-prefix"}, description = "Prefix to be use in image file name. (optional)") @@ -55,11 +55,6 @@ public class CompactionLogDagPrinter extends Handler defaultValue = "file_name") private String graphType; - @Override - public Class getParentType() { - return OzoneDebug.class; - } - @Override protected void execute(OzoneClient client, OzoneAddress address) throws IOException { diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/FindMissingPadding.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/FindMissingPadding.java index 0c7ba187ce18..21b572fbc4cd 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/FindMissingPadding.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/FindMissingPadding.java @@ -17,7 +17,7 @@ */ package org.apache.hadoop.ozone.debug; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; +import org.apache.hadoop.hdds.cli.DebugSubcommand; import org.apache.hadoop.hdds.client.ECReplicationConfig; import org.apache.hadoop.hdds.client.StandaloneReplicationConfig; import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos; @@ -74,11 +74,8 @@ @CommandLine.Command(name = "find-missing-padding", aliases = { "fmp" }, description = "List all keys with any missing padding, optionally limited to a volume/bucket/key URI.") -@MetaInfServices(SubcommandWithParent.class) -public class FindMissingPadding extends Handler implements SubcommandWithParent { - - @CommandLine.ParentCommand - private OzoneDebug parent; +@MetaInfServices(DebugSubcommand.class) +public class FindMissingPadding extends Handler implements DebugSubcommand { @CommandLine.Mixin private ScmOption scmOption; @@ -100,11 +97,6 @@ protected OzoneAddress getAddress() throws OzoneClientException { return new OzoneAddress(uri); } - @Override - public Class getParentType() { - return OzoneDebug.class; - } - @Override protected void execute(OzoneClient ozoneClient, OzoneAddress address) throws IOException { findCandidateKeys(ozoneClient, address); diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/LeaseRecoverer.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/LeaseRecoverer.java index a8891404e05c..9c3865ae2419 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/LeaseRecoverer.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/LeaseRecoverer.java @@ -24,7 +24,7 @@ import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.LeaseRecoverable; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; +import org.apache.hadoop.hdds.cli.DebugSubcommand; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.kohsuke.MetaInfServices; @@ -40,11 +40,8 @@ customSynopsis = "ozone debug recover --path=", description = "recover the lease of a specified file. Make sure to specify " + "file system scheme if ofs:// is not the default.") -@MetaInfServices(SubcommandWithParent.class) -public class LeaseRecoverer implements Callable, SubcommandWithParent { - - @CommandLine.ParentCommand - private OzoneDebug parent; +@MetaInfServices(DebugSubcommand.class) +public class LeaseRecoverer implements Callable, DebugSubcommand { @Spec private CommandSpec spec; @@ -62,11 +59,6 @@ public void setPath(String dbPath) { this.path = dbPath; } - @Override - public Class getParentType() { - return OzoneDebug.class; - } - @Override public Void call() throws Exception { OzoneConfiguration configuration = new OzoneConfiguration(); diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/OzoneDebug.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/OzoneDebug.java index 3d6cf570934c..25ce665cf674 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/OzoneDebug.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/OzoneDebug.java @@ -19,6 +19,8 @@ package org.apache.hadoop.ozone.debug; import com.google.common.annotations.VisibleForTesting; +import org.apache.hadoop.hdds.cli.DebugSubcommand; +import org.apache.hadoop.hdds.cli.ExtensibleParentCommand; import org.apache.hadoop.hdds.cli.GenericCli; import org.apache.hadoop.hdds.cli.HddsVersionProvider; @@ -32,7 +34,7 @@ description = "Developer tools for Ozone Debug operations", versionProvider = HddsVersionProvider.class, mixinStandardHelpOptions = true) -public class OzoneDebug extends GenericCli { +public class OzoneDebug extends GenericCli implements ExtensibleParentCommand { private OzoneConfiguration ozoneConf; @@ -63,4 +65,9 @@ public static void main(String[] argv) throws Exception { new OzoneDebug().run(argv); } + + @Override + public Class subcommandType() { + return DebugSubcommand.class; + } } diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/PrefixParser.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/PrefixParser.java index fabc7f456aec..cdda3e5e0f97 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/PrefixParser.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/PrefixParser.java @@ -26,7 +26,7 @@ import java.util.concurrent.Callable; import java.nio.file.Path; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; +import org.apache.hadoop.hdds.cli.DebugSubcommand; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.utils.MetadataKeyFilters; @@ -53,8 +53,8 @@ @CommandLine.Command( name = "prefix", description = "Parse prefix contents") -@MetaInfServices(SubcommandWithParent.class) -public class PrefixParser implements Callable, SubcommandWithParent { +@MetaInfServices(DebugSubcommand.class) +public class PrefixParser implements Callable, DebugSubcommand { /** * Types to represent the level or path component type. @@ -101,11 +101,6 @@ public void setDbPath(String dbPath) { this.dbPath = dbPath; } - @Override - public Class getParentType() { - return OzoneDebug.class; - } - @Override public Void call() throws Exception { parse(volume, bucket, dbPath, filePath); diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ReadReplicas.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ReadReplicas.java index fd93d75cd5d9..c88245a571bc 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ReadReplicas.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ReadReplicas.java @@ -17,7 +17,7 @@ package org.apache.hadoop.ozone.debug; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; +import org.apache.hadoop.hdds.cli.DebugSubcommand; import org.apache.hadoop.hdds.client.BlockID; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.protocol.DatanodeDetails; @@ -60,8 +60,8 @@ @CommandLine.Command(name = "read-replicas", description = "Reads every replica for all the blocks associated with a " + "given key.") -@MetaInfServices(SubcommandWithParent.class) -public class ReadReplicas extends KeyHandler implements SubcommandWithParent { +@MetaInfServices(DebugSubcommand.class) +public class ReadReplicas extends KeyHandler implements DebugSubcommand { @CommandLine.Option(names = {"--outputDir", "-o", "--output-dir"}, description = "Destination where the directory will be created" + @@ -82,11 +82,6 @@ public class ReadReplicas extends KeyHandler implements SubcommandWithParent { private static final String JSON_PROPERTY_REPLICA_UUID = "uuid"; private static final String JSON_PROPERTY_REPLICA_EXCEPTION = "exception"; - @Override - public Class getParentType() { - return OzoneDebug.class; - } - @Override protected void execute(OzoneClient client, OzoneAddress address) throws IOException { diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/VersionDebug.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/VersionDebug.java index b7be569adbfb..54b2e4c9986e 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/VersionDebug.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/VersionDebug.java @@ -20,7 +20,7 @@ import com.google.common.collect.ImmutableSortedMap; import org.apache.hadoop.hdds.ComponentVersion; import org.apache.hadoop.hdds.DatanodeVersion; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; +import org.apache.hadoop.hdds.cli.DebugSubcommand; import org.apache.hadoop.hdds.server.JsonUtils; import org.apache.hadoop.ozone.ClientVersion; import org.apache.hadoop.ozone.OzoneManagerVersion; @@ -40,13 +40,8 @@ "get a cross-component view of versions. The goal of this command is to help quickly get a glance of the " + "latest features supported by Ozone on the current node." ) -@MetaInfServices(SubcommandWithParent.class) -public class VersionDebug implements Callable, SubcommandWithParent { - - @Override - public Class getParentType() { - return OzoneDebug.class; - } +@MetaInfServices(DebugSubcommand.class) +public class VersionDebug implements Callable, DebugSubcommand { @Override public Void call() throws IOException { diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/chunk/ChunkKeyHandler.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/chunk/ChunkKeyHandler.java index af97b7135db6..6944c380493d 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/chunk/ChunkKeyHandler.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/chunk/ChunkKeyHandler.java @@ -27,7 +27,7 @@ import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; +import org.apache.hadoop.hdds.cli.DebugSubcommand; import org.apache.hadoop.hdds.client.ECReplicationConfig; import org.apache.hadoop.hdds.client.StandaloneReplicationConfig; import org.apache.hadoop.hdds.protocol.DatanodeDetails; @@ -61,9 +61,9 @@ @Command(name = "chunkinfo", description = "returns chunk location" + " information about an existing key") -@MetaInfServices(SubcommandWithParent.class) +@MetaInfServices(DebugSubcommand.class) public class ChunkKeyHandler extends KeyHandler implements - SubcommandWithParent { + DebugSubcommand { @CommandLine.ParentCommand private OzoneDebug parent; @@ -201,10 +201,4 @@ private boolean isECParityBlock(Pipeline pipeline, DatanodeDetails dn) { return pipeline.getReplicaIndex(dn) > ((ECReplicationConfig) pipeline.getReplicationConfig()).getData(); } - - @Override - public Class getParentType() { - return OzoneDebug.class; - } - } diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/container/ContainerCommands.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/container/ContainerCommands.java index 47260d62f736..6e3792793db3 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/container/ContainerCommands.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/container/ContainerCommands.java @@ -21,7 +21,7 @@ import com.google.common.base.Preconditions; import org.apache.hadoop.hdds.cli.GenericCli; import org.apache.hadoop.hdds.cli.HddsVersionProvider; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; +import org.apache.hadoop.hdds.cli.DebugSubcommand; import org.apache.hadoop.hdds.conf.ConfigurationSource; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos; @@ -81,8 +81,8 @@ ExportSubcommand.class, InspectSubcommand.class }) -@MetaInfServices(SubcommandWithParent.class) -public class ContainerCommands implements Callable, SubcommandWithParent { +@MetaInfServices(DebugSubcommand.class) +public class ContainerCommands implements Callable, DebugSubcommand { private static final Logger LOG = LoggerFactory.getLogger(ContainerCommands.class); @@ -103,11 +103,6 @@ public Void call() throws Exception { return null; } - @Override - public Class getParentType() { - return OzoneDebug.class; - } - OzoneConfiguration getOzoneConf() { return parent.getOzoneConf(); } diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/DBScanner.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/DBScanner.java index a2c464194b0c..86bd4cd8ec41 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/DBScanner.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/DBScanner.java @@ -27,7 +27,6 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.google.common.annotations.VisibleForTesting; import com.google.common.util.concurrent.ThreadFactoryBuilder; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.scm.container.ContainerID; import org.apache.hadoop.hdds.scm.pipeline.PipelineID; @@ -47,7 +46,6 @@ import org.apache.hadoop.ozone.debug.DBDefinitionFactory; import org.apache.hadoop.ozone.debug.RocksDBUtils; import org.apache.hadoop.ozone.utils.Filter; -import org.kohsuke.MetaInfServices; import org.rocksdb.ColumnFamilyDescriptor; import org.rocksdb.ColumnFamilyHandle; import org.rocksdb.RocksDBException; @@ -89,8 +87,7 @@ name = "scan", description = "Parse specified metadataTable" ) -@MetaInfServices(SubcommandWithParent.class) -public class DBScanner implements Callable, SubcommandWithParent { +public class DBScanner implements Callable { public static final Logger LOG = LoggerFactory.getLogger(DBScanner.class); private static final String SCHEMA_V3 = "V3"; @@ -646,11 +643,6 @@ private String removeTrailingSlashIfNeeded(String dbPath) { return dbPath; } - @Override - public Class getParentType() { - return RDBParser.class; - } - /** * Utility for centralized JSON serialization using Jackson. */ diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/DropTable.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/DropTable.java index 9b944676b0d8..5326adc0e2bb 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/DropTable.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/DropTable.java @@ -18,7 +18,6 @@ package org.apache.hadoop.ozone.debug.ldb; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; import org.apache.hadoop.hdds.utils.db.managed.ManagedRocksDB; import org.apache.hadoop.ozone.debug.RocksDBUtils; import org.rocksdb.ColumnFamilyDescriptor; @@ -38,7 +37,7 @@ name = "drop_column_family", description = "drop column family in db." ) -public class DropTable implements Callable, SubcommandWithParent { +public class DropTable implements Callable { @CommandLine.Option(names = {"--column-family", "--column_family"}, description = "Table name") @@ -74,9 +73,4 @@ public Void call() throws Exception { } return null; } - - @Override - public Class getParentType() { - return RDBParser.class; - } } diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/ListTables.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/ListTables.java index c3d9bc4651e1..d115a44da8b6 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/ListTables.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/ListTables.java @@ -22,10 +22,7 @@ import java.util.List; import java.util.concurrent.Callable; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; - import org.apache.hadoop.hdds.utils.db.RocksDatabase; -import org.kohsuke.MetaInfServices; import picocli.CommandLine; /** @@ -36,8 +33,7 @@ aliases = "ls", description = "list all column families in db." ) -@MetaInfServices(SubcommandWithParent.class) -public class ListTables implements Callable, SubcommandWithParent { +public class ListTables implements Callable { @CommandLine.ParentCommand private RDBParser parent; @@ -51,9 +47,4 @@ public Void call() throws Exception { } return null; } - - @Override - public Class getParentType() { - return RDBParser.class; - } } diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/RDBParser.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/RDBParser.java index da3ff5f30302..4e945c7c4185 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/RDBParser.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/RDBParser.java @@ -21,9 +21,8 @@ import java.util.concurrent.Callable; import org.apache.hadoop.hdds.cli.GenericCli; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; +import org.apache.hadoop.hdds.cli.DebugSubcommand; -import org.apache.hadoop.ozone.debug.OzoneDebug; import org.kohsuke.MetaInfServices; import picocli.CommandLine; import picocli.CommandLine.Model.CommandSpec; @@ -34,9 +33,15 @@ */ @CommandLine.Command( name = "ldb", + subcommands = { + DBScanner.class, + DropTable.class, + ListTables.class, + ValueSchema.class, + }, description = "Parse rocksdb file content") -@MetaInfServices(SubcommandWithParent.class) -public class RDBParser implements Callable, SubcommandWithParent { +@MetaInfServices(DebugSubcommand.class) +public class RDBParser implements Callable, DebugSubcommand { @Spec private CommandSpec spec; @@ -54,11 +59,6 @@ public void setDbPath(String dbPath) { this.dbPath = dbPath; } - @Override - public Class getParentType() { - return OzoneDebug.class; - } - @Override public Void call() throws Exception { GenericCli.missingSubcommand(spec); diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/ValueSchema.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/ValueSchema.java index 9c4ce4e0ebed..4b8eb3b32088 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/ValueSchema.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/ldb/ValueSchema.java @@ -18,14 +18,12 @@ package org.apache.hadoop.ozone.debug.ldb; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.server.JsonUtils; import org.apache.hadoop.hdds.utils.db.DBColumnFamilyDefinition; import org.apache.hadoop.hdds.utils.db.DBDefinition; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.debug.DBDefinitionFactory; -import org.kohsuke.MetaInfServices; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import picocli.CommandLine; @@ -53,8 +51,7 @@ name = "value-schema", description = "Schema of value in metadataTable" ) -@MetaInfServices(SubcommandWithParent.class) -public class ValueSchema implements Callable, SubcommandWithParent { +public class ValueSchema implements Callable { @CommandLine.ParentCommand private RDBParser parent; @@ -173,11 +170,6 @@ private static PrintWriter out() { return spec.commandLine().getOut(); } - @Override - public Class getParentType() { - return RDBParser.class; - } - private static String removeTrailingSlashIfNeeded(String dbPath) { if (dbPath.endsWith(OzoneConsts.OZONE_URI_DELIMITER)) { dbPath = dbPath.substring(0, dbPath.length() - 1); diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/segmentparser/RatisLogParser.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/segmentparser/RatisLogParser.java index d80b6d31a110..653ea710aca1 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/segmentparser/RatisLogParser.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/segmentparser/RatisLogParser.java @@ -19,8 +19,7 @@ import org.apache.hadoop.hdds.cli.GenericCli; import org.apache.hadoop.hdds.cli.HddsVersionProvider; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; -import org.apache.hadoop.ozone.debug.OzoneDebug; +import org.apache.hadoop.hdds.cli.DebugSubcommand; import org.kohsuke.MetaInfServices; import picocli.CommandLine; @@ -39,15 +38,10 @@ }, versionProvider = HddsVersionProvider.class, mixinStandardHelpOptions = true) -@MetaInfServices(SubcommandWithParent.class) -public class RatisLogParser extends GenericCli implements SubcommandWithParent { +@MetaInfServices(DebugSubcommand.class) +public class RatisLogParser extends GenericCli implements DebugSubcommand { public static void main(String[] args) { new RatisLogParser().run(args); } - - @Override - public Class getParentType() { - return OzoneDebug.class; - } } diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/OzoneRepair.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/OzoneRepair.java index 166445228089..3bc3f2c99df4 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/OzoneRepair.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/OzoneRepair.java @@ -19,8 +19,10 @@ package org.apache.hadoop.ozone.repair; import com.google.common.annotations.VisibleForTesting; +import org.apache.hadoop.hdds.cli.ExtensibleParentCommand; import org.apache.hadoop.hdds.cli.GenericCli; import org.apache.hadoop.hdds.cli.HddsVersionProvider; +import org.apache.hadoop.hdds.cli.RepairSubcommand; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import picocli.CommandLine; @@ -34,7 +36,7 @@ description = "Operational tool to repair Ozone", versionProvider = HddsVersionProvider.class, mixinStandardHelpOptions = true) -public class OzoneRepair extends GenericCli { +public class OzoneRepair extends GenericCli implements ExtensibleParentCommand { public static final String WARNING_SYS_USER_MESSAGE = "ATTENTION: Running as user %s. Make sure this is the same user used to run the Ozone process." + @@ -91,4 +93,8 @@ public String getConsoleReadLineWithFormat(String currentUser) { return (new Scanner(System.in, StandardCharsets.UTF_8.name())).nextLine().trim(); } + @Override + public Class subcommandType() { + return RepairSubcommand.class; + } } diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/RecoverSCMCertificate.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/RecoverSCMCertificate.java index aca41844a181..e6462aa3f855 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/RecoverSCMCertificate.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/RecoverSCMCertificate.java @@ -17,7 +17,7 @@ */ package org.apache.hadoop.ozone.repair; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; +import org.apache.hadoop.hdds.cli.RepairSubcommand; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.security.SecurityConfig; import org.apache.hadoop.hdds.security.x509.certificate.authority.CAType; @@ -67,8 +67,8 @@ @CommandLine.Command( name = "cert-recover", description = "Recover Deleted SCM Certificate from RocksDB") -@MetaInfServices(SubcommandWithParent.class) -public class RecoverSCMCertificate implements Callable, SubcommandWithParent { +@MetaInfServices(RepairSubcommand.class) +public class RecoverSCMCertificate implements Callable, RepairSubcommand { @CommandLine.Option(names = {"--db"}, required = true, @@ -81,11 +81,6 @@ public class RecoverSCMCertificate implements Callable, SubcommandWithPare @CommandLine.Spec private CommandLine.Model.CommandSpec spec; - @Override - public Class getParentType() { - return OzoneRepair.class; - } - private PrintWriter err() { return spec.commandLine().getErr(); } diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/ldb/RDBRepair.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/ldb/RDBRepair.java index fcf7201978d6..01ad705b201c 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/ldb/RDBRepair.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/ldb/RDBRepair.java @@ -19,8 +19,7 @@ package org.apache.hadoop.ozone.repair.ldb; import org.apache.hadoop.hdds.cli.GenericCli; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; -import org.apache.hadoop.ozone.repair.OzoneRepair; +import org.apache.hadoop.hdds.cli.RepairSubcommand; import org.kohsuke.MetaInfServices; import picocli.CommandLine; @@ -30,9 +29,13 @@ * Ozone Repair CLI for RocksDB. */ @CommandLine.Command(name = "ldb", + subcommands = { + SnapshotRepair.class, + TransactionInfoRepair.class, + }, description = "Operational tool to repair RocksDB table.") -@MetaInfServices(SubcommandWithParent.class) -public class RDBRepair implements Callable, SubcommandWithParent { +@MetaInfServices(RepairSubcommand.class) +public class RDBRepair implements Callable, RepairSubcommand { @CommandLine.Spec private CommandLine.Model.CommandSpec spec; @@ -51,9 +54,4 @@ public Void call() { GenericCli.missingSubcommand(spec); return null; } - - @Override - public Class getParentType() { - return OzoneRepair.class; - } } diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/ldb/SnapshotRepair.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/ldb/SnapshotRepair.java index f746e99fe783..45c10f5668b0 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/ldb/SnapshotRepair.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/ldb/SnapshotRepair.java @@ -18,7 +18,6 @@ package org.apache.hadoop.ozone.repair.ldb; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; import org.apache.hadoop.hdds.utils.IOUtils; import org.apache.hadoop.hdds.utils.db.StringCodec; import org.apache.hadoop.hdds.utils.db.managed.ManagedRocksDB; @@ -26,7 +25,6 @@ import org.apache.hadoop.ozone.debug.RocksDBUtils; import org.apache.hadoop.ozone.om.helpers.SnapshotInfo; import org.apache.hadoop.ozone.shell.bucket.BucketUri; -import org.kohsuke.MetaInfServices; import org.rocksdb.ColumnFamilyDescriptor; import org.rocksdb.ColumnFamilyHandle; import org.rocksdb.RocksDBException; @@ -54,8 +52,7 @@ name = "snapshot", description = "CLI to update global and path previous snapshot for a snapshot in case snapshot chain is corrupted." ) -@MetaInfServices(SubcommandWithParent.class) -public class SnapshotRepair implements Callable, SubcommandWithParent { +public class SnapshotRepair implements Callable { protected static final Logger LOG = LoggerFactory.getLogger(SnapshotRepair.class); @@ -177,9 +174,4 @@ private Set getSnapshotIdSet(ManagedRocksDB db, ColumnFamilyHandle snapsho } return snapshotIdSet; } - - @Override - public Class getParentType() { - return RDBRepair.class; - } } diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/ldb/TransactionInfoRepair.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/ldb/TransactionInfoRepair.java index 369ae3d9a617..277a27882471 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/ldb/TransactionInfoRepair.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/ldb/TransactionInfoRepair.java @@ -22,13 +22,11 @@ package org.apache.hadoop.ozone.repair.ldb; import org.apache.hadoop.hdds.cli.HddsVersionProvider; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; import org.apache.hadoop.hdds.utils.IOUtils; import org.apache.hadoop.hdds.utils.TransactionInfo; import org.apache.hadoop.hdds.utils.db.StringCodec; import org.apache.hadoop.hdds.utils.db.managed.ManagedRocksDB; import org.apache.hadoop.ozone.debug.RocksDBUtils; -import org.kohsuke.MetaInfServices; import org.rocksdb.ColumnFamilyDescriptor; import org.rocksdb.ColumnFamilyHandle; import org.rocksdb.RocksDBException; @@ -42,7 +40,6 @@ import static org.apache.hadoop.ozone.OzoneConsts.TRANSACTION_INFO_KEY; import static org.apache.hadoop.ozone.om.OmMetadataManagerImpl.TRANSACTION_INFO_TABLE; - /** * Tool to update the highest term-index in transactionInfoTable. */ @@ -52,9 +49,7 @@ mixinStandardHelpOptions = true, versionProvider = HddsVersionProvider.class ) -@MetaInfServices(SubcommandWithParent.class) -public class TransactionInfoRepair - implements Callable, SubcommandWithParent { +public class TransactionInfoRepair implements Callable { @CommandLine.Spec private static CommandLine.Model.CommandSpec spec; @@ -127,9 +122,4 @@ protected RDBRepair getParent() { return parent; } - @Override - public Class getParentType() { - return RDBRepair.class; - } - } diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/quota/QuotaRepair.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/quota/QuotaRepair.java index 5f21b739c818..6ead713e1485 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/quota/QuotaRepair.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/quota/QuotaRepair.java @@ -22,7 +22,7 @@ import java.util.Collection; import java.util.concurrent.Callable; import org.apache.hadoop.hdds.cli.GenericCli; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; +import org.apache.hadoop.hdds.cli.RepairSubcommand; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ipc.ProtobufRpcEngine; import org.apache.hadoop.ipc.RPC; @@ -45,9 +45,13 @@ * Ozone Repair CLI for quota. */ @CommandLine.Command(name = "quota", + subcommands = { + QuotaStatus.class, + QuotaTrigger.class, + }, description = "Operational tool to repair quota in OM DB.") -@MetaInfServices(SubcommandWithParent.class) -public class QuotaRepair implements Callable, SubcommandWithParent { +@MetaInfServices(RepairSubcommand.class) +public class QuotaRepair implements Callable, RepairSubcommand { @CommandLine.Spec private CommandLine.Model.CommandSpec spec; @@ -113,9 +117,4 @@ public UserGroupInformation getUser() throws IOException { protected OzoneRepair getParent() { return parent; } - - @Override - public Class getParentType() { - return OzoneRepair.class; - } } diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/quota/QuotaStatus.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/quota/QuotaStatus.java index a78d248e055c..820ac6f8eaf4 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/quota/QuotaStatus.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/quota/QuotaStatus.java @@ -23,12 +23,9 @@ import java.util.concurrent.Callable; import org.apache.hadoop.hdds.cli.HddsVersionProvider; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; import org.apache.hadoop.ozone.om.protocol.OzoneManagerProtocol; -import org.kohsuke.MetaInfServices; import picocli.CommandLine; - /** * Tool to get status of last triggered quota repair. */ @@ -38,8 +35,7 @@ mixinStandardHelpOptions = true, versionProvider = HddsVersionProvider.class ) -@MetaInfServices(SubcommandWithParent.class) -public class QuotaStatus implements Callable, SubcommandWithParent { +public class QuotaStatus implements Callable { @CommandLine.Spec private static CommandLine.Model.CommandSpec spec; @@ -72,9 +68,4 @@ public Void call() throws Exception { protected QuotaRepair getParent() { return parent; } - - @Override - public Class getParentType() { - return QuotaRepair.class; - } } diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/quota/QuotaTrigger.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/quota/QuotaTrigger.java index 19ad92340c06..04d78f05dc62 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/quota/QuotaTrigger.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/repair/quota/QuotaTrigger.java @@ -27,9 +27,7 @@ import java.util.concurrent.Callable; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.hdds.cli.HddsVersionProvider; -import org.apache.hadoop.hdds.cli.SubcommandWithParent; import org.apache.hadoop.ozone.om.protocol.OzoneManagerProtocol; -import org.kohsuke.MetaInfServices; import picocli.CommandLine; /** @@ -41,8 +39,7 @@ mixinStandardHelpOptions = true, versionProvider = HddsVersionProvider.class ) -@MetaInfServices(SubcommandWithParent.class) -public class QuotaTrigger implements Callable, SubcommandWithParent { +public class QuotaTrigger implements Callable { @CommandLine.Spec private static CommandLine.Model.CommandSpec spec; @@ -92,9 +89,4 @@ protected QuotaRepair getParent() { return parent; } - @Override - public Class getParentType() { - return QuotaRepair.class; - } - } From a9048ce11d5a0064f4c941ba74200c44bbb43858 Mon Sep 17 00:00:00 2001 From: "Doroszlai, Attila" Date: Wed, 4 Dec 2024 05:01:07 +0100 Subject: [PATCH 2/2] fix tests --- .../org/apache/hadoop/ozone/debug/TestLDBCli.java | 3 --- .../hadoop/ozone/shell/TestOzoneDebugShell.java | 2 -- .../hadoop/ozone/shell/TestOzoneRepairShell.java | 14 ++++---------- 3 files changed, 4 insertions(+), 15 deletions(-) diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/debug/TestLDBCli.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/debug/TestLDBCli.java index 56a814da1f2e..aac55367adc8 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/debug/TestLDBCli.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/debug/TestLDBCli.java @@ -38,7 +38,6 @@ import org.apache.hadoop.ozone.container.metadata.DatanodeSchemaThreeDBDefinition; import org.apache.hadoop.ozone.debug.ldb.DBScanner; import org.apache.hadoop.ozone.debug.ldb.RDBParser; -import org.apache.hadoop.ozone.debug.ldb.ValueSchema; import org.apache.hadoop.ozone.om.helpers.OmKeyInfo; import org.apache.hadoop.ozone.om.request.OMRequestTestUtils; import jakarta.annotation.Nonnull; @@ -103,8 +102,6 @@ public void setup() throws IOException { pstderr = new PrintWriter(stderr); cmd = new CommandLine(new RDBParser()) - .addSubcommand(new DBScanner()) - .addSubcommand(new ValueSchema()) .setOut(pstdout) .setErr(pstderr); diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneDebugShell.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneDebugShell.java index f4f980e340dc..f4026ed98cbb 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneDebugShell.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneDebugShell.java @@ -36,7 +36,6 @@ import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.hadoop.ozone.client.OzoneClientFactory; import org.apache.hadoop.ozone.client.OzoneSnapshot; -import org.apache.hadoop.ozone.debug.ldb.DBScanner; import org.apache.hadoop.ozone.debug.OzoneDebug; import org.apache.hadoop.ozone.debug.ldb.RDBParser; import org.apache.hadoop.ozone.om.OMConfigKeys; @@ -149,7 +148,6 @@ public void testLdbCliForOzoneSnapshot() throws Exception { StringWriter stdout = new StringWriter(); PrintWriter pstdout = new PrintWriter(stdout); CommandLine cmd = new CommandLine(new RDBParser()) - .addSubcommand(new DBScanner()) .setOut(pstdout); final String volumeName = UUID.randomUUID().toString(); final String bucketName = UUID.randomUUID().toString(); diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneRepairShell.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneRepairShell.java index 1860d695f5e7..e770a36c7375 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneRepairShell.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneRepairShell.java @@ -19,15 +19,10 @@ import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.MiniOzoneCluster; -import org.apache.hadoop.ozone.debug.ldb.DBScanner; import org.apache.hadoop.ozone.debug.ldb.RDBParser; import org.apache.hadoop.ozone.om.OMStorage; import org.apache.hadoop.ozone.repair.OzoneRepair; import org.apache.hadoop.ozone.repair.ldb.RDBRepair; -import org.apache.hadoop.ozone.repair.ldb.TransactionInfoRepair; -import org.apache.hadoop.ozone.repair.quota.QuotaRepair; -import org.apache.hadoop.ozone.repair.quota.QuotaStatus; -import org.apache.hadoop.ozone.repair.quota.QuotaTrigger; import org.apache.ozone.test.GenericTestUtils; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; @@ -89,7 +84,7 @@ public void reset() { @Test public void testUpdateTransactionInfoTable() throws Exception { - CommandLine cmd = new CommandLine(new RDBRepair()).addSubcommand(new TransactionInfoRepair()); + CommandLine cmd = new CommandLine(new RDBRepair()); String dbPath = new File(OMStorage.getOmDbDir(conf) + "/" + OM_DB_NAME).getPath(); cluster.getOzoneManager().stop(); @@ -120,7 +115,7 @@ public void testUpdateTransactionInfoTable() throws Exception { } private String scanTransactionInfoTable(String dbPath) throws Exception { - CommandLine cmdDBScanner = new CommandLine(new RDBParser()).addSubcommand(new DBScanner()); + CommandLine cmdDBScanner = new CommandLine(new RDBParser()); String[] argsDBScanner = new String[] {"--db=" + dbPath, "scan", "--column_family", "transactionInfoTable"}; cmdDBScanner.execute(argsDBScanner); @@ -138,12 +133,11 @@ private String[] parseScanOutput(String output) throws IOException { @Test public void testQuotaRepair() throws Exception { - CommandLine cmd = new CommandLine(new OzoneRepair()).addSubcommand(new CommandLine(new QuotaRepair()) - .addSubcommand(new QuotaStatus()).addSubcommand(new QuotaTrigger())); + CommandLine cmd = new OzoneRepair().getCmd(); String[] args = new String[] {"quota", "status", "--service-host", conf.get(OZONE_OM_ADDRESS_KEY)}; int exitCode = cmd.execute(args); - assertEquals(0, exitCode); + assertEquals(0, exitCode, err::toString); args = new String[] {"quota", "start", "--service-host", conf.get(OZONE_OM_ADDRESS_KEY)}; exitCode = cmd.execute(args); assertEquals(0, exitCode);