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 2007/10/23 12:39:56 UTC
svn commit: r587450 - in
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene:
AbstractIndex.java FSDirectory.java IndexMerger.java MultiIndex.java
PersistentIndex.java
Author: mreutegg
Date: Tue Oct 23 03:39:39 2007
New Revision: 587450
URL: http://svn.apache.org/viewvc?rev=587450&view=rev
Log:
JCR-863: Use FileLock for locking instead of empty file
Removed:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/FSDirectory.java
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexMerger.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PersistentIndex.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java?rev=587450&r1=587449&r2=587450&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java Tue Oct 23 03:39:39 2007
@@ -31,7 +31,7 @@
import java.io.PrintStream;
import java.io.StringReader;
import java.util.BitSet;
-import java.util.Enumeration;
+import java.util.Iterator;
/**
* Implements common functionality for a lucene index.
@@ -117,7 +117,7 @@
this.indexingQueue = indexingQueue;
if (!IndexReader.indexExists(directory)) {
- indexWriter = new IndexWriter(directory, analyzer, true);
+ indexWriter = new IndexWriter(directory, analyzer);
// immediately close, now that index has been created
indexWriter.close();
indexWriter = null;
@@ -220,7 +220,7 @@
indexReader = null;
}
if (indexWriter == null) {
- indexWriter = new IndexWriter(getDirectory(), analyzer, false);
+ indexWriter = new IndexWriter(getDirectory(), analyzer);
// since lucene 2.0 setMaxBuffereDocs is equivalent to previous minMergeDocs attribute
indexWriter.setMaxBufferedDocs(minMergeDocs);
indexWriter.setMaxMergeDocs(maxMergeDocs);
@@ -332,8 +332,8 @@
private Document getFinishedDocument(Document doc) throws IOException {
if (!Util.isDocumentReady(doc)) {
Document copy = new Document();
- for (Enumeration fields = doc.fields(); fields.hasMoreElements(); ) {
- Field f = (Field) fields.nextElement();
+ for (Iterator fields = doc.getFields().iterator(); fields.hasNext(); ) {
+ Field f = (Field) fields.next();
Field field = null;
Field.TermVector tv = getTermVectorParameter(f);
Field.Store stored = getStoreParameter(f);
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexMerger.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexMerger.java?rev=587450&r1=587449&r2=587450&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexMerger.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexMerger.java Tue Oct 23 03:39:39 2007
@@ -286,7 +286,7 @@
}
try {
log.debug("create new index");
- PersistentIndex index = multiIndex.getOrCreateIndex(null, true);
+ PersistentIndex index = multiIndex.getOrCreateIndex(null);
boolean success = false;
try {
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java?rev=587450&r1=587449&r2=587450&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java Tue Oct 23 03:39:39 2007
@@ -276,7 +276,7 @@
continue;
}
PersistentIndex index = new PersistentIndex(
- indexNames.getName(i), sub, false,
+ indexNames.getName(i), sub,
handler.getTextAnalyzer(), cache, indexingQueue);
index.setMaxMergeDocs(handler.getMaxMergeDocs());
index.setMergeFactor(handler.getMergeFactor());
@@ -557,12 +557,10 @@
*
* @param indexName the name of the index to open, or <code>null</code> if
* an index with a new name should be created.
- * @param create if the index that is opened should delete existing index
- * data.
* @return a new <code>PersistentIndex</code>.
* @throws IOException if a new index cannot be created.
*/
- synchronized PersistentIndex getOrCreateIndex(String indexName, boolean create)
+ synchronized PersistentIndex getOrCreateIndex(String indexName)
throws IOException {
// check existing
for (Iterator it = indexes.iterator(); it.hasNext();) {
@@ -580,7 +578,7 @@
} else {
sub = new File(indexDir, indexName);
}
- PersistentIndex index = new PersistentIndex(indexName, sub, create,
+ PersistentIndex index = new PersistentIndex(indexName, sub,
handler.getTextAnalyzer(), cache, indexingQueue);
index.setMaxMergeDocs(handler.getMaxMergeDocs());
index.setMergeFactor(handler.getMergeFactor());
@@ -650,7 +648,7 @@
// Index merger does not log an action when it creates the target
// index of the merge. We have to do this here.
- executeAndLog(new CreateIndex(getTransactionId(), index.getName(), false));
+ executeAndLog(new CreateIndex(getTransactionId(), index.getName()));
executeAndLog(new AddIndex(getTransactionId(), index.getName()));
@@ -975,7 +973,7 @@
long time = System.currentTimeMillis();
// create index
- CreateIndex create = new CreateIndex(getTransactionId(), null, true);
+ CreateIndex create = new CreateIndex(getTransactionId(), null);
executeAndLog(create);
// commit volatile index
@@ -1415,7 +1413,7 @@
* @inheritDoc
*/
public void execute(MultiIndex index) throws IOException {
- PersistentIndex idx = index.getOrCreateIndex(indexName, false);
+ PersistentIndex idx = index.getOrCreateIndex(indexName);
if (!index.indexNames.contains(indexName)) {
index.indexNames.addName(indexName);
// now that the index is in the active list let the merger know about it
@@ -1590,25 +1588,16 @@
private String indexName;
/**
- * Indicates if the index is forced to be created. That is, existing
- * index data is deleted.
- */
- private final boolean create;
-
- /**
* Creates a new CreateIndex action.
*
* @param transactionId the id of the transaction that executes this
* action.
* @param indexName the name of the index to add, or <code>null</code>
* if an index with a new name should be created.
- * @param create if <code>true</code> existing index data is
- * overwritten.
*/
- CreateIndex(long transactionId, String indexName, boolean create) {
+ CreateIndex(long transactionId, String indexName) {
super(transactionId, Action.TYPE_CREATE_INDEX);
this.indexName = indexName;
- this.create = create;
}
/**
@@ -1622,8 +1611,7 @@
*/
static CreateIndex fromString(long transactionId, String arguments) {
// when created from String, this action is executed as redo action
- // -> don't create index, simply open it.
- return new CreateIndex(transactionId, arguments, false);
+ return new CreateIndex(transactionId, arguments);
}
/**
@@ -1632,7 +1620,7 @@
* @inheritDoc
*/
public void execute(MultiIndex index) throws IOException {
- PersistentIndex idx = index.getOrCreateIndex(indexName, create);
+ PersistentIndex idx = index.getOrCreateIndex(indexName);
indexName = idx.getName();
}
@@ -1641,7 +1629,7 @@
*/
public void undo(MultiIndex index) throws IOException {
if (index.hasIndex(indexName)) {
- PersistentIndex idx = index.getOrCreateIndex(indexName, false);
+ PersistentIndex idx = index.getOrCreateIndex(indexName);
idx.close();
index.deleteIndex(idx);
}
@@ -1911,7 +1899,7 @@
*/
public void execute(MultiIndex index) throws IOException {
VolatileIndex volatileIndex = index.getVolatileIndex();
- PersistentIndex persistentIndex = index.getOrCreateIndex(targetIndex, true);
+ PersistentIndex persistentIndex = index.getOrCreateIndex(targetIndex);
persistentIndex.copyIndex(volatileIndex);
index.resetVolatileIndex();
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PersistentIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PersistentIndex.java?rev=587450&r1=587449&r2=587450&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PersistentIndex.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PersistentIndex.java Tue Oct 23 03:39:39 2007
@@ -16,15 +16,14 @@
*/
package org.apache.jackrabbit.core.query.lucene;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.IndexInput;
import org.apache.lucene.store.IndexOutput;
+import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.store.NativeFSLockFactory;
import java.io.IOException;
import java.io.File;
@@ -35,21 +34,9 @@
*/
class PersistentIndex extends AbstractIndex {
- /** The logger instance for this class */
- private static final Logger log = LoggerFactory.getLogger(PersistentIndex.class);
-
- /** Name of the write lock file */
- private static final String WRITE_LOCK = IndexWriter.WRITE_LOCK_NAME;
-
- /** Name of the commit lock file */
- private static final String COMMIT_LOCK = "commit.lock";
-
/** The name of this persistent index */
private final String name;
- /** Set to <code>true</code> if this index encountered locks on startup */
- private boolean lockEncountered = false;
-
/**
* If non <code>null</code>, <code>listener</code> needs to be informed
* when a document is deleted.
@@ -61,7 +48,6 @@
* <code>indexDir</code>.
* @param name the name of this index.
* @param indexDir the directory to store the index.
- * @param create if <code>true</code> an existing index is deleted.
* @param analyzer the analyzer for text tokenizing.
* @param cache the document number cache
* @param indexingQueue the indexing queue.
@@ -70,32 +56,13 @@
* @throws IOException if an error occurs while opening / creating
* the index.
*/
- PersistentIndex(String name, File indexDir, boolean create,
+ PersistentIndex(String name, File indexDir,
Analyzer analyzer, DocNumberCache cache,
IndexingQueue indexingQueue)
throws IOException {
- super(analyzer, FSDirectory.getDirectory(indexDir, create),
+ super(analyzer, FSDirectory.getDirectory(indexDir, new NativeFSLockFactory(indexDir)),
cache, indexingQueue);
this.name = name;
-
- // check if index is locked, probably from an unclean repository
- // shutdown
- File writeLock = new File(indexDir, WRITE_LOCK);
- if (writeLock.exists()) {
- lockEncountered = true;
- log.warn("Removing write lock on search index.");
- if (!writeLock.delete()) {
- log.error("Unable to remove write lock on search index.");
- }
- }
- File commitLock = new File(indexDir, COMMIT_LOCK);
- if (commitLock.exists()) {
- lockEncountered = true;
- log.warn("Removing commit lock on search index.");
- if (!commitLock.delete()) {
- log.error("Unable to remove write lock on search index.");
- }
- }
}
/**
@@ -107,17 +74,6 @@
listener.documentDeleted(idTerm);
}
return num;
- }
-
- /**
- * Returns <code>true</code> if this index encountered a lock on the file
- * system during startup. This indicates a unclean shutdown.
- *
- * @return <code>true</code> if this index encountered a lock on startup;
- * <code>false</code> otherwise.
- */
- boolean getLockEncountered() {
- return lockEncountered;
}
/**