From 2bb647bb91439e82cf7298e963bb5f7f80bbc3cb Mon Sep 17 00:00:00 2001 From: Weiwei Yang Date: Tue, 15 May 2018 17:28:19 +0800 Subject: [PATCH] YARN-8278. DistributedScheduling is not working in HA. Contributed by Bibin A Chundatt. --- .../hadoop/yarn/server/api/ServerRMProxy.java | 11 ++-- .../yarn/server/api/TestServerRMProxy.java | 52 +++++++++++++++++++ 2 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/server/api/TestServerRMProxy.java diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/api/ServerRMProxy.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/api/ServerRMProxy.java index cd92415a3f5..ee9956ffadd 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/api/ServerRMProxy.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/api/ServerRMProxy.java @@ -34,6 +34,11 @@ public class ServerRMProxy extends RMProxy { private static final Logger LOG = LoggerFactory.getLogger(ServerRMProxy.class); + private interface ServerRMProtocols + extends DistributedSchedulingAMProtocol, ResourceTracker { + //Add nothing + } + private ServerRMProxy() { super(); } @@ -95,8 +100,8 @@ public InetSocketAddress getRMAddress(YarnConfiguration conf, @InterfaceAudience.Private @Override public void checkAllowedProtocols(Class protocol) { - Preconditions.checkArgument( - protocol.isAssignableFrom(ResourceTracker.class), - "ResourceManager does not support this protocol"); + Preconditions + .checkArgument(protocol.isAssignableFrom(ServerRMProtocols.class), + "ResourceManager does not support this protocol"); } } \ No newline at end of file diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/server/api/TestServerRMProxy.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/server/api/TestServerRMProxy.java new file mode 100644 index 00000000000..e6202076f79 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/server/api/TestServerRMProxy.java @@ -0,0 +1,52 @@ +/** + * 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.yarn.server.api; + +import org.apache.hadoop.yarn.conf.HAUtil; +import org.apache.hadoop.yarn.conf.YarnConfiguration; +import org.junit.Assert; +import org.junit.Test; + +/** + * Test ServerRMProxy. + */ +public class TestServerRMProxy { + + @Test + public void testDistributedProtocol() { + + YarnConfiguration conf = new YarnConfiguration(); + try { + ServerRMProxy.createRMProxy(conf, DistributedSchedulingAMProtocol.class); + } catch (Exception e) { + Assert.fail("DistributedSchedulingAMProtocol fail in non HA"); + } + + // HA is enabled + conf.setBoolean(YarnConfiguration.RM_HA_ENABLED, true); + conf.set(YarnConfiguration.RM_HA_IDS, "rm1,rm2"); + conf.set(HAUtil.addSuffix(YarnConfiguration.RM_HOSTNAME, "rm1"), "0.0.0.0"); + conf.set(HAUtil.addSuffix(YarnConfiguration.RM_HOSTNAME, "rm2"), "0.0.0.0"); + try { + ServerRMProxy.createRMProxy(conf, DistributedSchedulingAMProtocol.class); + } catch (Exception e) { + Assert.fail("DistributedSchedulingAMProtocol fail in HA"); + } + } +}