This is an automated email from the ASF dual-hosted git repository. aengineer pushed a commit to branch HDDS-1880-Decom in repository https://gitbox.apache.org/repos/asf/hadoop-ozone.git
commit 9aa228255873a169ebcb896408157a23a1950863 Merge: 4f58c81 eb1d77e Author: Anu Engineer <aengin...@apache.org> AuthorDate: Fri Oct 25 10:32:00 2019 -0700 Merge branch 'master' into HDDS-1880-Decom Some tests are failing: org.apache.hadoop.hdds.scm.block.TestBlockManager org.apache.hadoop.ozone.om.ratis.TestOzoneManagerDoubleBufferWithOMResponse .github/pull_request_template.md | 18 +- .../hadoop/hdds/scm/client/HddsClientUtils.java | 5 +- .../scm/container/common/helpers/ExcludeList.java | 14 ++ .../hdds/scm/storage/ContainerProtocolCalls.java | 2 +- .../apache/hadoop/hdds/utils/BatchOperation.java | 22 +-- .../hadoop/hdds/utils/MetadataStoreBuilder.java | 59 +++--- .../org/apache/hadoop/hdds/utils/RocksDBStore.java | 11 +- .../hadoop/hdds/utils/db/DBStoreBuilder.java | 21 +- .../org/apache/hadoop/hdds/utils/db/RDBStore.java | 8 +- .../hadoop/hdds/utils/db/RocksDBConfiguration.java | 16 ++ .../apache/hadoop/ozone/audit/AuditMessage.java | 7 +- .../org/apache/hadoop/ozone/common/Checksum.java | 218 ++++++++++----------- .../apache/hadoop/ozone/common/ChecksumData.java | 4 +- .../ozone/container/common/helpers/BlockData.java | 5 + .../hadoop/ozone/audit/TestOzoneAuditLogger.java | 29 ++- .../apache/hadoop/ozone/common/TestChecksum.java | 6 +- .../server/ratis/ContainerStateMachine.java | 12 +- .../ozone/container/common/volume/HddsVolume.java | 8 + .../container/keyvalue/KeyValueContainer.java | 13 +- .../container/keyvalue/KeyValueContainerCheck.java | 3 +- .../ozone/container/keyvalue/KeyValueHandler.java | 9 +- .../container/keyvalue/helpers/SmallFileUtils.java | 4 +- .../ozoneimpl/ContainerMetadataScanner.java | 7 +- .../container/keyvalue/TestKeyValueContainer.java | 53 +++-- hadoop-hdds/pom.xml | 8 - .../hadoop/hdds/scm/block/BlockManagerImpl.java | 12 ++ .../hdds/scm/server/SCMBlockProtocolServer.java | 2 + .../hadoop/hdds/scm/block/TestBlockManager.java | 58 ++++-- .../client/io/BlockOutputStreamEntryPool.java | 1 + .../ozone/client/protocol/ClientProtocol.java | 8 + .../apache/hadoop/ozone/client/rpc/RpcClient.java | 19 ++ hadoop-ozone/common/src/main/bin/ozone | 9 +- .../hadoop/ozone/om/helpers/OmBucketInfo.java | 25 ++- .../hadoop/ozone/om/helpers/ServiceInfo.java | 32 ++- ...OzoneManagerProtocolClientSideTranslatorPB.java | 2 +- .../ozone/security/acl/IAccessAuthorizer.java | 2 +- .../src/main/proto/OzoneManagerProtocol.proto | 6 + .../main/shellprofile.d/hadoop-ozone-manager.sh} | 25 +-- hadoop-ozone/dev-support/checks/acceptance.sh | 2 +- hadoop-ozone/dist/pom.xml | 90 +++++++-- .../src/main/compose/ozoneperf/docker-compose.yaml | 2 +- .../prometheus => ozoneperf}/prometheus.yml | 10 + .../client/rpc/TestContainerStateMachine.java | 26 +-- .../rpc/TestContainerStateMachineFailures.java | 118 +++++++++++ .../ozone/container/ContainerTestHelper.java | 25 ++- .../org/apache/hadoop/ozone/om/TestOmAcls.java | 6 +- .../apache/hadoop/ozone/om/TestOzoneManagerHA.java | 135 +++++++++++++ .../security/acl/TestOzoneNativeAuthorizer.java | 23 ++- .../org/apache/hadoop/ozone/om/KeyManagerImpl.java | 37 ++-- .../hadoop/ozone/om/OmMetadataManagerImpl.java | 22 ++- .../org/apache/hadoop/ozone/om/OzoneManager.java | 49 +++++ .../ozone/om/ratis/OzoneManagerDoubleBuffer.java | 19 +- .../om/ratis/utils/OzoneManagerRatisUtils.java | 3 +- .../om/request/bucket/OMBucketCreateRequest.java | 5 +- .../om/request/bucket/OMBucketDeleteRequest.java | 2 +- .../request/bucket/OMBucketSetPropertyRequest.java | 5 +- .../om/request/bucket/acl/OMBucketAclRequest.java | 3 +- .../om/request/file/OMDirectoryCreateRequest.java | 22 +-- .../ozone/om/request/file/OMFileCreateRequest.java | 16 +- .../om/request/key/OMAllocateBlockRequest.java | 4 +- .../ozone/om/request/key/OMKeyCommitRequest.java | 17 +- .../ozone/om/request/key/OMKeyCreateRequest.java | 5 +- .../ozone/om/request/key/OMKeyDeleteRequest.java | 16 +- .../ozone/om/request/key/OMKeyRenameRequest.java | 16 +- .../hadoop/ozone/om/request/key/OMKeyRequest.java | 39 +++- .../OzoneManagerHARequestHandlerImpl.java | 61 +----- ...OzoneManagerProtocolServerSideTranslatorPB.java | 21 +- .../ozone/security/acl/OzoneNativeAuthorizer.java | 52 +++-- .../request/file/TestOMDirectoryCreateRequest.java | 73 ++++++- .../om/request/file/TestOMFileCreateRequest.java | 21 ++ .../om/request/key/TestOMKeyDeleteRequest.java | 26 ++- .../om/request/key/TestOMKeyRenameRequest.java | 28 ++- .../ozone/om/request/key/TestOMKeyRequest.java | 1 + hadoop-ozone/pom.xml | 38 ++-- hadoop-ozone/tools/pom.xml | 5 - .../org/apache/hadoop/ozone/admin/OzoneAdmin.java | 68 +++++++ .../ozone/admin/om/GetServiceRolesSubcommand.java | 60 ++++++ .../org/apache/hadoop/ozone/admin/om/OMAdmin.java | 63 ++++++ .../apache/hadoop/ozone/admin/om/package-info.java | 24 +++ .../apache/hadoop/ozone/admin/package-info.java | 24 +++ .../hadoop/ozone/freon/BaseFreonGenerator.java | 11 +- .../hadoop/ozone/freon/RandomKeyGenerator.java | 12 +- pom.xml | 15 +- 83 files changed, 1572 insertions(+), 511 deletions(-) diff --cc hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/protocol/ClientProtocol.java index 1b8f5bb,1b8f5bb..3773915 --- a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/protocol/ClientProtocol.java +++ b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/protocol/ClientProtocol.java @@@ -42,6 -42,6 +42,7 @@@ import java.util.Map import org.apache.hadoop.ozone.om.helpers.OzoneFileStatus; import org.apache.hadoop.ozone.om.helpers.S3SecretValue; ++import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRoleInfo; import org.apache.hadoop.ozone.security.OzoneTokenIdentifier; import org.apache.hadoop.ozone.security.acl.OzoneObj; import org.apache.hadoop.security.KerberosInfo; @@@ -59,6 -59,6 +60,13 @@@ import org.apache.hadoop.security.token public interface ClientProtocol { /** ++ * List of OM node Ids and their Ratis server roles. ++ * @return List of OM server roles ++ * @throws IOException ++ */ ++ List<OMRoleInfo> getOmRoleInfos() throws IOException; ++ ++ /** * Creates a new Volume. * @param volumeName Name of the Volume * @throws IOException diff --cc hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java index 06351ab,06351ab..a9d221b --- a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java +++ b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java @@@ -64,6 -64,6 +64,7 @@@ import org.apache.hadoop.ozone.om.helpe import org.apache.hadoop.ozone.om.helpers.OzoneAclUtil; import org.apache.hadoop.ozone.om.helpers.OzoneFileStatus; import org.apache.hadoop.ozone.om.helpers.S3SecretValue; ++import org.apache.hadoop.ozone.om.helpers.ServiceInfo; import org.apache.hadoop.ozone.om.helpers.ServiceInfoEx; import org.apache.hadoop.ozone.om.protocol.OzoneManagerProtocol; import org.apache.hadoop.ozone.om.protocolPB @@@ -72,6 -72,6 +73,7 @@@ import org.apache.hadoop.ozone.OzoneAcl import org.apache.hadoop.hdds.protocol.proto.HddsProtos; import org.apache.hadoop.hdds.scm.ScmConfigKeys; import org.apache.hadoop.hdds.scm.XceiverClientManager; ++import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRoleInfo; import org.apache.hadoop.ozone.security.GDPRSymmetricKey; import org.apache.hadoop.ozone.security.OzoneTokenIdentifier; import org.apache.hadoop.ozone.security.acl.IAccessAuthorizer.ACLIdentityType; @@@ -224,6 -224,6 +226,23 @@@ public class RpcClient implements Clien } @Override ++ public List<OMRoleInfo> getOmRoleInfos() throws IOException { ++ ++ List<ServiceInfo> serviceList = ozoneManagerClient.getServiceList(); ++ List<OMRoleInfo> roleInfos = new ArrayList<>(); ++ ++ for (ServiceInfo serviceInfo : serviceList) { ++ if (serviceInfo.getNodeType().equals(HddsProtos.NodeType.OM)) { ++ OMRoleInfo omRoleInfo = serviceInfo.getOmRoleInfo(); ++ if (omRoleInfo != null) { ++ roleInfos.add(omRoleInfo); ++ } ++ } ++ } ++ return roleInfos; ++ } ++ ++ @Override public void createVolume(String volumeName) throws IOException { createVolume(volumeName, VolumeArgs.newBuilder().build()); } diff --cc hadoop-ozone/common/src/main/bin/ozone index cd8f202,9c13b94..987e118 --- a/hadoop-ozone/common/src/main/bin/ozone +++ b/hadoop-ozone/common/src/main/bin/ozone @@@ -55,6 -55,6 +55,7 @@@ function hadoop_usag hadoop_add_subcommand "version" client "print the version" hadoop_add_subcommand "dtutil" client "operations related to delegation tokens" hadoop_add_subcommand "upgrade" client "HDFS to Ozone in-place upgrade tool" ++ hadoop_add_subcommand "admin" client "Ozone admin tool" hadoop_generate_usage "${HADOOP_SHELL_EXECNAME}" false } @@@ -207,6 -207,6 +208,10 @@@ function ozonecmd_cas HADOOP_CLASSNAME=org.apache.hadoop.ozone.upgrade.InPlaceUpgrade OZONE_RUN_ARTIFACT_NAME="hadoop-ozone-upgrade" ;; ++ admin) ++ HADOOP_CLASSNAME=org.apache.hadoop.ozone.admin.OzoneAdmin ++ OZONE_RUN_ARTIFACT_NAME="hadoop-ozone-tools" ++ ;; *) HADOOP_CLASSNAME="${subcmd}" if ! hadoop_validate_classname "${HADOOP_CLASSNAME}"; then diff --cc hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/ServiceInfo.java index dce4f8e,dce4f8e..e569db8 --- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/ServiceInfo.java +++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/ServiceInfo.java @@@ -26,6 -26,6 +26,8 @@@ import com.fasterxml.jackson.databind.O import com.google.common.base.Preconditions; import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos; import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos ++ .OMRoleInfo; ++import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos .ServicePort; import org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeType; @@@ -58,6 -58,6 +60,8 @@@ public final class ServiceInfo * List of ports the service listens to. */ private Map<ServicePort.Type, Integer> ports; ++ ++ private OMRoleInfo omRoleInfo; /** * Default constructor for JSON deserialization. @@@ -70,8 -70,8 +74,8 @@@ * @param hostname hostname of the service * @param portList list of ports the service listens to */ -- private ServiceInfo( -- NodeType nodeType, String hostname, List<ServicePort> portList) { ++ private ServiceInfo(NodeType nodeType, String hostname, ++ List<ServicePort> portList, OMRoleInfo omRole) { Preconditions.checkNotNull(nodeType); Preconditions.checkNotNull(hostname); this.nodeType = nodeType; @@@ -80,6 -80,6 +84,7 @@@ for (ServicePort port : portList) { ports.put(port.getType(), port.getValue()); } ++ this.omRoleInfo = omRole; } /** @@@ -129,6 -129,6 +134,15 @@@ } /** ++ * Returns the OM role info - node id and ratis server role. ++ * @return OmRoleInfo ++ */ ++ @JsonIgnore ++ public OMRoleInfo getOmRoleInfo() { ++ return omRoleInfo; ++ } ++ ++ /** * Converts {@link ServiceInfo} to OzoneManagerProtocolProtos.ServiceInfo. * * @return OzoneManagerProtocolProtos.ServiceInfo @@@ -147,6 -147,6 +161,9 @@@ .setType(entry.getKey()) .setValue(entry.getValue()).build()) .collect(Collectors.toList())); ++ if (nodeType == NodeType.OM && omRoleInfo != null) { ++ builder.setOmRole(omRoleInfo); ++ } return builder.build(); } @@@ -160,7 -160,7 +177,8 @@@ OzoneManagerProtocolProtos.ServiceInfo serviceInfo) { return new ServiceInfo(serviceInfo.getNodeType(), serviceInfo.getHostname(), -- serviceInfo.getServicePortsList()); ++ serviceInfo.getServicePortsList(), ++ serviceInfo.hasOmRole() ? serviceInfo.getOmRole() : null); } /** @@@ -179,7 -179,7 +197,7 @@@ private NodeType node; private String host; private List<ServicePort> portList = new ArrayList<>(); -- ++ private OMRoleInfo omRoleInfo; /** * Sets the node/service type. @@@ -211,13 -211,13 +229,17 @@@ return this; } ++ public Builder setOmRoleInfo(OMRoleInfo omRole) { ++ omRoleInfo = omRole; ++ return this; ++ } /** * Builds and returns {@link ServiceInfo} with the set values. * @return {@link ServiceInfo} */ public ServiceInfo build() { -- return new ServiceInfo(node, host, portList); ++ return new ServiceInfo(node, host, portList, omRoleInfo); } } diff --cc hadoop-ozone/common/src/main/proto/OzoneManagerProtocol.proto index d82fdf2,d82fdf2..b9ccdeb --- a/hadoop-ozone/common/src/main/proto/OzoneManagerProtocol.proto +++ b/hadoop-ozone/common/src/main/proto/OzoneManagerProtocol.proto @@@ -903,10 -903,10 +903,16 @@@ message ServicePort required uint32 value = 2; } ++message OMRoleInfo { ++ required string nodeId = 1; ++ required string serverRole = 2; ++} ++ message ServiceInfo { required hadoop.hdds.NodeType nodeType = 1; required string hostname = 2; repeated ServicePort servicePorts = 3; ++ optional OMRoleInfo omRole = 4; } message S3CreateBucketRequest { diff --cc hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index 902fe6a,294b74e..fbda8c8 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@@ -86,6 -86,6 +86,7 @@@ import org.apache.hadoop.ozone.protocol import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.DBUpdatesRequest; import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos .KeyArgs; ++import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRoleInfo; import org.apache.hadoop.ozone.protocolPB.ProtocolMessageMetrics; import org.apache.hadoop.ozone.security.OzoneSecurityException; import org.apache.hadoop.ozone.security.OzoneTokenIdentifier; @@@ -154,6 -154,6 +155,7 @@@ import org.apache.hadoop.hdds.utils.db. import org.apache.hadoop.hdds.utils.db.DBCheckpoint; import org.apache.hadoop.hdds.utils.db.DBStore; ++import org.apache.ratis.proto.RaftProtos.RaftPeerRole; import org.apache.ratis.server.protocol.TermIndex; import org.apache.ratis.util.FileUtils; import org.apache.ratis.util.LifeCycle; @@@ -2381,6 -2384,6 +2386,43 @@@ public final class OzoneManager extend .setValue(httpServer.getHttpsAddress().getPort()) .build()); } ++ ++ // Since this OM is processing the request, we can assume it to be the ++ // leader OM ++ ++ OMRoleInfo omRole = OMRoleInfo.newBuilder() ++ .setNodeId(getOMNodeId()) ++ .setServerRole(RaftPeerRole.LEADER.name()) ++ .build(); ++ omServiceInfoBuilder.setOmRoleInfo(omRole); ++ ++ if (isRatisEnabled) { ++ if (omRatisServer != null) { ++ omServiceInfoBuilder.addServicePort(ServicePort.newBuilder() ++ .setType(ServicePort.Type.RATIS) ++ .setValue(omNodeDetails.getRatisPort()) ++ .build()); ++ } ++ ++ for (OMNodeDetails peerNode : peerNodes) { ++ ServiceInfo.Builder peerOmServiceInfoBuilder = ServiceInfo.newBuilder() ++ .setNodeType(HddsProtos.NodeType.OM) ++ .setHostname(peerNode.getAddress().getHostName()) ++ .addServicePort(ServicePort.newBuilder() ++ .setType(ServicePort.Type.RPC) ++ .setValue(peerNode.getRpcPort()) ++ .build()); ++ ++ OMRoleInfo peerOmRole = OMRoleInfo.newBuilder() ++ .setNodeId(peerNode.getOMNodeId()) ++ .setServerRole(RaftPeerRole.FOLLOWER.name()) ++ .build(); ++ peerOmServiceInfoBuilder.setOmRoleInfo(peerOmRole); ++ ++ services.add(peerOmServiceInfoBuilder.build()); ++ } ++ } ++ services.add(omServiceInfoBuilder.build()); // For client we have to return SCM with container protocol port, diff --cc hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/OzoneAdmin.java index 0000000,0000000..27ef698 new file mode 100644 --- /dev/null +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/OzoneAdmin.java @@@ -1,0 -1,0 +1,68 @@@ ++/** ++ * 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 ++ * <p> ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * <p> ++ * 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.ozone.admin; ++ ++import org.apache.hadoop.hdds.cli.GenericCli; ++import org.apache.hadoop.hdds.cli.HddsVersionProvider; ++import org.apache.hadoop.hdds.conf.OzoneConfiguration; ++import org.apache.hadoop.ozone.admin.om.OMAdmin; ++import org.apache.hadoop.util.NativeCodeLoader; ++import org.apache.log4j.ConsoleAppender; ++import org.apache.log4j.Level; ++import org.apache.log4j.LogManager; ++import org.apache.log4j.Logger; ++import org.apache.log4j.PatternLayout; ++import picocli.CommandLine; ++ ++/** ++ * Ozone Admin Command line tool. ++ */ ++@CommandLine.Command(name = "ozone admin", ++ hidden = true, ++ description = "Developer tools for Ozone Admin operations", ++ versionProvider = HddsVersionProvider.class, ++ subcommands = { ++ OMAdmin.class ++ }, ++ mixinStandardHelpOptions = true) ++public class OzoneAdmin extends GenericCli { ++ private OzoneConfiguration ozoneConf; ++ ++ public OzoneConfiguration getOzoneConf() { ++ if (ozoneConf == null) { ++ ozoneConf = createOzoneConfiguration(); ++ } ++ return ozoneConf; ++ } ++ ++ /** ++ * Main for the Ozone Admin shell Command handling. ++ * ++ * @param argv - System Args Strings[] ++ * @throws Exception ++ */ ++ public static void main(String[] argv) throws Exception { ++ LogManager.resetConfiguration(); ++ Logger.getRootLogger().setLevel(Level.INFO); ++ Logger.getRootLogger() ++ .addAppender(new ConsoleAppender(new PatternLayout("%m%n"))); ++ Logger.getLogger(NativeCodeLoader.class).setLevel(Level.ERROR); ++ ++ new OzoneAdmin().run(argv); ++ } ++} diff --cc hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/om/GetServiceRolesSubcommand.java index 0000000,0000000..2984936 new file mode 100644 --- /dev/null +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/om/GetServiceRolesSubcommand.java @@@ -1,0 -1,0 +1,60 @@@ ++/* ++ * 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.ozone.admin.om; ++ ++import org.apache.hadoop.hdds.cli.HddsVersionProvider; ++import org.apache.hadoop.ozone.client.protocol.ClientProtocol; ++import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRoleInfo; ++import picocli.CommandLine; ++ ++import java.util.List; ++import java.util.concurrent.Callable; ++ ++/** ++ * Handler of om get-service-roles command. ++ */ ++@CommandLine.Command( ++ name = "getserviceroles", ++ description = "List all OMs and their respective Ratis server roles", ++ mixinStandardHelpOptions = true, ++ versionProvider = HddsVersionProvider.class) ++public class GetServiceRolesSubcommand implements Callable<Void> { ++ ++ @CommandLine.ParentCommand ++ private OMAdmin parent; ++ ++ @CommandLine.Option(names = {"-id", "--om-service-id"}, ++ description = "OM Service ID", ++ required = true) ++ private String omServiceId; ++ ++ @Override ++ public Void call() throws Exception { ++ ClientProtocol client = parent.createClient(omServiceId); ++ getOmServerRoles(client.getOmRoleInfos()); ++ return null; ++ } ++ ++ private void getOmServerRoles(List<OMRoleInfo> roleInfos) { ++ for (OMRoleInfo roleInfo : roleInfos) { ++ System.out.println( ++ roleInfo.getNodeId() + " : " + roleInfo.getServerRole()); ++ } ++ } ++} diff --cc hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/om/OMAdmin.java index 0000000,0000000..3a109ac new file mode 100644 --- /dev/null +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/om/OMAdmin.java @@@ -1,0 -1,0 +1,63 @@@ ++/** ++ * 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 ++ * <p> ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * <p> ++ * 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.ozone.admin.om; ++ ++import org.apache.hadoop.hdds.cli.GenericCli; ++import org.apache.hadoop.hdds.cli.HddsVersionProvider; ++import org.apache.hadoop.hdds.cli.MissingSubcommandException; ++import org.apache.hadoop.hdds.conf.OzoneConfiguration; ++import org.apache.hadoop.ozone.admin.OzoneAdmin; ++import org.apache.hadoop.ozone.client.OzoneClientFactory; ++import org.apache.hadoop.ozone.client.protocol.ClientProtocol; ++import picocli.CommandLine; ++ ++import java.io.IOException; ++ ++/** ++ * Subcommand for admin operations related to OM. ++ */ ++@CommandLine.Command( ++ name = "om", ++ description = "Ozone Manager specific admin operations", ++ mixinStandardHelpOptions = true, ++ versionProvider = HddsVersionProvider.class, ++ subcommands = { ++ GetServiceRolesSubcommand.class ++ }) ++public class OMAdmin extends GenericCli { ++ ++ @CommandLine.ParentCommand ++ private OzoneAdmin parent; ++ ++ public OzoneAdmin getParent() { ++ return parent; ++ } ++ ++ @Override ++ public Void call() throws Exception { ++ throw new MissingSubcommandException( ++ this.parent.getCmd().getSubcommands().get("om")); ++ } ++ ++ public ClientProtocol createClient(String omServiceId) throws IOException { ++ OzoneConfiguration conf = parent.getOzoneConf(); ++ return OzoneClientFactory.getRpcClient(omServiceId, conf).getObjectStore() ++ .getClientProxy(); ++ ++ } ++} diff --cc hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/om/package-info.java index 0000000,0000000..0fa52da new file mode 100644 --- /dev/null +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/om/package-info.java @@@ -1,0 -1,0 +1,24 @@@ ++/** ++ * 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 ++ * <p> ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * <p> ++ * 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. ++ * <p> ++ * SCM related cli tools. ++ */ ++ ++/** ++ * OM related Admin tools. ++ */ ++package org.apache.hadoop.ozone.admin.om; diff --cc hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/package-info.java index 0000000,0000000..3a30a38 new file mode 100644 --- /dev/null +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/package-info.java @@@ -1,0 -1,0 +1,24 @@@ ++/** ++ * 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 ++ * <p> ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * <p> ++ * 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. ++ * <p> ++ * SCM related cli tools. ++ */ ++ ++/** ++ * Ozone Admin tools. ++ */ ++package org.apache.hadoop.ozone.admin; --------------------------------------------------------------------- To unsubscribe, e-mail: hdfs-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: hdfs-commits-h...@hadoop.apache.org