();
@@ -1077,6 +1077,8 @@
termIndexInterval = conf.getTermIndexInterval();
writeLockTimeout = conf.getWriteLockTimeout();
similarity = conf.getSimilarity();
+ mergePolicy = conf.getMergePolicy();
+ mergePolicy.setIndexWriter(this);
mergeScheduler = conf.getMergeScheduler();
mergedSegmentWarmer = conf.getMergedSegmentWarmer();
@@ -1210,6 +1212,8 @@
/**
* Expert: set the merge policy used by this writer.
+ *
+ * @deprecated use {@link IndexWriterConfig#setMergePolicy(MergePolicy)} instead.
*/
public void setMergePolicy(MergePolicy mp) {
ensureOpen();
@@ -1219,14 +1223,20 @@
if (mergePolicy != mp)
mergePolicy.close();
mergePolicy = mp;
+ mergePolicy.setIndexWriter(this);
pushMaxBufferedDocs();
if (infoStream != null)
message("setMergePolicy " + mp);
+ // Required so config.getMergePolicy returns the right value. But this will
+ // go away together with the method in 4.0.
+ config.setMergePolicy(mp);
}
/**
* Expert: returns the current MergePolicy in use by this writer.
* @see #setMergePolicy
+ *
+ * @deprecated use {@link IndexWriterConfig#getMergePolicy()} instead
*/
public MergePolicy getMergePolicy() {
ensureOpen();
Index: src/java/org/apache/lucene/index/IndexWriterConfig.java
===================================================================
--- src/java/org/apache/lucene/index/IndexWriterConfig.java (revision 922776)
+++ src/java/org/apache/lucene/index/IndexWriterConfig.java (working copy)
@@ -110,6 +110,7 @@
private int maxBufferedDocs;
private IndexingChain indexingChain;
private IndexReaderWarmer mergedSegmentWarmer;
+ private MergePolicy mergePolicy;
// required for clone
private Version matchVersion;
@@ -137,6 +138,7 @@
maxBufferedDocs = DEFAULT_MAX_BUFFERED_DOCS;
indexingChain = DocumentsWriter.defaultIndexingChain;
mergedSegmentWarmer = null;
+ mergePolicy = new LogByteSizeMergePolicy();
}
@Override
@@ -483,7 +485,27 @@
return mergedSegmentWarmer;
}
+ /**
+ * Expert: {@link MergePolicy} is invoked whenever there are changes to the
+ * segments in the index. Its role is to select which merges to do, if any,
+ * and return a {@link MergePolicy.MergeSpecification} describing the merges.
+ * It also selects merges to do for optimize(). (The default is
+ * {@link LogByteSizeMergePolicy}.
+ */
+ public IndexWriterConfig setMergePolicy(MergePolicy mergePolicy) {
+ this.mergePolicy = mergePolicy == null ? new LogByteSizeMergePolicy() : mergePolicy;
+ return this;
+ }
+ /**
+ * Returns the current MergePolicy in use by this writer.
+ *
+ * @see #setMergePolicy(MergePolicy)
+ */
+ public MergePolicy getMergePolicy() {
+ return mergePolicy;
+ }
+
/** Expert: sets the {@link DocConsumer} chain to be used to process documents. */
IndexWriterConfig setIndexingChain(IndexingChain indexingChain) {
this.indexingChain = indexingChain == null ? DocumentsWriter.defaultIndexingChain : indexingChain;
@@ -513,6 +535,7 @@
sb.append("ramBufferSizeMB=").append(ramBufferSizeMB).append("\n");
sb.append("maxBufferedDocs=").append(maxBufferedDocs).append("\n");
sb.append("mergedSegmentWarmer=").append(mergedSegmentWarmer).append("\n");
+ sb.append("mergePolicy=").append(mergePolicy).append("\n");
return sb.toString();
}
}
Index: src/java/org/apache/lucene/index/LogByteSizeMergePolicy.java
===================================================================
--- src/java/org/apache/lucene/index/LogByteSizeMergePolicy.java (revision 922776)
+++ src/java/org/apache/lucene/index/LogByteSizeMergePolicy.java (working copy)
@@ -30,11 +30,11 @@
* or larger will never be merged. @see setMaxMergeMB */
public static final double DEFAULT_MAX_MERGE_MB = Long.MAX_VALUE;
- public LogByteSizeMergePolicy(IndexWriter writer) {
- super(writer);
+ public LogByteSizeMergePolicy() {
minMergeSize = (long) (DEFAULT_MIN_MERGE_MB*1024*1024);
maxMergeSize = (long) (DEFAULT_MAX_MERGE_MB*1024*1024);
}
+
@Override
protected long size(SegmentInfo info) throws IOException {
return sizeBytes(info);
Index: src/java/org/apache/lucene/index/LogDocMergePolicy.java
===================================================================
--- src/java/org/apache/lucene/index/LogDocMergePolicy.java (revision 922776)
+++ src/java/org/apache/lucene/index/LogDocMergePolicy.java (working copy)
@@ -28,14 +28,14 @@
/** Default minimum segment size. @see setMinMergeDocs */
public static final int DEFAULT_MIN_MERGE_DOCS = 1000;
- public LogDocMergePolicy(IndexWriter writer) {
- super(writer);
+ public LogDocMergePolicy() {
minMergeSize = DEFAULT_MIN_MERGE_DOCS;
-
+
// maxMergeSize is never used by LogDocMergePolicy; set
// it to Long.MAX_VALUE to disable it
maxMergeSize = Long.MAX_VALUE;
}
+
@Override
protected long size(SegmentInfo info) throws IOException {
return sizeDocs(info);
Index: src/java/org/apache/lucene/index/LogMergePolicy.java
===================================================================
--- src/java/org/apache/lucene/index/LogMergePolicy.java (revision 922776)
+++ src/java/org/apache/lucene/index/LogMergePolicy.java (working copy)
@@ -66,17 +66,18 @@
private boolean useCompoundFile = true;
private boolean useCompoundDocStore = true;
- public LogMergePolicy(IndexWriter writer) {
- super(writer);
+ public LogMergePolicy() {
+ super();
}
-
+
protected boolean verbose() {
- return writer != null && writer.verbose();
+ IndexWriter w = writer.get();
+ return w != null && w.verbose();
}
private void message(String message) {
if (verbose())
- writer.message("LMP: " + message);
+ writer.get().message("LMP: " + message);
}
/** Returns the number of segments that are merged at
@@ -160,7 +161,7 @@
protected long sizeDocs(SegmentInfo info) throws IOException {
if (calibrateSizeByDeletes) {
- int delCount = writer.numDeletedDocs(info);
+ int delCount = writer.get().numDeletedDocs(info);
return (info.docCount - (long)delCount);
} else {
return info.docCount;
@@ -170,7 +171,7 @@
protected long sizeBytes(SegmentInfo info) throws IOException {
long byteSize = info.sizeInBytes();
if (calibrateSizeByDeletes) {
- int delCount = writer.numDeletedDocs(info);
+ int delCount = writer.get().numDeletedDocs(info);
float delRatio = (info.docCount <= 0 ? 0.0f : ((float)delCount / (float)info.docCount));
return (info.docCount <= 0 ? byteSize : (long)(byteSize * (1.0f - delRatio)));
} else {
@@ -199,10 +200,12 @@
* writer, and matches the current compound file setting */
private boolean isOptimized(SegmentInfo info)
throws IOException {
- boolean hasDeletions = writer.numDeletedDocs(info) > 0;
+ IndexWriter w = writer.get();
+ assert w != null;
+ boolean hasDeletions = w.numDeletedDocs(info) > 0;
return !hasDeletions &&
!info.hasSeparateNorms() &&
- info.dir == writer.getDirectory() &&
+ info.dir == w.getDirectory() &&
info.getUseCompoundFile() == useCompoundFile;
}
@@ -309,9 +312,11 @@
MergeSpecification spec = new MergeSpecification();
int firstSegmentWithDeletions = -1;
+ IndexWriter w = writer.get();
+ assert w != null;
for(int i=0;i 0) {
if (verbose())
message(" segment " + info.name + " has deletions");
Index: src/java/org/apache/lucene/index/MergePolicy.java
===================================================================
--- src/java/org/apache/lucene/index/MergePolicy.java (revision 922776)
+++ src/java/org/apache/lucene/index/MergePolicy.java (working copy)
@@ -18,6 +18,8 @@
*/
import org.apache.lucene.store.Directory;
+import org.apache.lucene.util.SetOnce;
+import org.apache.lucene.util.SetOnce.AlreadySetException;
import java.io.IOException;
import java.util.List;
@@ -225,13 +227,29 @@
}
}
- final protected IndexWriter writer;
-
- public MergePolicy(IndexWriter writer) {
- this.writer = writer;
+ protected final SetOnce writer;
+
+ /**
+ * Creates a new merge policy instance. Note that if you intend to use it
+ * without passing it to {@link IndexWriter}, you should call
+ * {@link #setIndexWriter(IndexWriter)}.
+ */
+ public MergePolicy() {
+ writer = new SetOnce();
}
/**
+ * Sets the {@link IndexWriter} to use by this merge policy. This method is
+ * allowed to be called only once, and is usually set by IndexWriter. If it is
+ * called more than once, {@link AlreadySetException} is thrown.
+ *
+ * @see SetOnce
+ */
+ public void setIndexWriter(IndexWriter writer) {
+ this.writer.set(writer);
+ }
+
+ /**
* Determine what set of merge operations are now necessary on the index.
* {@link IndexWriter} calls this whenever there is a change to the segments.
* This call is always synchronized on the {@link IndexWriter} instance so
Index: src/java/org/apache/lucene/util/SetOnce.java
===================================================================
--- src/java/org/apache/lucene/util/SetOnce.java (revision 0)
+++ src/java/org/apache/lucene/util/SetOnce.java (revision 0)
@@ -0,0 +1,74 @@
+package org.apache.lucene.util;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * 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.
+ */
+
+/**
+ * A convenient class which offers a semi-immutable object wrapper
+ * implementation which allows one to set the value of an object exactly once,
+ * and retrieve it many times. If {@link #set(Object)} is called more than once,
+ * {@link AlreadySetException} is thrown and the operation will fail.
+ */
+public final class SetOnce {
+
+ /** Thrown when {@link SetOnce#set(Object)} is called more than once. */
+ public static final class AlreadySetException extends RuntimeException {
+ public AlreadySetException() {
+ super("The object cannot be set twice!");
+ }
+ }
+
+ private volatile T obj = null;
+ private final AtomicBoolean set;
+
+ /**
+ * A default constructor which does not set the internal object, and allows
+ * setting it by calling {@link #set(Object)}.
+ */
+ public SetOnce() {
+ set = new AtomicBoolean(false);
+ }
+
+ /**
+ * Creates a new instnace with the internal object set to the given object.
+ * Note that any calls to {@link #set(Object)} afterwards will result in
+ * {@link AlreadySetException}
+ *
+ * @throws AlreadySetException if called more than once
+ * @see #set(Object)
+ */
+ public SetOnce(T obj) {
+ this.obj = obj;
+ set = new AtomicBoolean(true);
+ }
+
+ /** Sets the given object. If the object has already been set, an exception is thrown. */
+ public final void set(T obj) {
+ if (set.compareAndSet(false, true)) {
+ this.obj = obj;
+ } else {
+ throw new AlreadySetException();
+ }
+ }
+
+ /** Returns the object set by {@link #set(Object)}. */
+ public final T get() {
+ return obj;
+ }
+}
Property changes on: src\java\org\apache\lucene\util\SetOnce.java
___________________________________________________________________
Added: svn:keywords
+ Date Author Id Revision HeadURL
Added: svn:eol-style
+ native
Index: src/test/org/apache/lucene/TestSearch.java
===================================================================
--- src/test/org/apache/lucene/TestSearch.java (revision 922776)
+++ src/test/org/apache/lucene/TestSearch.java (working copy)
@@ -73,11 +73,11 @@
throws Exception {
Directory directory = new RAMDirectory();
Analyzer analyzer = new SimpleAnalyzer(TEST_VERSION_CURRENT);
- IndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(
- TEST_VERSION_CURRENT, analyzer));
- LogMergePolicy lmp = (LogMergePolicy) writer.getMergePolicy();
+ IndexWriterConfig conf = new IndexWriterConfig(TEST_VERSION_CURRENT, analyzer);
+ LogMergePolicy lmp = (LogMergePolicy) conf.getMergePolicy();
lmp.setUseCompoundFile(useCompoundFile);
lmp.setUseCompoundDocStore(useCompoundFile);
+ IndexWriter writer = new IndexWriter(directory, conf);
String[] docs = {
"a b c d e",
Index: src/test/org/apache/lucene/TestSearchForDuplicates.java
===================================================================
--- src/test/org/apache/lucene/TestSearchForDuplicates.java (revision 922776)
+++ src/test/org/apache/lucene/TestSearchForDuplicates.java (working copy)
@@ -78,11 +78,11 @@
private void doTest(PrintWriter out, boolean useCompoundFiles) throws Exception {
Directory directory = new RAMDirectory();
Analyzer analyzer = new SimpleAnalyzer(TEST_VERSION_CURRENT);
- IndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(
- TEST_VERSION_CURRENT, analyzer));
- LogMergePolicy lmp = (LogMergePolicy) writer.getMergePolicy();
+ IndexWriterConfig conf = new IndexWriterConfig(TEST_VERSION_CURRENT, analyzer);
+ LogMergePolicy lmp = (LogMergePolicy) conf.getMergePolicy();
lmp.setUseCompoundFile(useCompoundFiles);
lmp.setUseCompoundDocStore(useCompoundFiles);
+ IndexWriter writer = new IndexWriter(directory, conf);
final int MAX_DOCS = 225;
Index: src/test/org/apache/lucene/index/TestAddIndexesNoOptimize.java
===================================================================
--- src/test/org/apache/lucene/index/TestAddIndexesNoOptimize.java (revision 922776)
+++ src/test/org/apache/lucene/index/TestAddIndexesNoOptimize.java (working copy)
@@ -49,8 +49,8 @@
writer.close();
writer = newWriter(aux, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setOpenMode(OpenMode.CREATE));
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundFile(false); // use one without a compound file
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundDocStore(false); // use one without a compound file
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundFile(false); // use one without a compound file
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundDocStore(false); // use one without a compound file
// add 40 documents in separate files
addDocs(writer, 40);
assertEquals(40, writer.maxDoc());
@@ -257,14 +257,14 @@
writer.close();
writer = newWriter(aux, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setOpenMode(OpenMode.CREATE).setMaxBufferedDocs(1000));
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundFile(false); // use one without a compound file
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundDocStore(false); // use one without a compound file
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundFile(false); // use one without a compound file
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundDocStore(false); // use one without a compound file
// add 140 documents in separate files
addDocs(writer, 40);
writer.close();
writer = newWriter(aux, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setOpenMode(OpenMode.CREATE).setMaxBufferedDocs(1000));
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundFile(false); // use one without a compound file
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundDocStore(false); // use one without a compound file
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundFile(false); // use one without a compound file
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundDocStore(false); // use one without a compound file
addDocs(writer, 100);
writer.close();
@@ -297,7 +297,7 @@
IndexWriter writer = newWriter(dir, new IndexWriterConfig(
TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
.setOpenMode(OpenMode.APPEND).setMaxBufferedDocs(10));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(4);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(4);
addDocs(writer, 10);
writer.addIndexesNoOptimize(new Directory[] { aux });
@@ -320,7 +320,7 @@
setUpDirs(dir, aux);
IndexWriter writer = newWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setOpenMode(OpenMode.APPEND).setMaxBufferedDocs(9));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(4);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(4);
addDocs(writer, 2);
writer.addIndexesNoOptimize(new Directory[] { aux });
@@ -345,7 +345,7 @@
IndexWriter writer = newWriter(dir, new IndexWriterConfig(
TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
.setOpenMode(OpenMode.APPEND).setMaxBufferedDocs(10));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(4);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(4);
writer.addIndexesNoOptimize(new Directory[] { aux, new RAMDirectory(aux) });
assertEquals(1060, writer.maxDoc());
@@ -375,7 +375,7 @@
IndexWriter writer = newWriter(dir, new IndexWriterConfig(
TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
.setOpenMode(OpenMode.APPEND).setMaxBufferedDocs(4));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(4);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(4);
writer.addIndexesNoOptimize(new Directory[] { aux, new RAMDirectory(aux) });
assertEquals(1020, writer.maxDoc());
@@ -399,7 +399,7 @@
IndexWriter writer = newWriter(aux2, new IndexWriterConfig(
TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
.setOpenMode(OpenMode.CREATE).setMaxBufferedDocs(100));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(10);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(10);
writer.addIndexesNoOptimize(new Directory[] { aux });
assertEquals(30, writer.maxDoc());
assertEquals(3, writer.getSegmentCount());
@@ -421,7 +421,7 @@
writer = newWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
.setOpenMode(OpenMode.APPEND).setMaxBufferedDocs(6));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(4);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(4);
writer.addIndexesNoOptimize(new Directory[] { aux, aux2 });
assertEquals(1025, writer.maxDoc());
@@ -434,8 +434,8 @@
private IndexWriter newWriter(Directory dir, IndexWriterConfig conf)
throws IOException {
+ conf.setMergePolicy(new LogDocMergePolicy());
final IndexWriter writer = new IndexWriter(dir, conf);
- writer.setMergePolicy(new LogDocMergePolicy(writer));
return writer;
}
@@ -486,17 +486,17 @@
writer.close();
writer = newWriter(aux, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setOpenMode(OpenMode.CREATE).setMaxBufferedDocs(100));
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundFile(false); // use one without a compound file
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundDocStore(false); // use one without a compound file
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(10);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundFile(false); // use one without a compound file
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundDocStore(false); // use one without a compound file
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(10);
// add 30 documents in 3 segments
for (int i = 0; i < 3; i++) {
addDocs(writer, 10);
writer.close();
writer = newWriter(aux, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setOpenMode(OpenMode.APPEND).setMaxBufferedDocs(100));
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundFile(false); // use one without a compound file
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundDocStore(false); // use one without a compound file
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(10);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundFile(false); // use one without a compound file
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundDocStore(false); // use one without a compound file
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(10);
}
assertEquals(30, writer.maxDoc());
assertEquals(3, writer.getSegmentCount());
@@ -507,12 +507,13 @@
public void testHangOnClose() throws IOException {
Directory dir = new MockRAMDirectory();
- IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(5));
- LogByteSizeMergePolicy lmp = new LogByteSizeMergePolicy(writer);
+ LogByteSizeMergePolicy lmp = new LogByteSizeMergePolicy();
lmp.setUseCompoundFile(false);
lmp.setUseCompoundDocStore(false);
lmp.setMergeFactor(100);
- writer.setMergePolicy(lmp);
+ IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(
+ TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
+ .setMaxBufferedDocs(5).setMergePolicy(lmp));
Document doc = new Document();
doc.add(new Field("content", "aaa bbb ccc ddd eee fff ggg hhh iii", Field.Store.YES,
@@ -534,13 +535,14 @@
writer.close();
Directory dir2 = new MockRAMDirectory();
- writer = new IndexWriter(dir2, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMergeScheduler(new SerialMergeScheduler()));
- lmp = new LogByteSizeMergePolicy(writer);
+ lmp = new LogByteSizeMergePolicy();
lmp.setMinMergeMB(0.0001);
lmp.setUseCompoundFile(false);
lmp.setUseCompoundDocStore(false);
lmp.setMergeFactor(4);
- writer.setMergePolicy(lmp);
+ writer = new IndexWriter(dir2, new IndexWriterConfig(TEST_VERSION_CURRENT,
+ new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
+ .setMergeScheduler(new SerialMergeScheduler()).setMergePolicy(lmp));
writer.addIndexesNoOptimize(new Directory[] {dir});
writer.close();
dir.close();
@@ -552,15 +554,15 @@
public void testTargetCFS() throws IOException {
Directory dir = new RAMDirectory();
IndexWriter writer = newWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundFile(false);
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundDocStore(false);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundFile(false);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundDocStore(false);
addDocs(writer, 1);
writer.close();
Directory other = new RAMDirectory();
writer = newWriter(other, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundFile(true);
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundDocStore(true);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundFile(true);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundDocStore(true);
writer.addIndexesNoOptimize(new Directory[] {dir});
assertTrue(writer.newestSegment().getUseCompoundFile());
writer.close();
Index: src/test/org/apache/lucene/index/TestAtomicUpdate.java
===================================================================
--- src/test/org/apache/lucene/index/TestAtomicUpdate.java (revision 922776)
+++ src/test/org/apache/lucene/index/TestAtomicUpdate.java (working copy)
@@ -126,10 +126,11 @@
TimedThread[] threads = new TimedThread[4];
- IndexWriter writer = new MockIndexWriter(directory, new IndexWriterConfig(
+ IndexWriterConfig conf = new IndexWriterConfig(
TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT))
- .setMaxBufferedDocs(7));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(3);
+ .setMaxBufferedDocs(7);
+ ((LogMergePolicy) conf.getMergePolicy()).setMergeFactor(3);
+ IndexWriter writer = new MockIndexWriter(directory, conf);
// Establish a base index of 100 docs:
for(int i=0;i<100;i++) {
Index: src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
===================================================================
--- src/test/org/apache/lucene/index/TestBackwardsCompatibility.java (revision 922776)
+++ src/test/org/apache/lucene/index/TestBackwardsCompatibility.java (working copy)
@@ -472,9 +472,10 @@
dirName = fullDir(dirName);
Directory dir = FSDirectory.open(new File(dirName));
- IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(10));
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundFile(doCFS);
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundDocStore(doCFS);
+ IndexWriterConfig conf = new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(10);
+ ((LogMergePolicy) conf.getMergePolicy()).setUseCompoundFile(doCFS);
+ ((LogMergePolicy) conf.getMergePolicy()).setUseCompoundDocStore(doCFS);
+ IndexWriter writer = new IndexWriter(dir, conf);
for(int i=0;i<35;i++) {
addDoc(writer, i);
@@ -483,9 +484,10 @@
writer.close();
// open fresh writer so we get no prx file in the added segment
- writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(10));
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundFile(doCFS);
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundDocStore(doCFS);
+ conf = new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(10);
+ ((LogMergePolicy) conf.getMergePolicy()).setUseCompoundFile(doCFS);
+ ((LogMergePolicy) conf.getMergePolicy()).setUseCompoundDocStore(doCFS);
+ writer = new IndexWriter(dir, conf);
addNoProxDoc(writer);
writer.close();
Index: src/test/org/apache/lucene/index/TestConcurrentMergeScheduler.java
===================================================================
--- src/test/org/apache/lucene/index/TestConcurrentMergeScheduler.java (revision 922776)
+++ src/test/org/apache/lucene/index/TestConcurrentMergeScheduler.java (working copy)
@@ -110,15 +110,14 @@
RAMDirectory directory = new MockRAMDirectory();
- IndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT)));
-
- LogDocMergePolicy mp = new LogDocMergePolicy(writer);
- writer.setMergePolicy(mp);
-
+ LogDocMergePolicy mp = new LogDocMergePolicy();
// Force degenerate merging so we can get a mix of
// merging of segments with and without deletes at the
// start:
mp.setMinMergeDocs(1000);
+ IndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(
+ TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT))
+ .setMergePolicy(mp));
Document doc = new Document();
Field idField = new Field("id", "", Field.Store.YES, Field.Index.NOT_ANALYZED);
@@ -184,7 +183,7 @@
doc.add(idField);
IndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(2));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(100);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(100);
for(int iter=0;iter<10;iter++) {
@@ -201,7 +200,7 @@
// Force a bunch of merge threads to kick off so we
// stress out aborting them on close:
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(3);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(3);
writer.addDocument(doc);
writer.commit();
@@ -213,7 +212,7 @@
// Reopen
writer = new IndexWriter(directory, new IndexWriterConfig(TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT)).setOpenMode(OpenMode.APPEND));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(100);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(100);
}
writer.close();
Index: src/test/org/apache/lucene/index/TestDeletionPolicy.java
===================================================================
--- src/test/org/apache/lucene/index/TestDeletionPolicy.java (revision 922776)
+++ src/test/org/apache/lucene/index/TestDeletionPolicy.java (working copy)
@@ -202,10 +202,13 @@
Directory dir = new RAMDirectory();
ExpirationTimeDeletionPolicy policy = new ExpirationTimeDeletionPolicy(dir, SECONDS);
- IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setIndexDeletionPolicy(policy));
- LogMergePolicy lmp = (LogMergePolicy) writer.getMergePolicy();
+ IndexWriterConfig conf = new IndexWriterConfig(TEST_VERSION_CURRENT,
+ new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
+ .setIndexDeletionPolicy(policy);
+ LogMergePolicy lmp = (LogMergePolicy) conf.getMergePolicy();
lmp.setUseCompoundFile(useCompoundFile);
lmp.setUseCompoundDocStore(useCompoundFile);
+ IndexWriter writer = new IndexWriter(dir, conf);
writer.close();
long lastDeleteTime = 0;
@@ -213,11 +216,13 @@
// Record last time when writer performed deletes of
// past commits
lastDeleteTime = System.currentTimeMillis();
- writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
- .setOpenMode(OpenMode.APPEND).setIndexDeletionPolicy(policy));
- lmp = (LogMergePolicy) writer.getMergePolicy();
+ conf = new IndexWriterConfig(TEST_VERSION_CURRENT,
+ new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setOpenMode(
+ OpenMode.APPEND).setIndexDeletionPolicy(policy);
+ lmp = (LogMergePolicy) conf.getMergePolicy();
lmp.setUseCompoundFile(useCompoundFile);
lmp.setUseCompoundDocStore(useCompoundFile);
+ writer = new IndexWriter(dir, conf);
for(int j=0;j<17;j++) {
addDoc(writer);
}
@@ -277,24 +282,26 @@
Directory dir = new RAMDirectory();
policy.dir = dir;
- IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(
+ IndexWriterConfig conf = new IndexWriterConfig(
TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
.setIndexDeletionPolicy(policy).setMaxBufferedDocs(10)
- .setMergeScheduler(new SerialMergeScheduler()));
- LogMergePolicy lmp = (LogMergePolicy) writer.getMergePolicy();
+ .setMergeScheduler(new SerialMergeScheduler());
+ LogMergePolicy lmp = (LogMergePolicy) conf.getMergePolicy();
lmp.setUseCompoundFile(useCompoundFile);
lmp.setUseCompoundDocStore(useCompoundFile);
+ IndexWriter writer = new IndexWriter(dir, conf);
for(int i=0;i<107;i++) {
addDoc(writer);
}
writer.close();
- writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT,
+ conf = new IndexWriterConfig(TEST_VERSION_CURRENT,
new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setOpenMode(
- OpenMode.APPEND).setIndexDeletionPolicy(policy));
- lmp = (LogMergePolicy) writer.getMergePolicy();
+ OpenMode.APPEND).setIndexDeletionPolicy(policy);
+ lmp = (LogMergePolicy) conf.getMergePolicy();
lmp.setUseCompoundFile(useCompoundFile);
lmp.setUseCompoundDocStore(useCompoundFile);
+ writer = new IndexWriter(dir, conf);
writer.optimize();
writer.close();
@@ -462,23 +469,25 @@
Directory dir = new RAMDirectory();
- IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(
+ IndexWriterConfig conf = new IndexWriterConfig(
TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
.setOpenMode(OpenMode.CREATE).setIndexDeletionPolicy(policy)
- .setMaxBufferedDocs(10));
- LogMergePolicy lmp = (LogMergePolicy) writer.getMergePolicy();
+ .setMaxBufferedDocs(10);
+ LogMergePolicy lmp = (LogMergePolicy) conf.getMergePolicy();
lmp.setUseCompoundFile(useCompoundFile);
lmp.setUseCompoundDocStore(useCompoundFile);
+ IndexWriter writer = new IndexWriter(dir, conf);
for(int i=0;i<107;i++) {
addDoc(writer);
}
writer.close();
- writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
- .setOpenMode(OpenMode.APPEND).setIndexDeletionPolicy(policy));
- lmp = (LogMergePolicy) writer.getMergePolicy();
+ conf = new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
+ .setOpenMode(OpenMode.APPEND).setIndexDeletionPolicy(policy);
+ lmp = (LogMergePolicy) conf.getMergePolicy();
lmp.setUseCompoundFile(useCompoundFile);
lmp.setUseCompoundDocStore(useCompoundFile);
+ writer = new IndexWriter(dir, conf);
writer.optimize();
writer.close();
@@ -512,13 +521,14 @@
KeepLastNDeletionPolicy policy = new KeepLastNDeletionPolicy(N);
for(int j=0;j getters = new HashSet();
@@ -98,6 +99,7 @@
getters.add("getMaxBufferedDocs");
getters.add("getIndexingChain");
getters.add("getMergedSegmentWarmer");
+ getters.add("getMergePolicy");
for (Method m : IndexWriterConfig.class.getDeclaredMethods()) {
if (m.getDeclaringClass() == IndexWriterConfig.class && m.getName().startsWith("get")) {
assertTrue("method " + m.getName() + " is not tested for defaults", getters.contains(m.getName()));
@@ -224,7 +226,13 @@
} catch (IllegalArgumentException e) {
// this is expected
}
-
+
+ // Test MergePolicy
+ assertEquals(LogByteSizeMergePolicy.class, conf.getMergePolicy().getClass());
+ conf.setMergePolicy(new LogDocMergePolicy());
+ assertEquals(LogDocMergePolicy.class, conf.getMergePolicy().getClass());
+ conf.setMergePolicy(null);
+ assertEquals(LogByteSizeMergePolicy.class, conf.getMergePolicy().getClass());
}
/**
@@ -267,5 +275,9 @@
writer.setMergedSegmentWarmer(new MyWarmer());
assertEquals(MyWarmer.class, writer.getConfig().getMergedSegmentWarmer().getClass());
+
+ writer.setMergePolicy(new LogDocMergePolicy());
+ assertEquals(LogDocMergePolicy.class, writer.getConfig().getMergePolicy().getClass());
}
+
}
Index: src/test/org/apache/lucene/index/TestIndexWriterDelete.java
===================================================================
--- src/test/org/apache/lucene/index/TestIndexWriterDelete.java (revision 922776)
+++ src/test/org/apache/lucene/index/TestIndexWriterDelete.java (working copy)
@@ -642,7 +642,7 @@
MockRAMDirectory dir = new MockRAMDirectory();
IndexWriter modifier = new IndexWriter(dir, new IndexWriterConfig(
TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDeleteTerms(2));
- LogMergePolicy lmp = (LogMergePolicy) modifier.getMergePolicy();
+ LogMergePolicy lmp = (LogMergePolicy) modifier.getConfig().getMergePolicy();
lmp.setUseCompoundFile(true);
lmp.setUseCompoundDocStore(true);
Index: src/test/org/apache/lucene/index/TestIndexWriterMergePolicy.java
===================================================================
--- src/test/org/apache/lucene/index/TestIndexWriterMergePolicy.java (revision 922776)
+++ src/test/org/apache/lucene/index/TestIndexWriterMergePolicy.java (working copy)
@@ -35,9 +35,9 @@
public void testNormalCase() throws IOException {
Directory dir = new RAMDirectory();
- IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(10));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(10);
- writer.setMergePolicy(new LogDocMergePolicy(writer));
+ IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(
+ TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
+ .setMaxBufferedDocs(10).setMergePolicy(new LogDocMergePolicy()));
for (int i = 0; i < 100; i++) {
addDoc(writer);
@@ -51,9 +51,9 @@
public void testNoOverMerge() throws IOException {
Directory dir = new RAMDirectory();
- IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(10));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(10);
- writer.setMergePolicy(new LogDocMergePolicy(writer));
+ IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(
+ TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
+ .setMaxBufferedDocs(10).setMergePolicy(new LogDocMergePolicy()));
boolean noOverMerge = false;
for (int i = 0; i < 100; i++) {
@@ -72,21 +72,23 @@
public void testForceFlush() throws IOException {
Directory dir = new RAMDirectory();
- IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(10));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(10);
- LogDocMergePolicy mp = new LogDocMergePolicy(writer);
+ LogDocMergePolicy mp = new LogDocMergePolicy();
mp.setMinMergeDocs(100);
- writer.setMergePolicy(mp);
+ mp.setMergeFactor(10);
+ IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(
+ TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
+ .setMaxBufferedDocs(10).setMergePolicy(mp));
for (int i = 0; i < 100; i++) {
addDoc(writer);
writer.close();
- writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
- .setOpenMode(OpenMode.APPEND).setMaxBufferedDocs(10));
- writer.setMergePolicy(mp);
+ mp = new LogDocMergePolicy();
+ mp.setMergeFactor(10);
+ writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT,
+ new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setOpenMode(
+ OpenMode.APPEND).setMaxBufferedDocs(10).setMergePolicy(mp));
mp.setMinMergeDocs(100);
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(10);
checkInvariants(writer);
}
@@ -97,16 +99,16 @@
public void testMergeFactorChange() throws IOException {
Directory dir = new RAMDirectory();
- IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(10));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(100);
- writer.setMergePolicy(new LogDocMergePolicy(writer));
+ IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(
+ TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
+ .setMaxBufferedDocs(10).setMergePolicy(new LogDocMergePolicy()));
for (int i = 0; i < 250; i++) {
addDoc(writer);
checkInvariants(writer);
}
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(5);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(5);
// merge policy only fixes segments on levels where merges
// have been triggered, so check invariants after all adds
@@ -122,9 +124,9 @@
public void testMaxBufferedDocsChange() throws IOException {
Directory dir = new RAMDirectory();
- IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(101));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(101);
- writer.setMergePolicy(new LogDocMergePolicy(writer));
+ IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(
+ TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
+ .setMaxBufferedDocs(101).setMergePolicy(new LogDocMergePolicy()));
// leftmost* segment has 1 doc
// rightmost* segment has 100 docs
@@ -135,17 +137,18 @@
}
writer.close();
- writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
- .setOpenMode(OpenMode.APPEND).setMaxBufferedDocs(101));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(101);
- writer.setMergePolicy(new LogDocMergePolicy(writer));
+ writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT,
+ new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setOpenMode(
+ OpenMode.APPEND).setMaxBufferedDocs(101).setMergePolicy(
+ new LogDocMergePolicy()));
}
writer.close();
- writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
- .setOpenMode(OpenMode.APPEND).setMaxBufferedDocs(10));
- writer.setMergePolicy(new LogDocMergePolicy(writer));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(10);
+ LogDocMergePolicy ldmp = new LogDocMergePolicy();
+ ldmp.setMergeFactor(10);
+ writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT,
+ new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setOpenMode(
+ OpenMode.APPEND).setMaxBufferedDocs(10).setMergePolicy(ldmp));
// merge policy only fixes segments on levels where merges
// have been triggered, so check invariants after all adds
@@ -169,9 +172,11 @@
public void testMergeDocCount0() throws IOException {
Directory dir = new RAMDirectory();
- IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(10));
- writer.setMergePolicy(new LogDocMergePolicy(writer));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(100);
+ LogDocMergePolicy ldmp = new LogDocMergePolicy();
+ ldmp.setMergeFactor(100);
+ IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(
+ TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
+ .setMaxBufferedDocs(10).setMergePolicy(ldmp));
for (int i = 0; i < 250; i++) {
addDoc(writer);
@@ -183,10 +188,11 @@
reader.deleteDocuments(new Term("content", "aaa"));
reader.close();
- writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
- .setOpenMode(OpenMode.APPEND).setMaxBufferedDocs(10));
- writer.setMergePolicy(new LogDocMergePolicy(writer));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(5);
+ ldmp = new LogDocMergePolicy();
+ ldmp.setMergeFactor(5);
+ writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT,
+ new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setOpenMode(
+ OpenMode.APPEND).setMaxBufferedDocs(10).setMergePolicy(ldmp));
// merge factor is changed, so check invariants after all adds
for (int i = 0; i < 10; i++) {
@@ -210,8 +216,8 @@
private void checkInvariants(IndexWriter writer) throws IOException {
_TestUtil.syncConcurrentMerges(writer);
int maxBufferedDocs = writer.getConfig().getMaxBufferedDocs();
- int mergeFactor = ((LogMergePolicy) writer.getMergePolicy()).getMergeFactor();
- int maxMergeDocs = ((LogMergePolicy) writer.getMergePolicy()).getMaxMergeDocs();
+ int mergeFactor = ((LogMergePolicy) writer.getConfig().getMergePolicy()).getMergeFactor();
+ int maxMergeDocs = ((LogMergePolicy) writer.getConfig().getMergePolicy()).getMaxMergeDocs();
int ramSegmentCount = writer.getNumBufferedDocuments();
assertTrue(ramSegmentCount < maxBufferedDocs);
Index: src/test/org/apache/lucene/index/TestIndexWriterMerging.java
===================================================================
--- src/test/org/apache/lucene/index/TestIndexWriterMerging.java (revision 922776)
+++ src/test/org/apache/lucene/index/TestIndexWriterMerging.java (working copy)
@@ -58,7 +58,7 @@
Directory merged = new MockRAMDirectory();
IndexWriter writer = new IndexWriter(merged, new IndexWriterConfig(TEST_VERSION_CURRENT, new StandardAnalyzer(TEST_VERSION_CURRENT)));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(2);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(2);
writer.addIndexesNoOptimize(new Directory[]{indexA, indexB});
writer.optimize();
@@ -97,7 +97,7 @@
TEST_VERSION_CURRENT,
new StandardAnalyzer(TEST_VERSION_CURRENT))
.setOpenMode(OpenMode.CREATE).setMaxBufferedDocs(2));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(2);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(2);
for (int i = start; i < (start + numDocs); i++)
{
Index: src/test/org/apache/lucene/index/TestIndexWriterReader.java
===================================================================
--- src/test/org/apache/lucene/index/TestIndexWriterReader.java (revision 922776)
+++ src/test/org/apache/lucene/index/TestIndexWriterReader.java (working copy)
@@ -491,8 +491,9 @@
public static void createIndex(Directory dir1, String indexName,
boolean multiSegment) throws IOException {
- IndexWriter w = new IndexWriter(dir1, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
- w.setMergePolicy(new LogDocMergePolicy(w));
+ IndexWriter w = new IndexWriter(dir1, new IndexWriterConfig(
+ TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
+ .setMergePolicy(new LogDocMergePolicy()));
for (int i = 0; i < 100; i++) {
w.addDocument(createDocument(i, indexName, 4));
if (multiSegment && (i % 10) == 0) {
@@ -538,7 +539,7 @@
// get a reader to put writer into near real-time mode
IndexReader r1 = writer.getReader();
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(2);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(2);
for (int i = 0; i < 10; i++) {
writer.addDocument(createDocument(i, "test", 4));
@@ -622,7 +623,7 @@
Directory dir1 = new MockRAMDirectory();
final IndexWriter writer = new IndexWriter(dir1, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
writer.setInfoStream(infoStream);
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(2);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(2);
// create the index
createIndexNoClose(false, "test", writer);
@@ -699,7 +700,7 @@
Directory dir1 = new MockRAMDirectory();
final IndexWriter writer = new IndexWriter(dir1, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
writer.setInfoStream(infoStream);
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(2);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(2);
// create the index
createIndexNoClose(false, "test", writer);
Index: src/test/org/apache/lucene/index/TestLazyBug.java
===================================================================
--- src/test/org/apache/lucene/index/TestLazyBug.java (revision 922776)
+++ src/test/org/apache/lucene/index/TestLazyBug.java (working copy)
@@ -73,7 +73,7 @@
Random r = newRandom();
IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(
TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT)));
- LogMergePolicy lmp = (LogMergePolicy) writer.getMergePolicy();
+ LogMergePolicy lmp = (LogMergePolicy) writer.getConfig().getMergePolicy();
lmp.setUseCompoundFile(false);
lmp.setUseCompoundDocStore(false);
Index: src/test/org/apache/lucene/index/TestLazyProxSkipping.java
===================================================================
--- src/test/org/apache/lucene/index/TestLazyProxSkipping.java (revision 922776)
+++ src/test/org/apache/lucene/index/TestLazyProxSkipping.java (working copy)
@@ -61,8 +61,8 @@
Directory directory = new SeekCountingDirectory();
IndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(10));
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundFile(false);
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundDocStore(false);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundFile(false);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundDocStore(false);
for (int i = 0; i < numDocs; i++) {
Document doc = new Document();
String content;
Index: src/test/org/apache/lucene/index/TestNRTReaderWithThreads.java
===================================================================
--- src/test/org/apache/lucene/index/TestNRTReaderWithThreads.java (revision 922776)
+++ src/test/org/apache/lucene/index/TestNRTReaderWithThreads.java (working copy)
@@ -33,9 +33,9 @@
public void testIndexing() throws Exception {
Directory mainDir = new MockRAMDirectory();
IndexWriter writer = new IndexWriter(mainDir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(10));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(2);
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundFile(false);
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundDocStore(false);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(2);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundFile(false);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundDocStore(false);
IndexReader reader = writer.getReader(); // start pooling readers
reader.close();
RunThread[] indexThreads = new RunThread[4];
Index: src/test/org/apache/lucene/index/TestNorms.java
===================================================================
--- src/test/org/apache/lucene/index/TestNorms.java (revision 922776)
+++ src/test/org/apache/lucene/index/TestNorms.java (working copy)
@@ -103,7 +103,7 @@
IndexWriter iw = new IndexWriter(dir3, new IndexWriterConfig(
TEST_VERSION_CURRENT, anlzr).setOpenMode(OpenMode.APPEND)
.setMaxBufferedDocs(5));
- ((LogMergePolicy) iw.getMergePolicy()).setMergeFactor(3);
+ ((LogMergePolicy) iw.getConfig().getMergePolicy()).setMergeFactor(3);
iw.addIndexesNoOptimize(new Directory[]{dir1,dir2});
iw.optimize();
iw.close();
@@ -121,7 +121,7 @@
// now with optimize
iw = new IndexWriter(dir3, new IndexWriterConfig(TEST_VERSION_CURRENT,
anlzr).setOpenMode(OpenMode.APPEND).setMaxBufferedDocs(5));
- ((LogMergePolicy) iw.getMergePolicy()).setMergeFactor(3);
+ ((LogMergePolicy) iw.getConfig().getMergePolicy()).setMergeFactor(3);
iw.optimize();
iw.close();
verifyIndex(dir3);
@@ -148,7 +148,7 @@
IndexWriter iw = new IndexWriter(dir, new IndexWriterConfig(
TEST_VERSION_CURRENT, anlzr).setOpenMode(OpenMode.CREATE)
.setMaxBufferedDocs(5).setSimilarity(similarityOne));
- LogMergePolicy lmp = (LogMergePolicy) iw.getMergePolicy();
+ LogMergePolicy lmp = (LogMergePolicy) iw.getConfig().getMergePolicy();
lmp.setMergeFactor(3);
lmp.setUseCompoundFile(true);
lmp.setUseCompoundDocStore(true);
@@ -192,7 +192,7 @@
IndexWriter iw = new IndexWriter(dir, new IndexWriterConfig(
TEST_VERSION_CURRENT, anlzr).setOpenMode(OpenMode.APPEND)
.setMaxBufferedDocs(5).setSimilarity(similarityOne));
- LogMergePolicy lmp = (LogMergePolicy) iw.getMergePolicy();
+ LogMergePolicy lmp = (LogMergePolicy) iw.getConfig().getMergePolicy();
lmp.setMergeFactor(3);
lmp.setUseCompoundFile(compound);
lmp.setUseCompoundDocStore(compound);
Index: src/test/org/apache/lucene/index/TestOmitTf.java
===================================================================
--- src/test/org/apache/lucene/index/TestOmitTf.java (revision 922776)
+++ src/test/org/apache/lucene/index/TestOmitTf.java (working copy)
@@ -115,7 +115,7 @@
Analyzer analyzer = new StandardAnalyzer(TEST_VERSION_CURRENT);
IndexWriter writer = new IndexWriter(ram, new IndexWriterConfig(
TEST_VERSION_CURRENT, analyzer).setMaxBufferedDocs(3));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(2);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(2);
Document d = new Document();
// this field will have Tf
@@ -168,7 +168,7 @@
Analyzer analyzer = new StandardAnalyzer(TEST_VERSION_CURRENT);
IndexWriter writer = new IndexWriter(ram, new IndexWriterConfig(
TEST_VERSION_CURRENT, analyzer).setMaxBufferedDocs(10));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(2);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(2);
Document d = new Document();
// this field will have Tf
@@ -216,7 +216,7 @@
Analyzer analyzer = new StandardAnalyzer(TEST_VERSION_CURRENT);
IndexWriter writer = new IndexWriter(ram, new IndexWriterConfig(
TEST_VERSION_CURRENT, analyzer).setMaxBufferedDocs(3));
- LogMergePolicy lmp = (LogMergePolicy) writer.getMergePolicy();
+ LogMergePolicy lmp = (LogMergePolicy) writer.getConfig().getMergePolicy();
lmp.setMergeFactor(2);
lmp.setUseCompoundFile(false);
lmp.setUseCompoundDocStore(false);
@@ -250,9 +250,8 @@
IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(
TEST_VERSION_CURRENT, analyzer).setMaxBufferedDocs(2)
.setSimilarity(new SimpleSimilarity()));
- ((LogMergePolicy) writer.getMergePolicy()).setMergeFactor(2);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(2);
-
StringBuilder sb = new StringBuilder(265);
String term = "term";
for(int i = 0; i<30; i++){
Index: src/test/org/apache/lucene/index/TestStressIndexing2.java
===================================================================
--- src/test/org/apache/lucene/index/TestStressIndexing2.java (revision 922776)
+++ src/test/org/apache/lucene/index/TestStressIndexing2.java (working copy)
@@ -137,7 +137,7 @@
IndexWriter w = new MockIndexWriter(dir, new IndexWriterConfig(
TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setOpenMode(OpenMode.CREATE).setRAMBufferSizeMB(
0.1).setMaxBufferedDocs(maxBufferedDocs));
- LogMergePolicy lmp = (LogMergePolicy) w.getMergePolicy();
+ LogMergePolicy lmp = (LogMergePolicy) w.getConfig().getMergePolicy();
lmp.setUseCompoundFile(false);
lmp.setUseCompoundDocStore(false);
lmp.setMergeFactor(mergeFactor);
@@ -188,7 +188,7 @@
IndexWriter w = new MockIndexWriter(dir, new IndexWriterConfig(
TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setOpenMode(OpenMode.CREATE)
.setRAMBufferSizeMB(0.1).setMaxBufferedDocs(maxBufferedDocs));
- LogMergePolicy lmp = (LogMergePolicy) w.getMergePolicy();
+ LogMergePolicy lmp = (LogMergePolicy) w.getConfig().getMergePolicy();
lmp.setUseCompoundFile(false);
lmp.setUseCompoundDocStore(false);
lmp.setMergeFactor(mergeFactor);
Index: src/test/org/apache/lucene/index/TestTermVectorsReader.java
===================================================================
--- src/test/org/apache/lucene/index/TestTermVectorsReader.java (revision 922776)
+++ src/test/org/apache/lucene/index/TestTermVectorsReader.java (working copy)
@@ -93,8 +93,8 @@
Arrays.sort(tokens);
IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MyAnalyzer()));
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundFile(false);
- ((LogMergePolicy) writer.getMergePolicy()).setUseCompoundDocStore(false);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundFile(false);
+ ((LogMergePolicy) writer.getConfig().getMergePolicy()).setUseCompoundDocStore(false);
Document doc = new Document();
for(int i=0;i set;
+ boolean success = false;
+
+ @Override
+ public void run() {
+ try {
+ sleep(RAND.nextInt(10)); // sleep for a short time
+ set.set(new Integer(Integer.parseInt(getName().substring(2))));
+ success = true;
+ } catch (InterruptedException e) {
+ // ignore
+ } catch (RuntimeException e) {
+ // TODO: change exception type
+ // expected.
+ success = false;
+ }
+ }
+ }
+
+ private static final Random RAND = new Random();
+
+ @Test
+ public void testEmptyCtor() throws Exception {
+ SetOnce set = new SetOnce();
+ assertNull(set.get());
+ }
+
+ @Test(expected=AlreadySetException.class)
+ public void testSettingCtor() throws Exception {
+ SetOnce set = new SetOnce(new Integer(5));
+ assertEquals(5, set.get().intValue());
+ set.set(new Integer(7));
+ }
+
+ @Test(expected=AlreadySetException.class)
+ public void testSetOnce() throws Exception {
+ SetOnce set = new SetOnce();
+ set.set(new Integer(5));
+ assertEquals(5, set.get().intValue());
+ set.set(new Integer(7));
+ }
+
+ @Test
+ public void testSetMultiThreaded() throws Exception {
+ long seed = RAND.nextLong();
+ RAND.setSeed(seed);
+ if (VERBOSE) {
+ System.out.println("testSetMultiThreaded: seed=" + seed);
+ }
+ final SetOnce set = new SetOnce();
+ SetOnceThread[] threads = new SetOnceThread[10];
+ for (int i = 0; i < threads.length; i++) {
+ threads[i] = new SetOnceThread();
+ threads[i].setName("t-" + (i+1));
+ threads[i].set = set;
+ }
+
+ for (Thread t : threads) {
+ t.start();
+ }
+
+ for (Thread t : threads) {
+ t.join();
+ }
+
+ for (SetOnceThread t : threads) {
+ if (t.success) {
+ int expectedVal = Integer.parseInt(t.getName().substring(2));
+ assertEquals("thread " + t.getName(), expectedVal, t.set.get().intValue());
+ }
+ }
+ }
+
+}
Property changes on: src\test\org\apache\lucene\util\TestSetOnce.java
___________________________________________________________________
Added: svn:keywords
+ Date Author Id Revision HeadURL
Added: svn:eol-style
+ native