Repository: hadoop Updated Branches: refs/heads/trunk 53047f934 -> 8b336632a
YARN-6771. Use classloader inside configuration class to make new classes. Contributed by Jongyoul Lee. Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/8b336632 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/8b336632 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/8b336632 Branch: refs/heads/trunk Commit: 8b336632acad10e45d029596c5e3196e1857d891 Parents: 53047f9 Author: Sangjin Lee <sj...@apache.org> Authored: Wed Sep 20 22:22:43 2017 -0700 Committer: Sangjin Lee <sj...@apache.org> Committed: Wed Sep 20 22:22:43 2017 -0700 ---------------------------------------------------------------------- .../impl/pb/RpcClientFactoryPBImpl.java | 3 +- .../impl/pb/RpcServerFactoryPBImpl.java | 5 +- .../impl/pb/TestRpcClientFactoryPBImpl.java | 49 ++++++++++++++++++++ .../impl/pb/TestRpcServerFactoryPBImpl.java | 48 +++++++++++++++++++ 4 files changed, 100 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/8b336632/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/factories/impl/pb/RpcClientFactoryPBImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/factories/impl/pb/RpcClientFactoryPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/factories/impl/pb/RpcClientFactoryPBImpl.java index 062fa66..07c5e23 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/factories/impl/pb/RpcClientFactoryPBImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/factories/impl/pb/RpcClientFactoryPBImpl.java @@ -45,7 +45,6 @@ public class RpcClientFactoryPBImpl implements RpcClientFactory { private static final String PB_IMPL_CLASS_SUFFIX = "PBClientImpl"; private static final RpcClientFactoryPBImpl self = new RpcClientFactoryPBImpl(); - private Configuration localConf = new Configuration(); private ConcurrentMap<Class<?>, Constructor<?>> cache = new ConcurrentHashMap<Class<?>, Constructor<?>>(); public static RpcClientFactoryPBImpl get() { @@ -62,7 +61,7 @@ public class RpcClientFactoryPBImpl implements RpcClientFactory { if (constructor == null) { Class<?> pbClazz = null; try { - pbClazz = localConf.getClassByName(getPBImplClassName(protocol)); + pbClazz = conf.getClassByName(getPBImplClassName(protocol)); } catch (ClassNotFoundException e) { throw new YarnRuntimeException("Failed to load class: [" + getPBImplClassName(protocol) + "]", e); http://git-wip-us.apache.org/repos/asf/hadoop/blob/8b336632/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/factories/impl/pb/RpcServerFactoryPBImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/factories/impl/pb/RpcServerFactoryPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/factories/impl/pb/RpcServerFactoryPBImpl.java index 60e549a..ec9a5f2 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/factories/impl/pb/RpcServerFactoryPBImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/factories/impl/pb/RpcServerFactoryPBImpl.java @@ -51,7 +51,6 @@ public class RpcServerFactoryPBImpl implements RpcServerFactory { private static final RpcServerFactoryPBImpl self = new RpcServerFactoryPBImpl(); - private Configuration localConf = new Configuration(); private ConcurrentMap<Class<?>, Constructor<?>> serviceCache = new ConcurrentHashMap<Class<?>, Constructor<?>>(); private ConcurrentMap<Class<?>, Method> protoCache = new ConcurrentHashMap<Class<?>, Method>(); @@ -80,7 +79,7 @@ public class RpcServerFactoryPBImpl implements RpcServerFactory { if (constructor == null) { Class<?> pbServiceImplClazz = null; try { - pbServiceImplClazz = localConf + pbServiceImplClazz = conf .getClassByName(getPbServiceImplClassName(protocol)); } catch (ClassNotFoundException e) { throw new YarnRuntimeException("Failed to load class: [" @@ -113,7 +112,7 @@ public class RpcServerFactoryPBImpl implements RpcServerFactory { if (method == null) { Class<?> protoClazz = null; try { - protoClazz = localConf.getClassByName(getProtoClassName(protocol)); + protoClazz = conf.getClassByName(getProtoClassName(protocol)); } catch (ClassNotFoundException e) { throw new YarnRuntimeException("Failed to load class: [" + getProtoClassName(protocol) + "]", e); http://git-wip-us.apache.org/repos/asf/hadoop/blob/8b336632/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/factories/impl/pb/TestRpcClientFactoryPBImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/factories/impl/pb/TestRpcClientFactoryPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/factories/impl/pb/TestRpcClientFactoryPBImpl.java new file mode 100644 index 0000000..41febd3 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/factories/impl/pb/TestRpcClientFactoryPBImpl.java @@ -0,0 +1,49 @@ +/** + * 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.factories.impl.pb; + +import org.apache.hadoop.conf.Configuration; +import org.junit.Test; + +import java.net.InetSocketAddress; + +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +/** + * Test class for RpcClientFactoryPBImpl. + */ +public class TestRpcClientFactoryPBImpl { + @Test + public void testToUseCustomClassloader() throws Exception { + Configuration configuration = mock(Configuration.class); + RpcClientFactoryPBImpl rpcClientFactoryPB = RpcClientFactoryPBImpl.get(); + try { + rpcClientFactoryPB.getClient( + Class.forName("org.apache.hadoop.yarn.api.ApplicationClientProtocol"), + -1, new InetSocketAddress(0), configuration); + } catch (Exception e) { + // Do nothing + } + verify(configuration, atLeastOnce()).getClassByName(anyString()); + } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/8b336632/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/factories/impl/pb/TestRpcServerFactoryPBImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/factories/impl/pb/TestRpcServerFactoryPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/factories/impl/pb/TestRpcServerFactoryPBImpl.java new file mode 100644 index 0000000..6a5ce84 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/factories/impl/pb/TestRpcServerFactoryPBImpl.java @@ -0,0 +1,48 @@ +/** + * 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.factories.impl.pb; + +import org.apache.hadoop.conf.Configuration; +import org.junit.Test; + +import java.net.InetSocketAddress; + +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +/** + * Test class for RpcServerFactoryPBImpl. + */ +public class TestRpcServerFactoryPBImpl { + @Test + public void testToUseCustomClassloader() throws Exception { + Configuration configuration = mock(Configuration.class); + RpcServerFactoryPBImpl rpcServerFactoryPB = RpcServerFactoryPBImpl.get(); + try { + rpcServerFactoryPB.getServer( + Class.forName("org.apache.hadoop.yarn.api.ApplicationClientProtocol"), + -1, new InetSocketAddress(0), configuration, null, 1); + } catch (Exception e) { + // Do nothing + } + verify(configuration, atLeastOnce()).getClassByName(anyString()); + } +} \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org