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/19 15:41:58 UTC
svn commit: r219683 - in
/incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene:
CachingIndexReader.java ConsistencyCheck.java MultiIndex.java
Author: mreutegg
Date: Tue Jul 19 06:41:57 2005
New Revision: 219683
URL: http://svn.apache.org/viewcvs?rev=219683&view=rev
Log:
JCR-160: Query index not in sync with workspace
- Log warning if index detects duplicate entries for a node
- Not all multiple entries in index are removed on repair
Modified:
incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/CachingIndexReader.java
incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java
incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java
Modified: incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/CachingIndexReader.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/CachingIndexReader.java?rev=219683&r1=219682&r2=219683&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/CachingIndexReader.java (original)
+++ incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/CachingIndexReader.java Tue Jul 19 06:41:57 2005
@@ -186,7 +186,9 @@
if (!in.isDeleted(i)) {
Document d = in.document(i);
Integer docId = new Integer(i);
- ids.put(d.get(FieldNames.UUID), docId);
+ if (ids.put(d.get(FieldNames.UUID), docId) != null) {
+ log.warn("Duplicate index entry for node: " + d.get(FieldNames.UUID));
+ }
documents.put(docId, d);
String parentUUID = d.get(FieldNames.PARENT);
List docIds = (List) parents.get(parentUUID);
Modified: incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java?rev=219683&r1=219682&r2=219683&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java (original)
+++ incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java Tue Jul 19 06:41:57 2005
@@ -98,8 +98,8 @@
/**
* Repairs detected errors during the consistency check.
- * @param ignoreFailure if <code>true</code> repair failures are ignored
- * the the repair continues without throwing an exception. If
+ * @param ignoreFailure if <code>true</code> repair failures are ignored,
+ * the repair continues without throwing an exception. If
* <code>false</code> the repair procedure is aborted on the first
* repair failure.
* @throws IOException if a repair failure occurs.
@@ -320,9 +320,7 @@
public void repair() throws IOException {
// first remove all occurrences
Term id = new Term(FieldNames.UUID, uuid);
- while (index.removeDocument(id) > 0) {
- // removed
- }
+ index.removeAllDocuments(id);
// then re-index the node
try {
NodeState node = (NodeState) stateMgr.getItemState(new NodeId(uuid));
Modified: incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java?rev=219683&r1=219682&r2=219683&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java (original)
+++ incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java Tue Jul 19 06:41:57 2005
@@ -232,11 +232,11 @@
}
/**
- * Deletes documents that match the <code>idTerm</code>.
+ * Deletes the first document that matches the <code>idTerm</code>.
*
- * @param idTerm documents that match this term will be deleted.
+ * @param idTerm document that match this term will be deleted.
* @return the number of deleted documents.
- * @throws IOException if an error occurs while deleting documents.
+ * @throws IOException if an error occurs while deleting the document.
*/
synchronized int removeDocument(Term idTerm) throws IOException {
// flush multi reader if it does not have deletions yet
@@ -258,6 +258,28 @@
return num;
}
return 0;
+ }
+
+ /**
+ * Deletes all documents that match the <code>idTerm</code> and immediately
+ * commits the changes to the persistent indexes.
+ *
+ * @param idTerm documents that match this term will be deleted.
+ * @return the number of deleted documents.
+ * @throws IOException if an error occurs while deleting documents.
+ */
+ synchronized int removeAllDocuments(Term idTerm) throws IOException {
+ // flush multi reader if it does not have deletions yet
+ if (multiReader != null && !multiReader.hasDeletions()) {
+ multiReader = null;
+ }
+ int num = volatileIndex.removeDocument(idTerm);
+ for (int i = 0; i < indexes.size(); i++) {
+ PersistentIndex index = (PersistentIndex) indexes.get(i);
+ num += index.removeDocument(idTerm);
+ index.commit();
+ }
+ return num;
}
/**