You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by mw...@apache.org on 2019/02/09 16:02:06 UTC
[accumulo] branch master updated: Simplify how classpath is built
for MiniAccumuloCluster (#945)
This is an automated email from the ASF dual-hosted git repository.
mwalch pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/master by this push:
new 90d3b31 Simplify how classpath is built for MiniAccumuloCluster (#945)
90d3b31 is described below
commit 90d3b31bfde26df89608193bf6d54797c5dd6a5e
Author: Mike Walch <mw...@apache.org>
AuthorDate: Sat Feb 9 11:02:01 2019 -0500
Simplify how classpath is built for MiniAccumuloCluster (#945)
---
minicluster/pom.xml | 4 -
.../miniclusterImpl/MiniAccumuloClusterImpl.java | 102 ++++-----------------
2 files changed, 16 insertions(+), 90 deletions(-)
diff --git a/minicluster/pom.xml b/minicluster/pom.xml
index bf73807..a75010c 100644
--- a/minicluster/pom.xml
+++ b/minicluster/pom.xml
@@ -88,10 +88,6 @@
<artifactId>accumulo-tserver</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-vfs2</artifactId>
- </dependency>
- <dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client-api</artifactId>
</dependency>
diff --git a/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloClusterImpl.java b/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloClusterImpl.java
index e7bda12..339eeda 100644
--- a/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloClusterImpl.java
+++ b/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloClusterImpl.java
@@ -28,9 +28,6 @@ import java.io.UncheckedIOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.net.URLClassLoader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.ArrayList;
@@ -90,8 +87,6 @@ import org.apache.accumulo.server.zookeeper.ZooReaderWriterFactory;
import org.apache.accumulo.start.Main;
import org.apache.accumulo.start.classloader.vfs.MiniDFSUtil;
import org.apache.commons.io.IOUtils;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.impl.VFSClassLoader;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.CommonConfigurationKeys;
import org.apache.hadoop.fs.FileSystem;
@@ -156,91 +151,26 @@ public class MiniAccumuloClusterImpl implements AccumuloCluster {
return _exec(clazz, jvmArgs2, args);
}
- private boolean containsConfigFile(File f) {
- if (!f.isDirectory()) {
- return false;
- } else {
- File[] files = f.listFiles(pathname -> pathname.getName().endsWith("site.xml")
- || pathname.getName().equals("accumulo.properties"));
- return files != null && files.length > 0;
- }
- }
-
- @SuppressFBWarnings(value = "PATH_TRAVERSAL_IN",
- justification = "mini runs in the same security context as user providing the url")
- private void append(StringBuilder classpathBuilder, URL url) throws URISyntaxException {
- File file = new File(url.toURI());
- // do not include dirs containing hadoop or accumulo config files
- if (!containsConfigFile(file))
- classpathBuilder.append(File.pathSeparator).append(file.getAbsolutePath());
- }
-
- private String getClasspath() throws IOException {
-
- try {
- ArrayList<ClassLoader> classloaders = new ArrayList<>();
-
- ClassLoader cl = this.getClass().getClassLoader();
-
- while (cl != null) {
- classloaders.add(cl);
- cl = cl.getParent();
- }
-
- Collections.reverse(classloaders);
-
- StringBuilder classpathBuilder = new StringBuilder();
- classpathBuilder.append(config.getConfDir().getAbsolutePath());
-
- if (config.getHadoopConfDir() != null)
- classpathBuilder.append(File.pathSeparator)
- .append(config.getHadoopConfDir().getAbsolutePath());
-
- if (config.getClasspathItems() == null) {
+ private String getClasspath() {
+ StringBuilder classpathBuilder = new StringBuilder();
+ classpathBuilder.append(config.getConfDir().getAbsolutePath());
- // assume 0 is the system classloader and skip it
- for (int i = 1; i < classloaders.size(); i++) {
- ClassLoader classLoader = classloaders.get(i);
-
- if (classLoader instanceof URLClassLoader) {
-
- for (URL u : ((URLClassLoader) classLoader).getURLs()) {
- append(classpathBuilder, u);
- }
-
- } else if (classLoader instanceof VFSClassLoader) {
+ if (config.getHadoopConfDir() != null)
+ classpathBuilder.append(File.pathSeparator)
+ .append(config.getHadoopConfDir().getAbsolutePath());
- VFSClassLoader vcl = (VFSClassLoader) classLoader;
- for (FileObject f : vcl.getFileObjects()) {
- append(classpathBuilder, f.getURL());
- }
- } else {
- if (classLoader.getClass().getName()
- .equals("jdk.internal.loader.ClassLoaders$AppClassLoader")) {
- log.debug("Detected Java 11 classloader: {}", classLoader.getClass().getName());
- } else {
- log.debug("Detected unknown classloader: {}", classLoader.getClass().getName());
- }
- String javaClassPath = System.getProperty("java.class.path");
- if (javaClassPath == null) {
- throw new IllegalStateException("java.class.path is not set");
- } else {
- log.debug("Using classpath set by java.class.path system property: {}",
- javaClassPath);
- }
- classpathBuilder.append(File.pathSeparator).append(javaClassPath);
- }
- }
- } else {
- for (String s : config.getClasspathItems())
- classpathBuilder.append(File.pathSeparator).append(s);
+ if (config.getClasspathItems() == null) {
+ String javaClassPath = System.getProperty("java.class.path");
+ if (javaClassPath == null) {
+ throw new IllegalStateException("java.class.path is not set");
}
-
- return classpathBuilder.toString();
-
- } catch (URISyntaxException e) {
- throw new IOException(e);
+ classpathBuilder.append(File.pathSeparator).append(javaClassPath);
+ } else {
+ for (String s : config.getClasspathItems())
+ classpathBuilder.append(File.pathSeparator).append(s);
}
+
+ return classpathBuilder.toString();
}
public static class ProcessInfo {