You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by vi...@apache.org on 2013/04/30 00:18:02 UTC

svn commit: r1477380 - in /accumulo/branches/1.5/start/src/main/java/org/apache/accumulo/start/classloader/vfs: AccumuloReloadingVFSClassLoader.java AccumuloVFSClassLoader.java

Author: vines
Date: Mon Apr 29 22:18:02 2013
New Revision: 1477380

URL: http://svn.apache.org/r1477380
Log:
ACCUMULO-1321 - temporary fix. This will create a new vfs classloader in place, but it leaves cruft


Modified:
    accumulo/branches/1.5/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloReloadingVFSClassLoader.java
    accumulo/branches/1.5/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java

Modified: accumulo/branches/1.5/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloReloadingVFSClassLoader.java
URL: http://svn.apache.org/viewvc/accumulo/branches/1.5/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloReloadingVFSClassLoader.java?rev=1477380&r1=1477379&r2=1477380&view=diff
==============================================================================
--- accumulo/branches/1.5/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloReloadingVFSClassLoader.java (original)
+++ accumulo/branches/1.5/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloReloadingVFSClassLoader.java Mon Apr 29 22:18:02 2013
@@ -38,7 +38,7 @@ public class AccumuloReloadingVFSClassLo
   private static final Logger log = Logger.getLogger(AccumuloReloadingVFSClassLoader.class);
 
   /* 5 minute timeout */
-  private static final int DEFAULT_TIMEOUT = 300000;
+  private static final int DEFAULT_TIMEOUT = 1000;
   
   private String uris;
   private FileObject[] files;
@@ -47,13 +47,28 @@ public class AccumuloReloadingVFSClassLo
   private DefaultFileMonitor monitor = null;
   private VFSClassLoader cl = null;
   private boolean preDelegate;
+  public String stringify(FileObject[] files) {
+    StringBuilder sb = new StringBuilder();
+    sb.append('[');
+    String delim = "";
+    for (FileObject file : files) {
+      sb.append(delim);
+      delim = ", ";
+      sb.append(file.getName());
+    }
+    sb.append(']');
+    return sb.toString();
+  }
 
   @Override
   public synchronized ClassLoader getClassLoader() {
     if (cl == null || cl.getParent() != parent.getClassLoader()) {
       try {
+        vfs = AccumuloVFSClassLoader.generateVfs(true);
         files = AccumuloVFSClassLoader.resolve(vfs, uris);
-        
+
+        log.debug("Rebuilding dynamic classloader using files- " + stringify(files));
+
         if (preDelegate)
           cl = new VFSClassLoader(files, vfs, parent.getClassLoader());
         else

Modified: accumulo/branches/1.5/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java
URL: http://svn.apache.org/viewvc/accumulo/branches/1.5/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java?rev=1477380&r1=1477379&r2=1477380&view=diff
==============================================================================
--- accumulo/branches/1.5/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java (original)
+++ accumulo/branches/1.5/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java Mon Apr 29 22:18:02 2013
@@ -59,12 +59,12 @@ import org.apache.log4j.Logger;
 public class AccumuloVFSClassLoader {
   
   public static class AccumuloVFSClassLoaderShutdownThread implements Runnable {
-
+    
     public void run() {
       try {
-	AccumuloVFSClassLoader.close();
+        AccumuloVFSClassLoader.close();
       } catch (Exception e) {
-	  //do nothing, we are shutting down anyway
+        // do nothing, we are shutting down anyway
       }
     }
     
@@ -73,7 +73,7 @@ public class AccumuloVFSClassLoader {
   public static final String DYNAMIC_CLASSPATH_PROPERTY_NAME = "general.dynamic.classpaths";
   
   public static final String DEFAULT_DYNAMIC_CLASSPATH_VALUE = "$ACCUMULO_HOME/lib/ext/[^.].*.jar\n";
-
+  
   public static final String VFS_CLASSLOADER_SYSTEM_CLASSPATH_PROPERTY = "general.vfs.classpaths";
   
   public static final String VFS_CONTEXT_CLASSPATH_PROPERTY = "general.vfs.context.classpath.";
@@ -84,14 +84,14 @@ public class AccumuloVFSClassLoader {
   private static ClassLoader parent = null;
   private static volatile ReloadingClassLoader loader = null;
   private static final Object lock = new Object();
-
+  
   private static ContextManager contextManager;
-
+  
   private static Logger log = Logger.getLogger(AccumuloVFSClassLoader.class);
   
   static {
     // Register the shutdown hook
-    Runtime.getRuntime().addShutdownHook(new Thread(new AccumuloVFSClassLoaderShutdownThread()));      
+    Runtime.getRuntime().addShutdownHook(new Thread(new AccumuloVFSClassLoaderShutdownThread()));
   }
   
   public synchronized static <U> Class<? extends U> loadClass(String classname, Class<U> extension) throws ClassNotFoundException {
@@ -105,28 +105,28 @@ public class AccumuloVFSClassLoader {
   public static Class<?> loadClass(String classname) throws ClassNotFoundException {
     return loadClass(classname, Object.class).asSubclass(Object.class);
   }
-
+  
   static FileObject[] resolve(FileSystemManager vfs, String uris) throws FileSystemException {
     return resolve(vfs, uris, new ArrayList<FileObject>());
   }
-
+  
   static FileObject[] resolve(FileSystemManager vfs, String uris, ArrayList<FileObject> pathsToMonitor) throws FileSystemException {
     if (uris == null)
       return new FileObject[0];
-
+    
     ArrayList<FileObject> classpath = new ArrayList<FileObject>();
-
+    
     pathsToMonitor.clear();
-
+    
     for (String path : uris.split(",")) {
       
       path = path.trim();
-
+      
       if (path.equals(""))
         continue;
-
+      
       path = AccumuloClassLoader.replaceEnvVars(path, System.getenv());
-
+      
       FileObject fo = vfs.resolveFile(path);
       
       switch (fo.getType()) {
@@ -161,10 +161,10 @@ public class AccumuloVFSClassLoader {
       }
       
     }
-
+    
     return classpath.toArray(new FileObject[classpath.size()]);
   }
-
+  
   private static ReloadingClassLoader createDynamicClassloader(final ClassLoader parent) throws FileSystemException, IOException {
     String dynamicCPath = AccumuloClassLoader.getAccumuloString(DYNAMIC_CLASSPATH_PROPERTY_NAME, DEFAULT_DYNAMIC_CLASSPATH_VALUE);
     
@@ -181,14 +181,14 @@ public class AccumuloVFSClassLoader {
         return parent;
       }
     };
-
+    
     if (dynamicCPath == null || dynamicCPath.equals(""))
       return wrapper;
-
+    
     // TODO monitor time for lib/ext was 1 sec... should this be configurable? - ACCUMULO-1301
     return new AccumuloReloadingVFSClassLoader(dynamicCPath, vfs, wrapper, 1000, true);
   }
-
+  
   public static ClassLoader getClassLoader() throws IOException {
     ReloadingClassLoader localLoader = loader;
     while (null == localLoader) {
@@ -196,47 +196,7 @@ public class AccumuloVFSClassLoader {
         if (null == loader) {
           
           if (null == vfs) {
-            vfs = new DefaultFileSystemManager();
-            vfs.addProvider("res", new org.apache.commons.vfs2.provider.res.ResourceFileProvider());
-            vfs.addProvider("zip", new org.apache.commons.vfs2.provider.zip.ZipFileProvider());
-            vfs.addProvider("gz", new org.apache.commons.vfs2.provider.gzip.GzipFileProvider());
-            vfs.addProvider("ram", new org.apache.commons.vfs2.provider.ram.RamFileProvider());
-            vfs.addProvider("file", new org.apache.commons.vfs2.provider.local.DefaultLocalFileProvider());
-            vfs.addProvider("jar", new org.apache.commons.vfs2.provider.jar.JarFileProvider());
-            vfs.addProvider("http", new org.apache.commons.vfs2.provider.http.HttpFileProvider());
-            vfs.addProvider("https", new org.apache.commons.vfs2.provider.https.HttpsFileProvider());
-            vfs.addProvider("ftp", new org.apache.commons.vfs2.provider.ftp.FtpFileProvider());
-            vfs.addProvider("ftps", new org.apache.commons.vfs2.provider.ftps.FtpsFileProvider());
-            vfs.addProvider("war", new org.apache.commons.vfs2.provider.jar.JarFileProvider());
-            vfs.addProvider("par", new org.apache.commons.vfs2.provider.jar.JarFileProvider());
-            vfs.addProvider("ear", new org.apache.commons.vfs2.provider.jar.JarFileProvider());
-            vfs.addProvider("sar", new org.apache.commons.vfs2.provider.jar.JarFileProvider());
-            vfs.addProvider("ejb3", new org.apache.commons.vfs2.provider.jar.JarFileProvider());
-            vfs.addProvider("tmp", new org.apache.commons.vfs2.provider.temp.TemporaryFileProvider());
-            vfs.addProvider("tar", new org.apache.commons.vfs2.provider.tar.TarFileProvider());
-            vfs.addProvider("tbz2", new org.apache.commons.vfs2.provider.tar.TarFileProvider());
-            vfs.addProvider("tgz", new org.apache.commons.vfs2.provider.tar.TarFileProvider());
-            vfs.addProvider("bz2", new org.apache.commons.vfs2.provider.bzip2.Bzip2FileProvider());
-            vfs.addProvider("hdfs", new HdfsFileProvider());
-            vfs.addExtensionMap("jar", "jar");
-            vfs.addExtensionMap("zip", "zip");
-            vfs.addExtensionMap("gz", "gz");
-            vfs.addExtensionMap("tar", "tar");
-            vfs.addExtensionMap("tbz2", "tar");
-            vfs.addExtensionMap("tgz", "tar");
-            vfs.addExtensionMap("bz2", "bz2");
-            vfs.addMimeTypeMap("application/x-tar", "tar");
-            vfs.addMimeTypeMap("application/x-gzip", "gz");
-            vfs.addMimeTypeMap("application/zip", "zip");
-            vfs.setFileContentInfoFactory(new FileContentInfoFilenameFactory());
-            vfs.setFilesCache(new SoftRefFilesCache());
-            String cacheDirPath = AccumuloClassLoader.getAccumuloString(VFS_CACHE_DIR, "");
-            File cacheDir = new File(System.getProperty("java.io.tmpdir"), "accumulo-vfs-cache-" + System.getProperty("user.name", "nouser"));
-            if (!("".equals(cacheDirPath)))
-              cacheDir = new File(cacheDirPath);
-            vfs.setReplicator(new DefaultFileReplicator(cacheDir));
-            vfs.setCacheStrategy(CacheStrategy.ON_RESOLVE);
-            vfs.init();
+            vfs = generateVfs(false);
           }
           
           // Set up the 2nd tier class loader
@@ -252,15 +212,61 @@ public class AccumuloVFSClassLoader {
             return localLoader.getClassLoader();
           }
           
-          //Create the Accumulo Context ClassLoader using the DEFAULT_CONTEXT
-          localLoader = createDynamicClassloader(new VFSClassLoader(vfsCP, vfs, parent));
+          // Create the Accumulo Context ClassLoader using the DEFAULT_CONTEXT
+          localLoader = createDynamicClassloader(new VFSClassLoader(vfsCP, generateVfs(true), parent));
           loader = localLoader;
         }
       }
     }
-
+    
     return localLoader.getClassLoader();
   }
+  
+  public static DefaultFileSystemManager generateVfs(boolean reloading) throws FileSystemException {
+    DefaultFileSystemManager vfs = new DefaultFileSystemManager();
+    vfs.addProvider("res", new org.apache.commons.vfs2.provider.res.ResourceFileProvider());
+    vfs.addProvider("zip", new org.apache.commons.vfs2.provider.zip.ZipFileProvider());
+    vfs.addProvider("gz", new org.apache.commons.vfs2.provider.gzip.GzipFileProvider());
+    vfs.addProvider("ram", new org.apache.commons.vfs2.provider.ram.RamFileProvider());
+    vfs.addProvider("file", new org.apache.commons.vfs2.provider.local.DefaultLocalFileProvider());
+    vfs.addProvider("jar", new org.apache.commons.vfs2.provider.jar.JarFileProvider());
+    vfs.addProvider("http", new org.apache.commons.vfs2.provider.http.HttpFileProvider());
+    vfs.addProvider("https", new org.apache.commons.vfs2.provider.https.HttpsFileProvider());
+    vfs.addProvider("ftp", new org.apache.commons.vfs2.provider.ftp.FtpFileProvider());
+    vfs.addProvider("ftps", new org.apache.commons.vfs2.provider.ftps.FtpsFileProvider());
+    vfs.addProvider("war", new org.apache.commons.vfs2.provider.jar.JarFileProvider());
+    vfs.addProvider("par", new org.apache.commons.vfs2.provider.jar.JarFileProvider());
+    vfs.addProvider("ear", new org.apache.commons.vfs2.provider.jar.JarFileProvider());
+    vfs.addProvider("sar", new org.apache.commons.vfs2.provider.jar.JarFileProvider());
+    vfs.addProvider("ejb3", new org.apache.commons.vfs2.provider.jar.JarFileProvider());
+    vfs.addProvider("tmp", new org.apache.commons.vfs2.provider.temp.TemporaryFileProvider());
+    vfs.addProvider("tar", new org.apache.commons.vfs2.provider.tar.TarFileProvider());
+    vfs.addProvider("tbz2", new org.apache.commons.vfs2.provider.tar.TarFileProvider());
+    vfs.addProvider("tgz", new org.apache.commons.vfs2.provider.tar.TarFileProvider());
+    vfs.addProvider("bz2", new org.apache.commons.vfs2.provider.bzip2.Bzip2FileProvider());
+    vfs.addProvider("hdfs", new HdfsFileProvider());
+    vfs.addExtensionMap("jar", "jar");
+    vfs.addExtensionMap("zip", "zip");
+    vfs.addExtensionMap("gz", "gz");
+    vfs.addExtensionMap("tar", "tar");
+    vfs.addExtensionMap("tbz2", "tar");
+    vfs.addExtensionMap("tgz", "tar");
+    vfs.addExtensionMap("bz2", "bz2");
+    vfs.addMimeTypeMap("application/x-tar", "tar");
+    vfs.addMimeTypeMap("application/x-gzip", "gz");
+    vfs.addMimeTypeMap("application/zip", "zip");
+    vfs.setFileContentInfoFactory(new FileContentInfoFilenameFactory());
+    vfs.setFilesCache(new SoftRefFilesCache());
+    String cacheDirPath = AccumuloClassLoader.getAccumuloString(VFS_CACHE_DIR, "");
+    File cacheDir = new File(System.getProperty("java.io.tmpdir"), (reloading? "accumulo-vfs-reloading-cache":"accumulo-vfs-cache-") + System.getProperty("user.name", "nouser"));
+    if (!("".equals(cacheDirPath)))
+      cacheDir = new File(cacheDirPath);
+    vfs.setReplicator(new DefaultFileReplicator(cacheDir));
+    vfs.setCacheStrategy(CacheStrategy.ON_RESOLVE);
+    vfs.init();
+    return vfs;
+  }
+  
   public interface Printer {
     void print(String s);
   }
@@ -268,11 +274,12 @@ public class AccumuloVFSClassLoader {
   public static void printClassPath() {
     printClassPath(new Printer() {
       @Override
-      public void print(String s) { 
+      public void print(String s) {
         System.out.println(s);
       }
     });
   }
+  
   public static void printClassPath(Printer out) {
     try {
       ClassLoader cl = getClassLoader();
@@ -296,11 +303,11 @@ public class AccumuloVFSClassLoader {
           // If VFS class loader enabled, but no contexts defined.
           URLClassLoader ucl = (URLClassLoader) classLoader;
           out.print("Level " + level + " URL classpath items are:");
-
-            for (URL u : ucl.getURLs()) {
-              out.print("\t" + u.toExternalForm());
-            }
-
+          
+          for (URL u : ucl.getURLs()) {
+            out.print("\t" + u.toExternalForm());
+          }
+          
         } else if (classLoader instanceof VFSClassLoader) {
           out.print("Level " + level + " VFS classpaths items are:");
           VFSClassLoader vcl = (VFSClassLoader) classLoader;
@@ -316,7 +323,6 @@ public class AccumuloVFSClassLoader {
       throw new RuntimeException(t);
     }
   }
-
   
   public static synchronized ContextManager getContextManager() throws IOException {
     if (contextManager == null) {
@@ -332,10 +338,10 @@ public class AccumuloVFSClassLoader {
         }
       });
     }
-
+    
     return contextManager;
   }
-
+  
   public static void close() {
     if (null != vfs)
       vfs.close();