You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cu...@apache.org on 2007/06/15 23:34:24 UTC

svn commit: r547793 - in /lucene/hadoop/trunk: CHANGES.txt src/java/org/apache/hadoop/filecache/DistributedCache.java

Author: cutting
Date: Fri Jun 15 14:34:23 2007
New Revision: 547793

URL: http://svn.apache.org/viewvc?view=rev&rev=547793
Log:
HADOOP-1234.  Fix a race condition in the file cache that caused tasktracker to not be able to find cached files.  Contributed by Arun.

Modified:
    lucene/hadoop/trunk/CHANGES.txt
    lucene/hadoop/trunk/src/java/org/apache/hadoop/filecache/DistributedCache.java

Modified: lucene/hadoop/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/CHANGES.txt?view=diff&rev=547793&r1=547792&r2=547793
==============================================================================
--- lucene/hadoop/trunk/CHANGES.txt (original)
+++ lucene/hadoop/trunk/CHANGES.txt Fri Jun 15 14:34:23 2007
@@ -133,6 +133,10 @@
  42. HADOOP-1472.  Fix so that timed-out tasks are counted as failures
      rather than as killed.  (Arun C Murthy via cutting)
 
+ 43. HADOOP-1234.  Fix a race condition in file cache that caused
+     tasktracker to not be able to find cached files.
+     (Arun C Murthy via cutting)
+
 
 Release 0.13.0 - 2007-06-08
 

Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/filecache/DistributedCache.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/filecache/DistributedCache.java?view=diff&rev=547793&r1=547792&r2=547793
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/filecache/DistributedCache.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/filecache/DistributedCache.java Fri Jun 15 14:34:23 2007
@@ -68,23 +68,23 @@
     CacheStatus lcacheStatus;
     Path localizedPath;
     synchronized (cachedArchives) {
-      if (!cachedArchives.containsKey(cacheId)) {
+      lcacheStatus = cachedArchives.get(cacheId);
+      if (lcacheStatus == null) {
         // was never localized
         lcacheStatus = new CacheStatus();
         lcacheStatus.currentStatus = false;
-        lcacheStatus.refcount = 1;
+        lcacheStatus.refcount = 0;
         lcacheStatus.localLoadPath = new Path(baseDir, new Path(cacheId));
         cachedArchives.put(cacheId, lcacheStatus);
-      } else {
-        lcacheStatus = (CacheStatus) cachedArchives.get(cacheId);
-        synchronized (lcacheStatus) {
-          lcacheStatus.refcount++;
-        }
+      }
+      
+      synchronized (lcacheStatus) {
+        localizedPath = localizeCache(cache, lcacheStatus, conf, isArchive, 
+                                      md5, currentWorkDir);
+        lcacheStatus.refcount++;
       }
     }
-    synchronized (lcacheStatus) {
-      localizedPath = localizeCache(cache, lcacheStatus, conf, isArchive, md5, currentWorkDir);
-    }
+
     // try deleting stuff if you can
     long size = FileUtil.getDU(new File(baseDir.toString()));
     // setting the cache size to a default of 1MB
@@ -125,10 +125,12 @@
       for (Iterator it = cachedArchives.keySet().iterator(); it.hasNext();) {
         String cacheId = (String) it.next();
         CacheStatus lcacheStatus = (CacheStatus) cachedArchives.get(cacheId);
-        if (lcacheStatus.refcount == 0) {
-          // delete this cache entry
-          FileSystem.getLocal(conf).delete(lcacheStatus.localLoadPath);
-          it.remove();
+        synchronized (lcacheStatus) {
+          if (lcacheStatus.refcount == 0) {
+            // delete this cache entry
+            FileSystem.getLocal(conf).delete(lcacheStatus.localLoadPath);
+            it.remove();
+          }
         }
       }
     }