You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by el...@apache.org on 2014/01/11 01:15:32 UTC

[2/5] git commit: ACCUMULO-2174 Provide a better VFS tmpdir default that won't collide across processes

ACCUMULO-2174 Provide a better VFS tmpdir default that won't collide across processes


Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/db56d8d2
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/db56d8d2
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/db56d8d2

Branch: refs/heads/master
Commit: db56d8d21dc636e6d271ae4c710ed27196a24506
Parents: 56230eb
Author: Josh Elser <el...@apache.org>
Authored: Fri Jan 10 17:51:29 2014 -0500
Committer: Josh Elser <el...@apache.org>
Committed: Fri Jan 10 18:34:46 2014 -0500

----------------------------------------------------------------------
 .../classloader/vfs/AccumuloVFSClassLoader.java |  8 +++--
 .../classloader/vfs/UniqueFileReplicator.java   | 32 ++++++++++++--------
 2 files changed, 24 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/db56d8d2/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java
----------------------------------------------------------------------
diff --git a/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java b/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java
index eb653bc..90c6358 100644
--- a/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java
+++ b/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java
@@ -18,6 +18,7 @@ package org.apache.accumulo.start.classloader.vfs;
 
 import java.io.File;
 import java.io.IOException;
+import java.lang.management.ManagementFactory;
 import java.lang.ref.WeakReference;
 import java.net.URL;
 import java.net.URLClassLoader;
@@ -259,8 +260,9 @@ public class AccumuloVFSClassLoader {
     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)))
+    String procName = ManagementFactory.getRuntimeMXBean().getName();
+    File cacheDir = new File(System.getProperty("java.io.tmpdir"), "accumulo-vfs-cache-" + procName + "-" + System.getProperty("user.name", "nouser"));
+    if (!cacheDirPath.isEmpty())
       cacheDir = new File(cacheDirPath);
     vfs.setReplicator(new UniqueFileReplicator(cacheDir));
     vfs.setCacheStrategy(CacheStrategy.ON_RESOLVE);
@@ -364,7 +366,7 @@ public class AccumuloVFSClassLoader {
     
     return contextManager;
   }
-  
+
   public static void close() {
     for (WeakReference<DefaultFileSystemManager> vfsInstance : vfsInstances) {
       DefaultFileSystemManager ref = vfsInstance.get();

http://git-wip-us.apache.org/repos/asf/accumulo/blob/db56d8d2/start/src/main/java/org/apache/accumulo/start/classloader/vfs/UniqueFileReplicator.java
----------------------------------------------------------------------
diff --git a/start/src/main/java/org/apache/accumulo/start/classloader/vfs/UniqueFileReplicator.java b/start/src/main/java/org/apache/accumulo/start/classloader/vfs/UniqueFileReplicator.java
index cc19b6e..cdc5248 100644
--- a/start/src/main/java/org/apache/accumulo/start/classloader/vfs/UniqueFileReplicator.java
+++ b/start/src/main/java/org/apache/accumulo/start/classloader/vfs/UniqueFileReplicator.java
@@ -30,18 +30,20 @@ import org.apache.commons.vfs2.provider.FileReplicator;
 import org.apache.commons.vfs2.provider.UriParser;
 import org.apache.commons.vfs2.provider.VfsComponent;
 import org.apache.commons.vfs2.provider.VfsComponentContext;
+import org.apache.log4j.Logger;
 
 /**
  * 
  */
 public class UniqueFileReplicator implements VfsComponent, FileReplicator {
-  
+
   private static final char[] TMP_RESERVED_CHARS = new char[] {'?', '/', '\\', ' ', '&', '"', '\'', '*', '#', ';', ':', '<', '>', '|'};
+  private static final Logger log = Logger.getLogger(UniqueFileReplicator.class);
   
   private File tempDir;
   private VfsComponentContext context;
   private List<File> tmpFiles = Collections.synchronizedList(new ArrayList<File>());
-  
+
   public UniqueFileReplicator(File tempDir) {
     this.tempDir = tempDir;
   }
@@ -49,38 +51,38 @@ public class UniqueFileReplicator implements VfsComponent, FileReplicator {
   @Override
   public File replicateFile(FileObject srcFile, FileSelector selector) throws FileSystemException {
     String baseName = srcFile.getName().getBaseName();
-    
+
     try {
       tempDir.mkdirs();
       String safeBasename = UriParser.encode(baseName, TMP_RESERVED_CHARS).replace('%', '_');
       File file = File.createTempFile("vfsr_", "_" + safeBasename, tempDir);
       file.deleteOnExit();
-      
+
       final FileObject destFile = context.toFileObject(file);
       destFile.copyFrom(srcFile, selector);
-      
+
       return file;
     } catch (IOException e) {
       throw new FileSystemException(e);
     }
   }
-  
+
   @Override
   public void setLogger(Log logger) {
     // TODO Auto-generated method stub
-    
+
   }
-  
+
   @Override
   public void setContext(VfsComponentContext context) {
     this.context = context;
   }
-  
+
   @Override
   public void init() throws FileSystemException {
-    
+
   }
-  
+
   @Override
   public void close() {
     synchronized (tmpFiles) {
@@ -88,7 +90,11 @@ public class UniqueFileReplicator implements VfsComponent, FileReplicator {
         tmpFile.delete();
       }
     }
-    
-    tempDir.delete();
+
+    if (tempDir.exists()) {
+      int numChildren = tempDir.list().length;
+      if (0 == numChildren && !tempDir.delete())
+        log.warn("Cannot delete empty directory: " + tempDir);
+    }
   }
 }