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 2014/03/24 03:47:53 UTC

svn commit: r1580707 - in /lucene/dev/trunk: lucene/test-framework/src/java/org/apache/lucene/store/ solr/test-framework/src/java/org/apache/solr/cloud/ solr/test-framework/src/java/org/apache/solr/core/

Author: markrmiller
Date: Mon Mar 24 02:47:53 2014
New Revision: 1580707

URL: http://svn.apache.org/r1580707
Log:
LUCENE-5543: Add allowReadingFilesStillOpenForWrite to MockDirectoryFactory and MockDirectoryWrapper and set it to true for cloud tests.

Modified:
    lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/store/MockDirectoryWrapper.java
    lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractDistribZkTestBase.java
    lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/core/MockDirectoryFactory.java

Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/store/MockDirectoryWrapper.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/store/MockDirectoryWrapper.java?rev=1580707&r1=1580706&r2=1580707&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/store/MockDirectoryWrapper.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/store/MockDirectoryWrapper.java Mon Mar 24 02:47:53 2014
@@ -75,6 +75,7 @@ public class MockDirectoryWrapper extend
   boolean trackDiskUsage = false;
   boolean wrapLockFactory = true;
   boolean allowRandomFileNotFoundException = true;
+  boolean allowReadingFilesStillOpenForWrite = false;
   private Set<String> unSyncedFiles;
   private Set<String> createdFiles;
   private Set<String> openFilesForWrite = new HashSet<>();
@@ -146,6 +147,12 @@ public class MockDirectoryWrapper extend
   public void setAllowRandomFileNotFoundException(boolean value) {
     allowRandomFileNotFoundException = value;
   }
+  
+  /** If set to true, you can open an inputstream on a file
+   *  that is still open for writes. */
+  public void setAllowReadingFilesStillOpenForWrite(boolean value) {
+    allowReadingFilesStillOpenForWrite = value;
+  }
 
   /**
    * Enum for controlling hard disk throttling.
@@ -564,7 +571,7 @@ public class MockDirectoryWrapper extend
 
     // cannot open a file for input if it's still open for
     // output, except for segments.gen and segments_N
-    if (openFilesForWrite.contains(name) && !name.startsWith("segments")) {
+    if (!allowReadingFilesStillOpenForWrite && openFilesForWrite.contains(name) && !name.startsWith("segments")) {
       throw (IOException) fillOpenTrace(new IOException("MockDirectoryWrapper: file \"" + name + "\" is still open for writing"), name, false);
     }
 
@@ -1004,4 +1011,5 @@ public class MockDirectoryWrapper extend
    *  e.g. from {@link MockDirectoryWrapper.Failure}. */
   public static class FakeIOException extends IOException {
   }
+
 }

Modified: lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractDistribZkTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractDistribZkTestBase.java?rev=1580707&r1=1580706&r2=1580707&view=diff
==============================================================================
--- lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractDistribZkTestBase.java (original)
+++ lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractDistribZkTestBase.java Mon Mar 24 02:47:53 2014
@@ -30,6 +30,7 @@ import org.apache.solr.common.cloud.Slic
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.core.Diagnostics;
+import org.apache.solr.core.MockDirectoryFactory;
 import org.apache.solr.servlet.SolrDispatchFilter;
 import org.apache.zookeeper.KeeperException;
 import org.junit.After;
@@ -69,6 +70,7 @@ public abstract class AbstractDistribZkT
     System.setProperty(ENABLE_UPDATE_LOG, "true");
     System.setProperty(REMOVE_VERSION_FIELD, "true");
     System.setProperty(ZOOKEEPER_FORCE_SYNC, "false");
+    System.setProperty(MockDirectoryFactory.SOLR_TESTS_ALLOW_READING_FILES_STILL_OPEN_FOR_WRITE, "true");
 
     String schema = getSchemaFile();
     if (schema == null) schema = "schema.xml";
@@ -224,6 +226,7 @@ public abstract class AbstractDistribZkT
     System.clearProperty("solr.test.sys.prop1");
     System.clearProperty("solr.test.sys.prop2");
     System.clearProperty(ZOOKEEPER_FORCE_SYNC);
+    System.clearProperty(MockDirectoryFactory.SOLR_TESTS_ALLOW_READING_FILES_STILL_OPEN_FOR_WRITE);
     
     resetExceptionIgnores();
     super.tearDown();

Modified: lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/core/MockDirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/core/MockDirectoryFactory.java?rev=1580707&r1=1580706&r2=1580707&view=diff
==============================================================================
--- lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/core/MockDirectoryFactory.java (original)
+++ lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/core/MockDirectoryFactory.java Mon Mar 24 02:47:53 2014
@@ -31,6 +31,9 @@ import org.apache.lucene.util.LuceneTest
  * Opens a directory with {@link LuceneTestCase#newDirectory()}
  */
 public class MockDirectoryFactory extends EphemeralDirectoryFactory {
+  
+  public static final String SOLR_TESTS_ALLOW_READING_FILES_STILL_OPEN_FOR_WRITE = "solr.tests.allow_reading_files_still_open_for_write";
+  private boolean allowReadingFilesStillOpenForWrite = Boolean.getBoolean(SOLR_TESTS_ALLOW_READING_FILES_STILL_OPEN_FOR_WRITE);
 
   @Override
   protected Directory create(String path, DirContext dirContext) throws IOException {
@@ -59,6 +62,10 @@ public class MockDirectoryFactory extend
       // tries to write to index.properties after the file has
       // already been created.
       mockDirWrapper.setPreventDoubleWrite(false);
+      
+      if (allowReadingFilesStillOpenForWrite) {
+        mockDirWrapper.setAllowReadingFilesStillOpenForWrite(true);
+      }
     }
     
     return dir;