You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2011/06/08 23:00:55 UTC

svn commit: r1133555 - in /lucene/dev/branches/branch_3x: ./ lucene/ lucene/backwards/ lucene/contrib/ lucene/contrib/misc/src/java/org/apache/lucene/store/ lucene/contrib/misc/src/test/org/apache/lucene/store/ solr/

Author: mikemccand
Date: Wed Jun  8 21:00:54 2011
New Revision: 1133555

URL: http://svn.apache.org/viewvc?rev=1133555&view=rev
Log:
LUCENE-3185: fix a couple issues with NRTCachingDir

Modified:
    lucene/dev/branches/branch_3x/   (props changed)
    lucene/dev/branches/branch_3x/lucene/   (props changed)
    lucene/dev/branches/branch_3x/lucene/backwards/   (props changed)
    lucene/dev/branches/branch_3x/lucene/contrib/CHANGES.txt
    lucene/dev/branches/branch_3x/lucene/contrib/misc/src/java/org/apache/lucene/store/NRTCachingDirectory.java
    lucene/dev/branches/branch_3x/lucene/contrib/misc/src/test/org/apache/lucene/store/TestNRTCachingDirectory.java
    lucene/dev/branches/branch_3x/solr/   (props changed)

Modified: lucene/dev/branches/branch_3x/lucene/contrib/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/contrib/CHANGES.txt?rev=1133555&r1=1133554&r2=1133555&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/contrib/CHANGES.txt (original)
+++ lucene/dev/branches/branch_3x/lucene/contrib/CHANGES.txt Wed Jun  8 21:00:54 2011
@@ -29,6 +29,12 @@ API Changes
    First/SecondPassGroupingCollector.  (Martijn van Groningen, Mike
    McCandless)
 
+Bug Fixes
+
+  * LUCENE-3185: Fix bug in NRTCachingDirectory.deleteFile that would
+    always throw exception and sometimes fail to actually delete the
+    file.  (Mike McCandless)
+
 Build
 
  * LUCENE-3149: Upgrade contrib/icu's ICU jar file to ICU 4.8. 

Modified: lucene/dev/branches/branch_3x/lucene/contrib/misc/src/java/org/apache/lucene/store/NRTCachingDirectory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/contrib/misc/src/java/org/apache/lucene/store/NRTCachingDirectory.java?rev=1133555&r1=1133554&r2=1133555&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/contrib/misc/src/java/org/apache/lucene/store/NRTCachingDirectory.java (original)
+++ lucene/dev/branches/branch_3x/lucene/contrib/misc/src/java/org/apache/lucene/store/NRTCachingDirectory.java Wed Jun  8 21:00:54 2011
@@ -89,10 +89,10 @@ public class NRTCachingDirectory extends
   private final long maxCachedBytes;
 
   private static final boolean VERBOSE = false;
-  
+
   /**
    *  We will cache a newly created output if 1) it's a
-   *  flush or a merge and the estimated size of the merged segmnt is <=
+   *  flush or a merge and the estimated size of the merged segment is <=
    *  maxMergeSizeMB, and 2) the total cached bytes is <=
    *  maxCachedMB */
   public NRTCachingDirectory(Directory delegate, double maxMergeSizeMB, double maxCachedMB) {
@@ -102,13 +102,45 @@ public class NRTCachingDirectory extends
   }
 
   @Override
+  public LockFactory getLockFactory() {
+    return delegate.getLockFactory();
+  }
+
+  @Override
+  public void setLockFactory(LockFactory lf) throws IOException {
+    delegate.setLockFactory(lf);
+  }
+
+  @Override
+  public String getLockID() {
+    return delegate.getLockID();
+  }
+
+  @Override
+  public Lock makeLock(String name) {
+    return delegate.makeLock(name);
+  }
+
+  @Override
+  public void clearLock(String name) throws IOException {
+    delegate.clearLock(name);
+  }
+
+  @Override
+  public String toString() {
+    return "NRTCachingDirectory(" + delegate + "; maxCacheMB=" + (maxCachedBytes/1024/1024.) + " maxMergeSizeMB=" + (maxMergeSizeBytes/1024/1024.) + ")";
+  }
+
+  @Override
   public synchronized String[] listAll() throws IOException {
     final Set<String> files = new HashSet<String>();
     for(String f : cache.listAll()) {
       files.add(f);
     }
     for(String f : delegate.listAll()) {
-      assert !files.contains(f);
+      // Cannot do this -- if lucene calls createOutput but
+      // file already exists then this falsely trips:
+      //assert !files.contains(f): "file \"" + f + "\" is in both dirs";
       files.add(f);
     }
     return files.toArray(new String[files.size()]);
@@ -148,12 +180,15 @@ public class NRTCachingDirectory extends
 
   @Override
   public synchronized void deleteFile(String name) throws IOException {
-    // Delete from both, in case we are currently uncaching:
     if (VERBOSE) {
       System.out.println("nrtdir.deleteFile name=" + name);
     }
-    cache.deleteFile(name);
-    delegate.deleteFile(name);
+    if (cache.fileExists(name)) {
+      assert !delegate.fileExists(name);
+      cache.deleteFile(name);
+    } else {
+      delegate.deleteFile(name);
+    }
   }
 
   @Override
@@ -219,16 +254,6 @@ public class NRTCachingDirectory extends
     }
   }
 
-  @Override
-  public Lock makeLock(String name) {
-    return delegate.makeLock(name);
-  }
-
-  @Override
-  public void clearLock(String name) throws IOException {
-    delegate.clearLock(name);
-  }
-
   /** Close thius directory, which flushes any cached files
    *  to the delegate and then closes the delegate. */
   @Override

Modified: lucene/dev/branches/branch_3x/lucene/contrib/misc/src/test/org/apache/lucene/store/TestNRTCachingDirectory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/contrib/misc/src/test/org/apache/lucene/store/TestNRTCachingDirectory.java?rev=1133555&r1=1133554&r2=1133555&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/contrib/misc/src/test/org/apache/lucene/store/TestNRTCachingDirectory.java (original)
+++ lucene/dev/branches/branch_3x/lucene/contrib/misc/src/test/org/apache/lucene/store/TestNRTCachingDirectory.java Wed Jun  8 21:00:54 2011
@@ -110,4 +110,12 @@ public class TestNRTCachingDirectory ext
     conf.setMergeScheduler(cachedFSDir.getMergeScheduler());
     IndexWriter writer = new IndexWriter(cachedFSDir, conf);
   }
+
+  public void testDeleteFile() throws Exception {
+    Directory dir = new NRTCachingDirectory(newDirectory(), 2.0, 25.0);
+    dir.createOutput("foo.txt").close();
+    dir.deleteFile("foo.txt");
+    assertEquals(0, dir.listAll().length);
+    dir.close();
+  }
 }