You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2011/05/29 02:25:19 UTC

svn commit: r1128796 - in /lucene/dev/branches/leaky3147/lucene/src: test-framework/org/apache/lucene/store/ test-framework/org/apache/lucene/util/ test/org/apache/lucene/index/ test/org/apache/lucene/search/ test/org/apache/lucene/store/

Author: rmuir
Date: Sun May 29 00:25:18 2011
New Revision: 1128796

URL: http://svn.apache.org/viewvc?rev=1128796&view=rev
Log:
LUCENE-3152: MockDirectoryWrapper should wrap the LockFactory

Added:
    lucene/dev/branches/leaky3147/lucene/src/test-framework/org/apache/lucene/store/MockLockFactoryWrapper.java   (with props)
Modified:
    lucene/dev/branches/leaky3147/lucene/src/test-framework/org/apache/lucene/store/MockDirectoryWrapper.java
    lucene/dev/branches/leaky3147/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java
    lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/index/TestCrash.java
    lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/index/TestIndexReader.java
    lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/search/TestFieldCache.java
    lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/store/TestLockFactory.java

Modified: lucene/dev/branches/leaky3147/lucene/src/test-framework/org/apache/lucene/store/MockDirectoryWrapper.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/leaky3147/lucene/src/test-framework/org/apache/lucene/store/MockDirectoryWrapper.java?rev=1128796&r1=1128795&r2=1128796&view=diff
==============================================================================
--- lucene/dev/branches/leaky3147/lucene/src/test-framework/org/apache/lucene/store/MockDirectoryWrapper.java (original)
+++ lucene/dev/branches/leaky3147/lucene/src/test-framework/org/apache/lucene/store/MockDirectoryWrapper.java Sun May 29 00:25:18 2011
@@ -69,6 +69,7 @@ public class MockDirectoryWrapper extend
   private Set<String> unSyncedFiles;
   private Set<String> createdFiles;
   private Set<String> openFilesForWrite = new HashSet<String>();
+  Set<String> openLocks = Collections.synchronizedSet(new HashSet<String>());
   volatile boolean crashed;
   private ThrottledIndexOutput throttledOutput;
   private Throttling throttling = Throttling.SOMETIMES;
@@ -107,6 +108,12 @@ public class MockDirectoryWrapper extend
     this.randomState = new Random(random.nextInt());
     this.throttledOutput = new ThrottledIndexOutput(ThrottledIndexOutput
         .mBitsToBytes(40 + randomState.nextInt(10)), 5 + randomState.nextInt(5), null);
+    // force wrapping of lockfactory
+    try {
+      setLockFactory(new MockLockFactoryWrapper(this, delegate.getLockFactory()));
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
     init();
   }
 
@@ -208,6 +215,7 @@ public class MockDirectoryWrapper extend
 
   public synchronized void clearCrash() throws IOException {
     crashed = false;
+    openLocks.clear();
   }
 
   public void setMaxSizeInBytes(long maxSize) {
@@ -452,6 +460,9 @@ public class MockDirectoryWrapper extend
       // super() does not throw IOException currently:
       throw new RuntimeException("MockDirectoryWrapper: cannot close: there are still open files: " + openFiles, cause);
     }
+    if (noDeleteOpenFile && openLocks.size() > 0) {
+      throw new RuntimeException("MockDirectoryWrapper: cannot close: there are still open locks: " + openLocks);
+    }
     open = false;
     if (checkIndexOnClose) {
       if (LuceneTestCase.VERBOSE) {

Added: lucene/dev/branches/leaky3147/lucene/src/test-framework/org/apache/lucene/store/MockLockFactoryWrapper.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/leaky3147/lucene/src/test-framework/org/apache/lucene/store/MockLockFactoryWrapper.java?rev=1128796&view=auto
==============================================================================
--- lucene/dev/branches/leaky3147/lucene/src/test-framework/org/apache/lucene/store/MockLockFactoryWrapper.java (added)
+++ lucene/dev/branches/leaky3147/lucene/src/test-framework/org/apache/lucene/store/MockLockFactoryWrapper.java Sun May 29 00:25:18 2011
@@ -0,0 +1,87 @@
+package org.apache.lucene.store;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.IOException;
+
+public class MockLockFactoryWrapper extends LockFactory {
+  MockDirectoryWrapper dir;
+  LockFactory delegate;
+  
+  public MockLockFactoryWrapper(MockDirectoryWrapper dir, LockFactory delegate) {
+    this.dir = dir;
+    this.delegate = delegate;
+  }
+  
+  @Override
+  public void setLockPrefix(String lockPrefix) {
+    delegate.setLockPrefix(lockPrefix);
+  }
+
+  @Override
+  public String getLockPrefix() {
+    return delegate.getLockPrefix();
+  }
+
+  @Override
+  public Lock makeLock(String lockName) {
+    return new MockLock(delegate.makeLock(lockName), lockName);
+  }
+
+  @Override
+  public void clearLock(String lockName) throws IOException {
+    delegate.clearLock(lockName);
+    dir.openLocks.remove(lockName);
+  }
+  
+  @Override
+  public String toString() {
+    return "MockLockFactoryWrapper(" + delegate.toString() + ")";
+  }
+
+  private class MockLock extends Lock {
+    private Lock delegate;
+    private String name;
+    
+    MockLock(Lock delegate, String name) {
+      this.delegate = delegate;
+      this.name = name;
+    }
+
+    @Override
+    public boolean obtain() throws IOException {
+      if (delegate.obtain()) {
+        dir.openLocks.add(name);
+        return true;
+      } else {
+        return false;
+      }
+    }
+
+    @Override
+    public void release() throws IOException {
+      delegate.release();
+      dir.openLocks.remove(name);
+    }
+
+    @Override
+    public boolean isLocked() throws IOException {
+      return delegate.isLocked();
+    }
+  }
+}

Modified: lucene/dev/branches/leaky3147/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/leaky3147/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java?rev=1128796&r1=1128795&r2=1128796&view=diff
==============================================================================
--- lucene/dev/branches/leaky3147/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java (original)
+++ lucene/dev/branches/leaky3147/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java Sun May 29 00:25:18 2011
@@ -972,7 +972,10 @@ public abstract class LuceneTestCase ext
 
         clazz = Class.forName(fsdirClass).asSubclass(FSDirectory.class);
       }
-      MockDirectoryWrapper dir = new MockDirectoryWrapper(random, newFSDirectoryImpl(clazz, f, lf));
+      MockDirectoryWrapper dir = new MockDirectoryWrapper(random, newFSDirectoryImpl(clazz, f));
+      if (lf != null) {
+        dir.setLockFactory(lf);
+      }
       stores.put(dir, Thread.currentThread().getStackTrace());
       return dir;
     } catch (Exception e) {
@@ -1106,7 +1109,7 @@ public abstract class LuceneTestCase ext
   }
 
   private static Directory newFSDirectoryImpl(
-      Class<? extends FSDirectory> clazz, File file, LockFactory lockFactory)
+      Class<? extends FSDirectory> clazz, File file)
       throws IOException {
     FSDirectory d = null;
     try {
@@ -1117,9 +1120,6 @@ public abstract class LuceneTestCase ext
     } catch (Exception e) {
       d = FSDirectory.open(file);
     }
-    if (lockFactory != null) {
-      d.setLockFactory(lockFactory);
-    }
     return d;
   }
 
@@ -1141,7 +1141,7 @@ public abstract class LuceneTestCase ext
         tmpFile.delete();
         tmpFile.mkdir();
         registerTempFile(tmpFile);
-        return newFSDirectoryImpl(clazz.asSubclass(FSDirectory.class), tmpFile, null);
+        return newFSDirectoryImpl(clazz.asSubclass(FSDirectory.class), tmpFile);
       }
 
       // try empty ctor

Modified: lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/index/TestCrash.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/index/TestCrash.java?rev=1128796&r1=1128795&r2=1128796&view=diff
==============================================================================
--- lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/index/TestCrash.java (original)
+++ lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/index/TestCrash.java Sun May 29 00:25:18 2011
@@ -176,6 +176,7 @@ public class TestCrash extends LuceneTes
     reader = IndexReader.open(dir, false);
     assertEquals(157, reader.numDocs());
     reader.close();
+    dir.clearCrash();
     dir.close();
   }
 

Modified: lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/index/TestIndexReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/index/TestIndexReader.java?rev=1128796&r1=1128795&r2=1128796&view=diff
==============================================================================
--- lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/index/TestIndexReader.java (original)
+++ lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/index/TestIndexReader.java Sun May 29 00:25:18 2011
@@ -1688,6 +1688,7 @@ public class TestIndexReader extends Luc
     r2.close();
     assertTrue(ints == ints2);
 
+    writer.close();
     dir.close();
   }
 
@@ -1735,6 +1736,7 @@ public class TestIndexReader extends Luc
     assertTrue(((SegmentReader) subs[1]).readOnly);
     assertTrue(ints == ints2);
 
+    writer.close();
     dir.close();
   }
 

Modified: lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/search/TestFieldCache.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/search/TestFieldCache.java?rev=1128796&r1=1128795&r2=1128796&view=diff
==============================================================================
--- lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/search/TestFieldCache.java (original)
+++ lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/search/TestFieldCache.java Sun May 29 00:25:18 2011
@@ -217,6 +217,7 @@ public class TestFieldCache extends Luce
     IndexReader r = IndexReader.open(writer, true);
     FieldCache.DocTerms terms = FieldCache.DEFAULT.getTerms(r, "foobar");
     FieldCache.DocTermsIndex termsIndex = FieldCache.DEFAULT.getTermsIndex(r, "foobar");
+    writer.close();
     r.close();
     dir.close();
   }

Modified: lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/store/TestLockFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/store/TestLockFactory.java?rev=1128796&r1=1128795&r2=1128796&view=diff
==============================================================================
--- lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/store/TestLockFactory.java (original)
+++ lucene/dev/branches/leaky3147/lucene/src/test/org/apache/lucene/store/TestLockFactory.java Sun May 29 00:25:18 2011
@@ -255,15 +255,21 @@ public class TestLockFactory extends Luc
     // write.lock is stored in index):
     public void testDefaultFSLockFactoryPrefix() throws IOException {
 
-      // Make sure we get null prefix:
+      // Make sure we get null prefix, which wont happen if setLockFactory is ever called.
       File dirName = _TestUtil.getTempDir("TestLockFactory.10");
-      Directory dir = newFSDirectory(dirName);
-
-      String prefix = dir.getLockFactory().getLockPrefix();
-
-      assertTrue("Default lock prefix should be null", null == prefix);
 
+      Directory dir = new SimpleFSDirectory(dirName);
+      assertNull("Default lock prefix should be null", dir.getLockFactory().getLockPrefix());
+      dir.close();
+      
+      dir = new MMapDirectory(dirName);
+      assertNull("Default lock prefix should be null", dir.getLockFactory().getLockPrefix());
+      dir.close();
+      
+      dir = new NIOFSDirectory(dirName);
+      assertNull("Default lock prefix should be null", dir.getLockFactory().getLockPrefix());
       dir.close();
+ 
       _TestUtil.rmDir(dirName);
     }