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);
+      }
+    }
   }
 
   /**