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();
+ }
}