You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by dl...@apache.org on 2013/02/13 02:14:03 UTC

svn commit: r1445447 - in /accumulo/trunk: core/src/main/java/org/apache/accumulo/core/conf/ start/src/main/java/org/apache/accumulo/start/classloader/ start/src/main/java/org/apache/accumulo/start/classloader/vfs/

Author: dlmarion
Date: Wed Feb 13 01:14:03 2013
New Revision: 1445447

URL: http://svn.apache.org/r1445447
Log:
ACCUMULO-868 - added new property, which defaults to /tmp/accumulo-vfs-cache, for specifying the vfs cache directory
ACCUMULO-1061 - re-added the shutdown hook


Modified:
    accumulo/trunk/core/src/main/java/org/apache/accumulo/core/conf/Property.java
    accumulo/trunk/start/src/main/java/org/apache/accumulo/start/classloader/AccumuloClassLoader.java
    accumulo/trunk/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java

Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/conf/Property.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/conf/Property.java?rev=1445447&r1=1445446&r2=1445447&view=diff
==============================================================================
--- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/conf/Property.java (original)
+++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/conf/Property.java Wed Feb 13 01:14:03 2013
@@ -16,6 +16,7 @@
  */
 package org.apache.accumulo.core.conf;
 
+import java.io.File;
 import java.util.EnumSet;
 import java.util.HashSet;
 import java.util.Set;
@@ -335,7 +336,14 @@ public enum Property {
           + "The value is a comma seperated list of URIs. Supports full regex on filename alone. For example general.vfs.context.classpath.cx1=hdfs://nn1:9902/mylibdir/*.jar.  "
           + "You can enable post delegation for a context, which will load classes from the context first instead of the parent first.  "
           + "Do this by setting general.vfs.context.classpath.<name>.delegation=post, where <name> is your context name.  "
-          + "If delegation is not specified, it defaults to loading from parent classloader first.");
+          + "If delegation is not specified, it defaults to loading from parent classloader first."),
+ VFS_CLASSLOADER_CACHE_DIR(
+	    AccumuloVFSClassLoader.VFS_CACHE_DIR,
+	    new File(System.getProperty("java.io.tmpdir"), "accumulo-vfs-cache")
+		    .getAbsolutePath(),
+	    PropertyType.ABSOLUTEPATH,
+	    "Directory to use for the vfs cache. The cache will keep a soft reference to all of the classes loaded in the VM. This should be on local disk on each node with sufficient space. It defaults to /tmp",
+	    false);
   
   private String key, defaultValue, description;
   private PropertyType type;

Modified: accumulo/trunk/start/src/main/java/org/apache/accumulo/start/classloader/AccumuloClassLoader.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/start/src/main/java/org/apache/accumulo/start/classloader/AccumuloClassLoader.java?rev=1445447&r1=1445446&r2=1445447&view=diff
==============================================================================
--- accumulo/trunk/start/src/main/java/org/apache/accumulo/start/classloader/AccumuloClassLoader.java (original)
+++ accumulo/trunk/start/src/main/java/org/apache/accumulo/start/classloader/AccumuloClassLoader.java Wed Feb 13 01:14:03 2013
@@ -62,10 +62,6 @@ public class AccumuloClassLoader {
     } else {
       SITE_CONF = null;
     }
-    
-    // Register the shutdown hook
-    // TODO
-    // Runtime.getRuntime().addShutdownHook(new Thread(new AccumuloVFSClassLoaderShutdownThread()));
   }
   
   /**

Modified: accumulo/trunk/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java?rev=1445447&r1=1445446&r2=1445447&view=diff
==============================================================================
--- accumulo/trunk/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java (original)
+++ accumulo/trunk/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java Wed Feb 13 01:14:03 2013
@@ -16,6 +16,7 @@
  */
 package org.apache.accumulo.start.classloader.vfs;
 
+import java.io.File;
 import java.io.IOException;
 import java.net.URL;
 import java.net.URLClassLoader;
@@ -29,7 +30,6 @@ import org.apache.commons.vfs2.FileObjec
 import org.apache.commons.vfs2.FileSystemException;
 import org.apache.commons.vfs2.FileSystemManager;
 import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.cache.DefaultFilesCache;
 import org.apache.commons.vfs2.cache.SoftRefFilesCache;
 import org.apache.commons.vfs2.impl.DefaultFileReplicator;
 import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
@@ -61,7 +61,11 @@ public class AccumuloVFSClassLoader {
   public static class AccumuloVFSClassLoaderShutdownThread implements Runnable {
 
     public void run() {
-      AccumuloVFSClassLoader.close();
+      try {
+	AccumuloVFSClassLoader.close();
+      } catch (Exception e) {
+	  //do nothing, we are shutting down anyway
+      }
     }
     
   }
@@ -74,6 +78,8 @@ public class AccumuloVFSClassLoader {
   
   public static final String VFS_CONTEXT_CLASSPATH_PROPERTY = "general.vfs.context.classpath.";
   
+  public static final String VFS_CACHE_DIR = "general.vfs.cache.dir";
+  
   private static DefaultFileSystemManager vfs = null;
   private static ClassLoader parent = null;
   private static volatile ReloadingClassLoader loader = null;
@@ -83,6 +89,11 @@ public class AccumuloVFSClassLoader {
 
   private static Logger log = Logger.getLogger(AccumuloVFSClassLoader.class);
   
+  static {
+    // Register the shutdown hook
+    Runtime.getRuntime().addShutdownHook(new Thread(new AccumuloVFSClassLoaderShutdownThread()));      
+  }
+  
   public synchronized static <U> Class<? extends U> loadClass(String classname, Class<U> extension) throws ClassNotFoundException {
     try {
       return (Class<? extends U>) getClassLoader().loadClass(classname).asSubclass(extension);
@@ -186,8 +197,6 @@ public class AccumuloVFSClassLoader {
           
           if (null == vfs) {
             vfs = new DefaultFileSystemManager();
-            //TODO: Might be able to use a different cache impl or specify cache directory in configuration.
-            vfs.setFilesCache(new DefaultFilesCache());
             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());
@@ -221,7 +230,11 @@ public class AccumuloVFSClassLoader {
             vfs.addMimeTypeMap("application/zip", "zip");
             vfs.setFileContentInfoFactory(new FileContentInfoFilenameFactory());
             vfs.setFilesCache(new SoftRefFilesCache());
-            vfs.setReplicator(new DefaultFileReplicator());
+            String cacheDirPath = AccumuloClassLoader.getAccumuloString(VFS_CACHE_DIR, "");
+            File cacheDir = new File(System.getProperty("java.io.tmpdir"), "accumulo-vfs-cache");
+            if (!("".equals(cacheDirPath)))
+        	cacheDir = new File(cacheDirPath);
+            vfs.setReplicator(new DefaultFileReplicator(cacheDir));
             vfs.setCacheStrategy(CacheStrategy.ON_RESOLVE);
             vfs.init();
           }