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);
}