You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2012/12/15 23:58:02 UTC
svn commit: r1422399 - in
/lucene/dev/trunk/solr/core/src/java/org/apache/solr:
core/DirectoryFactory.java core/EphemeralDirectoryFactory.java
core/StandardDirectoryFactory.java update/UpdateHandler.java
Author: markrmiller
Date: Sat Dec 15 22:58:01 2012
New Revision: 1422399
URL: http://svn.apache.org/viewvc?rev=1422399&view=rev
Log:
SOLR-4203: An ephemeral directory implementation should cause the transaction log to be ignored on startup.
Modified:
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/EphemeralDirectoryFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/UpdateHandler.java
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java?rev=1422399&r1=1422398&r2=1422399&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java Sat Dec 15 22:58:01 2012
@@ -91,7 +91,7 @@ public abstract class DirectoryFactory i
/**
* This remove is special in that it may be called even after
* the factory has been closed. Remove only makes sense for
- * peristent directory factories.
+ * persistent directory factories.
*
* @param path to remove
* @throws IOException If there is a low-level I/O error.
@@ -140,6 +140,12 @@ public abstract class DirectoryFactory i
*/
public abstract void incRef(Directory directory);
+
+ /**
+ * @return true if data is kept after close.
+ */
+ public abstract boolean isPersistent();
+
/**
* Releases the Directory so that it may be closed when it is no longer
* referenced.
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/EphemeralDirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/EphemeralDirectoryFactory.java?rev=1422399&r1=1422398&r2=1422399&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/EphemeralDirectoryFactory.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/EphemeralDirectoryFactory.java Sat Dec 15 22:58:01 2012
@@ -44,6 +44,10 @@ public abstract class EphemeralDirectory
}
}
+ public boolean isPersistent() {
+ return false;
+ }
+
@Override
public void remove(Directory dir) throws IOException {
// ram dir does not persist its dir anywhere
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java?rev=1422399&r1=1422398&r2=1422399&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java Sat Dec 15 22:58:01 2012
@@ -44,6 +44,10 @@ public class StandardDirectoryFactory ex
return new File(path).getCanonicalPath();
}
+ public boolean isPersistent() {
+ return true;
+ }
+
@Override
public void remove(Directory dir) throws IOException {
CacheValue val = byDirectoryCache.get(dir);
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/UpdateHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/UpdateHandler.java?rev=1422399&r1=1422398&r2=1422399&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/UpdateHandler.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/UpdateHandler.java Sat Dec 15 22:58:01 2012
@@ -21,6 +21,7 @@ package org.apache.solr.update;
import java.io.IOException;
import java.util.Vector;
+import org.apache.commons.io.FileUtils;
import org.apache.solr.core.PluginInfo;
import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrEventListener;
@@ -53,7 +54,7 @@ public abstract class UpdateHandler impl
protected Vector<SolrEventListener> softCommitCallbacks = new Vector<SolrEventListener>();
protected Vector<SolrEventListener> optimizeCallbacks = new Vector<SolrEventListener>();
- protected UpdateLog ulog;
+ protected volatile UpdateLog ulog;
private void parseEventListeners() {
final Class<SolrEventListener> clazz = SolrEventListener.class;
@@ -83,6 +84,14 @@ public abstract class UpdateHandler impl
}
}
+ // not thread safe - for startup
+ protected void clearLog() throws IOException {
+ if (ulog != null) {
+ ulog.close(false);
+ FileUtils.deleteDirectory(ulog.getLogDir());
+ initLog();
+ }
+ }
protected void callPostCommitCallbacks() {
for (SolrEventListener listener : commitCallbacks) {
@@ -109,6 +118,13 @@ public abstract class UpdateHandler impl
idFieldType = idField!=null ? idField.getType() : null;
parseEventListeners();
initLog();
+ if (!core.getDirectoryFactory().isPersistent()) {
+ try {
+ clearLog();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
}
/**