You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by mi...@apache.org on 2010/10/30 14:10:05 UTC
svn commit: r1029039 - in /lucene/java/branches/lucene_3_0: ./
src/java/org/apache/lucene/index/ src/test/org/apache/lucene/index/
Author: mikemccand
Date: Sat Oct 30 12:10:04 2010
New Revision: 1029039
URL: http://svn.apache.org/viewvc?rev=1029039&view=rev
Log:
LUCENE-2328: don't leak memory tracking sync'd files in IW
Modified:
lucene/java/branches/lucene_3_0/CHANGES.txt
lucene/java/branches/lucene_3_0/src/java/org/apache/lucene/index/DirectoryReader.java
lucene/java/branches/lucene_3_0/src/java/org/apache/lucene/index/IndexFileDeleter.java
lucene/java/branches/lucene_3_0/src/java/org/apache/lucene/index/IndexWriter.java
lucene/java/branches/lucene_3_0/src/test/org/apache/lucene/index/TestIndexReader.java
lucene/java/branches/lucene_3_0/src/test/org/apache/lucene/index/TestIndexWriter.java
lucene/java/branches/lucene_3_0/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
Modified: lucene/java/branches/lucene_3_0/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/java/branches/lucene_3_0/CHANGES.txt?rev=1029039&r1=1029038&r2=1029039&view=diff
==============================================================================
--- lucene/java/branches/lucene_3_0/CHANGES.txt (original)
+++ lucene/java/branches/lucene_3_0/CHANGES.txt Sat Oct 30 12:10:04 2010
@@ -61,6 +61,9 @@ Bug fixes
* LUCENE-2235: Implement missing PerFieldAnalyzerWrapper.getOffsetGap().
(Javier Godoy via Uwe Schindler)
+* LUCENE-2328: Fixed memory leak in how IndexWriter/Reader tracked
+ already sync'd files. (Earwin Burrfoot via Mike McCandless)
+
* LUCENE-2549: Fix TimeLimitingCollector#TimeExceededException to record
the absolute docid. (Uwe Schindler)
Modified: lucene/java/branches/lucene_3_0/src/java/org/apache/lucene/index/DirectoryReader.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/lucene_3_0/src/java/org/apache/lucene/index/DirectoryReader.java?rev=1029039&r1=1029038&r2=1029039&view=diff
==============================================================================
--- lucene/java/branches/lucene_3_0/src/java/org/apache/lucene/index/DirectoryReader.java (original)
+++ lucene/java/branches/lucene_3_0/src/java/org/apache/lucene/index/DirectoryReader.java Sat Oct 30 12:10:04 2010
@@ -733,7 +733,7 @@ class DirectoryReader extends IndexReade
// KeepOnlyLastCommitDeleter:
IndexFileDeleter deleter = new IndexFileDeleter(directory,
deletionPolicy == null ? new KeepOnlyLastCommitDeletionPolicy() : deletionPolicy,
- segmentInfos, null, null);
+ segmentInfos, null, null, synced);
segmentInfos.updateGeneration(deleter.getLastSegmentInfos());
// Checkpoint the state we are about to change, in
Modified: lucene/java/branches/lucene_3_0/src/java/org/apache/lucene/index/IndexFileDeleter.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/lucene_3_0/src/java/org/apache/lucene/index/IndexFileDeleter.java?rev=1029039&r1=1029038&r2=1029039&view=diff
==============================================================================
--- lucene/java/branches/lucene_3_0/src/java/org/apache/lucene/index/IndexFileDeleter.java (original)
+++ lucene/java/branches/lucene_3_0/src/java/org/apache/lucene/index/IndexFileDeleter.java Sat Oct 30 12:10:04 2010
@@ -24,6 +24,7 @@ import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Map;
import java.util.HashMap;
+import java.util.Set;
import java.util.List;
import java.util.ArrayList;
@@ -101,6 +102,8 @@ final class IndexFileDeleter {
final boolean startingCommitDeleted;
private SegmentInfos lastSegmentInfos;
+ private final Set<String> synced;
+
/** Change to true to see details of reference counts when
* infoStream != null */
public static boolean VERBOSE_REF_COUNTS = false;
@@ -123,11 +126,12 @@ final class IndexFileDeleter {
* @throws CorruptIndexException if the index is corrupt
* @throws IOException if there is a low-level IO error
*/
- public IndexFileDeleter(Directory directory, IndexDeletionPolicy policy, SegmentInfos segmentInfos, PrintStream infoStream, DocumentsWriter docWriter)
+ public IndexFileDeleter(Directory directory, IndexDeletionPolicy policy, SegmentInfos segmentInfos, PrintStream infoStream, DocumentsWriter docWriter, Set<String> synced)
throws CorruptIndexException, IOException {
this.docWriter = docWriter;
this.infoStream = infoStream;
+ this.synced = synced;
if (infoStream != null)
message("init: current segments file is \"" + segmentInfos.getCurrentSegmentFileName() + "\"; deletionPolicy=" + policy);
@@ -476,6 +480,12 @@ final class IndexFileDeleter {
// commit points nor by the in-memory SegmentInfos:
deleteFile(fileName);
refCounts.remove(fileName);
+
+ if (synced != null) {
+ synchronized(synced) {
+ synced.remove(fileName);
+ }
+ }
}
}
Modified: lucene/java/branches/lucene_3_0/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/lucene_3_0/src/java/org/apache/lucene/index/IndexWriter.java?rev=1029039&r1=1029038&r2=1029039&view=diff
==============================================================================
--- lucene/java/branches/lucene_3_0/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/java/branches/lucene_3_0/src/java/org/apache/lucene/index/IndexWriter.java Sat Oct 30 12:10:04 2010
@@ -1126,7 +1126,7 @@ public class IndexWriter implements Clos
// KeepOnlyLastCommitDeleter:
deleter = new IndexFileDeleter(directory,
deletionPolicy == null ? new KeepOnlyLastCommitDeletionPolicy() : deletionPolicy,
- segmentInfos, infoStream, docWriter);
+ segmentInfos, infoStream, docWriter, synced);
if (deleter.startingCommitDeleted)
// Deletion policy deleted the "head" commit point.
@@ -4567,7 +4567,7 @@ public class IndexWriter implements Clos
}
// Files that have been sync'd already
- private HashSet<String> synced = new HashSet<String>();
+ private final HashSet<String> synced = new HashSet<String>();
// Files that are now being sync'd
private HashSet<String> syncing = new HashSet<String>();
Modified: lucene/java/branches/lucene_3_0/src/test/org/apache/lucene/index/TestIndexReader.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/lucene_3_0/src/test/org/apache/lucene/index/TestIndexReader.java?rev=1029039&r1=1029038&r2=1029039&view=diff
==============================================================================
--- lucene/java/branches/lucene_3_0/src/test/org/apache/lucene/index/TestIndexReader.java (original)
+++ lucene/java/branches/lucene_3_0/src/test/org/apache/lucene/index/TestIndexReader.java Sat Oct 30 12:10:04 2010
@@ -989,7 +989,7 @@ public class TestIndexReader extends Luc
String[] startFiles = dir.listAll();
SegmentInfos infos = new SegmentInfos();
infos.read(dir);
- new IndexFileDeleter(dir, new KeepOnlyLastCommitDeletionPolicy(), infos, null, null);
+ new IndexFileDeleter(dir, new KeepOnlyLastCommitDeletionPolicy(), infos, null, null, null);
String[] endFiles = dir.listAll();
Arrays.sort(startFiles);
Modified: lucene/java/branches/lucene_3_0/src/test/org/apache/lucene/index/TestIndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/lucene_3_0/src/test/org/apache/lucene/index/TestIndexWriter.java?rev=1029039&r1=1029038&r2=1029039&view=diff
==============================================================================
--- lucene/java/branches/lucene_3_0/src/test/org/apache/lucene/index/TestIndexWriter.java (original)
+++ lucene/java/branches/lucene_3_0/src/test/org/apache/lucene/index/TestIndexWriter.java Sat Oct 30 12:10:04 2010
@@ -524,7 +524,7 @@ public class TestIndexWriter extends Luc
String[] startFiles = dir.listAll();
SegmentInfos infos = new SegmentInfos();
infos.read(dir);
- new IndexFileDeleter(dir, new KeepOnlyLastCommitDeletionPolicy(), infos, null, null);
+ new IndexFileDeleter(dir, new KeepOnlyLastCommitDeletionPolicy(), infos, null, null, null);
String[] endFiles = dir.listAll();
Arrays.sort(startFiles);
Modified: lucene/java/branches/lucene_3_0/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/lucene_3_0/src/test/org/apache/lucene/index/TestIndexWriterDelete.java?rev=1029039&r1=1029038&r2=1029039&view=diff
==============================================================================
--- lucene/java/branches/lucene_3_0/src/test/org/apache/lucene/index/TestIndexWriterDelete.java (original)
+++ lucene/java/branches/lucene_3_0/src/test/org/apache/lucene/index/TestIndexWriterDelete.java Sat Oct 30 12:10:04 2010
@@ -790,7 +790,7 @@ public class TestIndexWriterDelete exten
String[] startFiles = dir.listAll();
SegmentInfos infos = new SegmentInfos();
infos.read(dir);
- new IndexFileDeleter(dir, new KeepOnlyLastCommitDeletionPolicy(), infos, null, null);
+ new IndexFileDeleter(dir, new KeepOnlyLastCommitDeletionPolicy(), infos, null, null, null);
String[] endFiles = dir.listAll();
if (!Arrays.equals(startFiles, endFiles)) {