Repository: ambari Updated Branches: refs/heads/branch-2.1 466833dc9 -> 8bc1a98a5 refs/heads/trunk 99de0edb7 -> 1cd72bddd
AMBARI-13490. If there are more than one ambari-server*jar in classpath we should fail to start (aonishuk) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/1cd72bdd Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/1cd72bdd Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/1cd72bdd Branch: refs/heads/trunk Commit: 1cd72bddd362dbc8916759ef4f0e5b7b5531b0bd Parents: 99de0ed Author: Andrew Onishuk <aonis...@hortonworks.com> Authored: Tue Oct 20 17:19:54 2015 +0300 Committer: Andrew Onishuk <aonis...@hortonworks.com> Committed: Tue Oct 20 17:19:54 2015 +0300 ---------------------------------------------------------------------- .../ambari/server/controller/AmbariServer.java | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/1cd72bdd/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java index 8f3869f..5bc0962 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java @@ -20,10 +20,13 @@ package org.apache.ambari.server.controller; import java.io.File; +import java.io.IOException; import java.net.Authenticator; import java.net.BindException; import java.net.PasswordAuthentication; +import java.net.URL; import java.util.EnumSet; +import java.util.Enumeration; import java.util.Map; import javax.crypto.BadPaddingException; @@ -150,6 +153,29 @@ public class AmbariServer { static { Velocity.setProperty("runtime.log.logsystem.log4j.logger", VELOCITY_LOG_CATEGORY); } + + private static final String CLASSPATH_CHECK_CLASS = "org/apache/ambari/server/controller/AmbariServer.class"; + private static final String CLASSPATH_SANITY_CHECK_FAILURE_MESSAGE = "%s class is found in multiple jar files. Possible reasons include multiple ambari server jar files in the ambari classpath.\n" + + "Check for additional ambari server jar files and check that /usr/lib/ambari-server/ambari-server*.jar matches only one file."; + + static { + Enumeration<URL> ambariServerClassUrls; + try { + ambariServerClassUrls = AmbariServer.class.getClassLoader().getResources(CLASSPATH_CHECK_CLASS); + + int ambariServerClassUrlsSize = 0; + while(ambariServerClassUrls.hasMoreElements()){ + ambariServerClassUrlsSize++; + URL url = ambariServerClassUrls.nextElement(); + LOG.info(String.format("Found %s class in %s", CLASSPATH_CHECK_CLASS, url.getPath())); + } + if(ambariServerClassUrlsSize>1) { + throw new RuntimeException(String.format(CLASSPATH_SANITY_CHECK_FAILURE_MESSAGE, CLASSPATH_CHECK_CLASS)); + } + } catch (IOException e) { + e.printStackTrace(); + } + } private Server server = null;