You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2005/07/11 12:19:09 UTC
svn commit: r210092 -
/incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/VolatileIndex.java
Author: mreutegg
Date: Mon Jul 11 03:19:06 2005
New Revision: 210092
URL: http://svn.apache.org/viewcvs?rev=210092&view=rev
Log:
JCR-128: Deleting binary property does not remove 'blob file' in filesystem
- Query handler did not close Reader in some cases (though introduction of LazyFileInputStream already solved jira issue).
Modified:
incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/VolatileIndex.java
Modified: incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/VolatileIndex.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/VolatileIndex.java?rev=210092&r1=210091&r2=210092&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/VolatileIndex.java (original)
+++ incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/VolatileIndex.java Mon Jul 11 03:19:06 2005
@@ -20,13 +20,16 @@
import org.apache.jackrabbit.core.fs.FileSystemException;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.store.RAMDirectory;
+import org.apache.log4j.Logger;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
+import java.util.Enumeration;
/**
* Implements an in-memory index with a redo log.
@@ -34,6 +37,11 @@
class VolatileIndex extends AbstractIndex {
/**
+ * Logger instance for this class.
+ */
+ private static final Logger log = Logger.getLogger(VolatileIndex.class);
+
+ /**
* Default value for {@link #bufferSize}.
*/
private static final int DEFAULT_BUFFER_SIZE = 10;
@@ -83,7 +91,10 @@
} catch (FileSystemException e) {
throw new IOException(e.getMessage());
}
- pending.put(doc.get(FieldNames.UUID), doc);
+ Document old = (Document) pending.put(doc.get(FieldNames.UUID), doc);
+ if (old != null) {
+ disposeDocument(old);
+ }
if (pending.size() >= bufferSize) {
commitPending();
}
@@ -106,7 +117,9 @@
} catch (FileSystemException e) {
throw new IOException(e.getMessage());
}
- if (pending.remove(idTerm.text()) != null) {
+ Document doc = (Document) pending.remove(idTerm.text());
+ if (doc != null) {
+ disposeDocument(doc);
// pending document has been removed
return 1;
} else {
@@ -154,6 +167,25 @@
Document doc = (Document) it.next();
super.addDocument(doc);
it.remove();
+ }
+ }
+
+ /**
+ * Disposes the document <code>old</code>. Closes any potentially open
+ * readers held by the document.
+ *
+ * @param old the document to dispose.
+ */
+ private void disposeDocument(Document old) {
+ for (Enumeration e = old.fields(); e.hasMoreElements(); ) {
+ Field f = (Field) e.nextElement();
+ if (f.readerValue() != null) {
+ try {
+ f.readerValue().close();
+ } catch (IOException ex) {
+ log.warn("Exception while disposing index document: " + ex);
+ }
+ }
}
}
}