From 43be0a77b5efbd69c06eb7e692a257163a98c9b8 Mon Sep 17 00:00:00 2001 From: Michael McCandless Date: Fri, 30 May 2014 08:16:37 +0000 Subject: [PATCH] LUCENE-5708: remove IWC.clone git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1598489 13f79535-47bb-0310-9956-ffa450edef68 --- lucene/CHANGES.txt | 4 ++ .../index/ConcurrentMergeScheduler.java | 11 +---- .../index/DocumentsWriterPerThreadPool.java | 12 +----- .../org/apache/lucene/index/FlushPolicy.java | 17 +------- .../lucene/index/IndexDeletionPolicy.java | 12 +----- .../apache/lucene/index/IndexUpgrader.java | 10 ++--- .../org/apache/lucene/index/IndexWriter.java | 2 +- .../lucene/index/IndexWriterConfig.java | 27 +----------- .../lucene/index/LiveIndexWriterConfig.java | 29 ------------- .../org/apache/lucene/index/MergePolicy.java | 15 +------ .../apache/lucene/index/MergeScheduler.java | 11 +---- .../lucene/index/SnapshotDeletionPolicy.java | 16 ++----- .../org/apache/lucene/util/InfoStream.java | 12 +----- .../java/org/apache/lucene/util/SetOnce.java | 6 --- .../lucene41/TestBlockPostingsFormat2.java | 8 ++-- .../lucene41/TestBlockPostingsFormat3.java | 5 ++- .../index/TestBinaryDocValuesUpdates.java | 15 ++++--- .../lucene/index/TestDocValuesIndexing.java | 35 +++++++++------ .../lucene/index/TestIndexWriterConfig.java | 43 ------------------- .../lucene/index/TestIndexWriterDelete.java | 5 ++- .../index/TestNumericDocValuesUpdates.java | 15 ++++--- .../index/sorter/SortingMergePolicy.java | 5 --- .../index/BaseStoredFieldsFormatTestCase.java | 10 +++-- .../apache/solr/util/RandomMergePolicy.java | 9 +--- 24 files changed, 77 insertions(+), 257 deletions(-) diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index 9b00d9ea2b2..c45922dc608 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -173,6 +173,10 @@ API Changes * LUCENE-5700: Added oal.util.Accountable that is now implemented by all classes whose memory usage can be estimated. (Robert Muir, Adrien Grand) + +* LUCENE-5708: Remove IndexWriterConfig.clone, so now IndexWriter + simply uses the IndexWriterConfig you pass it, and you must create a + new IndexWriterConfig for each IndexWriter. (Mike McCandless) Optimizations diff --git a/lucene/core/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java b/lucene/core/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java index 06615894eb3..2dbe25f4545 100644 --- a/lucene/core/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java +++ b/lucene/core/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java @@ -47,7 +47,7 @@ public class ConcurrentMergeScheduler extends MergeScheduler { private int mergeThreadPriority = -1; /** List of currently active {@link MergeThread}s. */ - protected List mergeThreads = new ArrayList<>(); + protected final List mergeThreads = new ArrayList<>(); /** * Default {@code maxThreadCount}. @@ -565,13 +565,4 @@ public class ConcurrentMergeScheduler extends MergeScheduler { sb.append("mergeThreadPriority=").append(mergeThreadPriority); return sb.toString(); } - - @Override - public MergeScheduler clone() { - ConcurrentMergeScheduler clone = (ConcurrentMergeScheduler) super.clone(); - clone.writer = null; - clone.dir = null; - clone.mergeThreads = new ArrayList<>(); - return clone; - } } diff --git a/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThreadPool.java b/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThreadPool.java index bd8cfa63a09..b8805f79663 100644 --- a/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThreadPool.java +++ b/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThreadPool.java @@ -35,7 +35,7 @@ import org.apache.lucene.util.ThreadInterruptedException; * new {@link DocumentsWriterPerThread} instance. *

*/ -final class DocumentsWriterPerThreadPool implements Cloneable { +final class DocumentsWriterPerThreadPool { /** * {@link ThreadState} references and guards a @@ -148,16 +148,6 @@ final class DocumentsWriterPerThreadPool implements Cloneable { freeList = new ThreadState[maxNumThreadStates]; } - @Override - public DocumentsWriterPerThreadPool clone() { - // We should only be cloned before being used: - if (numThreadStatesActive != 0) { - throw new IllegalStateException("clone this object before it is used!"); - } - - return new DocumentsWriterPerThreadPool(threadStates.length); - } - /** * Returns the max number of {@link ThreadState} instances available in this * {@link DocumentsWriterPerThreadPool} diff --git a/lucene/core/src/java/org/apache/lucene/index/FlushPolicy.java b/lucene/core/src/java/org/apache/lucene/index/FlushPolicy.java index 2bc7b201291..bddf58dd65e 100644 --- a/lucene/core/src/java/org/apache/lucene/index/FlushPolicy.java +++ b/lucene/core/src/java/org/apache/lucene/index/FlushPolicy.java @@ -21,7 +21,6 @@ import java.util.Iterator; import org.apache.lucene.index.DocumentsWriterPerThreadPool.ThreadState; import org.apache.lucene.store.Directory; import org.apache.lucene.util.InfoStream; -import org.apache.lucene.util.SetOnce; /** * {@link FlushPolicy} controls when segments are flushed from a RAM resident @@ -52,7 +51,7 @@ import org.apache.lucene.util.SetOnce; * @see DocumentsWriterPerThread * @see IndexWriterConfig#setFlushPolicy(FlushPolicy) */ -abstract class FlushPolicy implements Cloneable { +abstract class FlushPolicy { protected LiveIndexWriterConfig indexWriterConfig; protected InfoStream infoStream; @@ -143,18 +142,4 @@ abstract class FlushPolicy implements Cloneable { } return true; } - - @Override - public FlushPolicy clone() { - FlushPolicy clone; - try { - clone = (FlushPolicy) super.clone(); - } catch (CloneNotSupportedException e) { - // should not happen - throw new RuntimeException(e); - } - clone.indexWriterConfig = null; - clone.infoStream = null; - return clone; - } } diff --git a/lucene/core/src/java/org/apache/lucene/index/IndexDeletionPolicy.java b/lucene/core/src/java/org/apache/lucene/index/IndexDeletionPolicy.java index a5b0aabf3ec..4f582f6b7bd 100644 --- a/lucene/core/src/java/org/apache/lucene/index/IndexDeletionPolicy.java +++ b/lucene/core/src/java/org/apache/lucene/index/IndexDeletionPolicy.java @@ -54,7 +54,7 @@ import org.apache.lucene.store.Directory; * or {@link Directory} instance.

*/ -public abstract class IndexDeletionPolicy implements Cloneable { +public abstract class IndexDeletionPolicy { /** Sole constructor, typically called by sub-classes constructors. */ protected IndexDeletionPolicy() {} @@ -106,14 +106,4 @@ public abstract class IndexDeletionPolicy implements Cloneable { * sorted by age (the 0th one is the oldest commit). */ public abstract void onCommit(List commits) throws IOException; - - @Override - public IndexDeletionPolicy clone() { - try { - return (IndexDeletionPolicy) super.clone(); - } catch (CloneNotSupportedException e) { - throw new Error(e); - } - } - } diff --git a/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java b/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java index a28bd9dd3af..6e65b98d615 100644 --- a/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java +++ b/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java @@ -27,7 +27,6 @@ import org.apache.lucene.util.Version; import java.io.File; import java.io.IOException; -import java.io.PrintStream; import java.util.Collection; /** @@ -155,13 +154,12 @@ public final class IndexUpgrader { } } - final IndexWriterConfig c = iwc.clone(); - c.setMergePolicy(new UpgradeIndexMergePolicy(c.getMergePolicy())); - c.setIndexDeletionPolicy(new KeepOnlyLastCommitDeletionPolicy()); + iwc.setMergePolicy(new UpgradeIndexMergePolicy(iwc.getMergePolicy())); + iwc.setIndexDeletionPolicy(new KeepOnlyLastCommitDeletionPolicy()); - final IndexWriter w = new IndexWriter(dir, c); + final IndexWriter w = new IndexWriter(dir, iwc); try { - InfoStream infoStream = c.getInfoStream(); + InfoStream infoStream = iwc.getInfoStream(); if (infoStream.isEnabled("IndexUpgrader")) { infoStream.message("IndexUpgrader", "Upgrading all pre-" + Constants.LUCENE_MAIN_VERSION + " segments of index directory '" + dir + "' to version " + Constants.LUCENE_MAIN_VERSION + "..."); } diff --git a/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java b/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java index d27a8c7acc0..8a1690559fd 100644 --- a/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java +++ b/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java @@ -700,7 +700,7 @@ public class IndexWriter implements Closeable, TwoPhaseCommit{ */ public IndexWriter(Directory d, IndexWriterConfig conf) throws IOException { conf.setIndexWriter(this); // prevent reuse by other instances - config = new LiveIndexWriterConfig(conf); + config = conf; directory = d; analyzer = config.getAnalyzer(); infoStream = config.getInfoStream(); diff --git a/lucene/core/src/java/org/apache/lucene/index/IndexWriterConfig.java b/lucene/core/src/java/org/apache/lucene/index/IndexWriterConfig.java index b06126797df..915da44cf27 100644 --- a/lucene/core/src/java/org/apache/lucene/index/IndexWriterConfig.java +++ b/lucene/core/src/java/org/apache/lucene/index/IndexWriterConfig.java @@ -49,7 +49,7 @@ import org.apache.lucene.util.Version; * * @since 3.1 */ -public final class IndexWriterConfig extends LiveIndexWriterConfig implements Cloneable { +public final class IndexWriterConfig extends LiveIndexWriterConfig { /** * Specifies the open mode for {@link IndexWriter}. @@ -164,31 +164,6 @@ public final class IndexWriterConfig extends LiveIndexWriterConfig implements Cl super(analyzer, matchVersion); } - @Override - public IndexWriterConfig clone() { - try { - IndexWriterConfig clone = (IndexWriterConfig) super.clone(); - - clone.writer = writer.clone(); - - // Mostly shallow clone, but do a deepish clone of - // certain objects that have state that cannot be shared - // across IW instances: - clone.delPolicy = delPolicy.clone(); - clone.flushPolicy = flushPolicy.clone(); - clone.indexerThreadPool = indexerThreadPool.clone(); - // we clone the infoStream because some impls might have state variables - // such as line numbers, message throughput, ... - clone.infoStream = infoStream.clone(); - clone.mergePolicy = mergePolicy.clone(); - clone.mergeScheduler = mergeScheduler.clone(); - - return clone; - } catch (CloneNotSupportedException e) { - throw new RuntimeException(e); - } - } - /** Specifies {@link OpenMode} of the index. * *

Only takes effect when IndexWriter is first created. */ diff --git a/lucene/core/src/java/org/apache/lucene/index/LiveIndexWriterConfig.java b/lucene/core/src/java/org/apache/lucene/index/LiveIndexWriterConfig.java index 7fd86614721..5dd4c96d2fc 100644 --- a/lucene/core/src/java/org/apache/lucene/index/LiveIndexWriterConfig.java +++ b/lucene/core/src/java/org/apache/lucene/index/LiveIndexWriterConfig.java @@ -129,35 +129,6 @@ public class LiveIndexWriterConfig { perThreadHardLimitMB = IndexWriterConfig.DEFAULT_RAM_PER_THREAD_HARD_LIMIT_MB; } - /** - * Creates a new config that that handles the live {@link IndexWriter} - * settings. - */ - LiveIndexWriterConfig(IndexWriterConfig config) { - maxBufferedDeleteTerms = config.getMaxBufferedDeleteTerms(); - maxBufferedDocs = config.getMaxBufferedDocs(); - mergedSegmentWarmer = config.getMergedSegmentWarmer(); - ramBufferSizeMB = config.getRAMBufferSizeMB(); - matchVersion = config.matchVersion; - analyzer = config.getAnalyzer(); - delPolicy = config.getIndexDeletionPolicy(); - commit = config.getIndexCommit(); - openMode = config.getOpenMode(); - similarity = config.getSimilarity(); - mergeScheduler = config.getMergeScheduler(); - writeLockTimeout = config.getWriteLockTimeout(); - indexingChain = config.getIndexingChain(); - codec = config.getCodec(); - infoStream = config.getInfoStream(); - mergePolicy = config.getMergePolicy(); - indexerThreadPool = config.getIndexerThreadPool(); - readerPooling = config.getReaderPooling(); - flushPolicy = config.getFlushPolicy(); - perThreadHardLimitMB = config.getRAMPerThreadHardLimitMB(); - useCompoundFile = config.getUseCompoundFile(); - checkIntegrityAtMerge = config.getCheckIntegrityAtMerge(); - } - /** Returns the default analyzer to use for indexing documents. */ public Analyzer getAnalyzer() { return analyzer; diff --git a/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java b/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java index e2f31aba87e..632f45c803b 100644 --- a/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java +++ b/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java @@ -57,7 +57,7 @@ import java.util.Map; * * @lucene.experimental */ -public abstract class MergePolicy implements java.io.Closeable, Cloneable { +public abstract class MergePolicy implements java.io.Closeable { /** A map of doc IDs. */ public static abstract class DocMap { @@ -384,19 +384,6 @@ public abstract class MergePolicy implements java.io.Closeable, Cloneable { * this value then it will not use compound file format. */ protected long maxCFSSegmentSize = DEFAULT_MAX_CFS_SEGMENT_SIZE; - @Override - public MergePolicy clone() { - MergePolicy clone; - try { - clone = (MergePolicy) super.clone(); - } catch (CloneNotSupportedException e) { - // should not happen - throw new RuntimeException(e); - } - clone.writer = new SetOnce<>(); - return clone; - } - /** * Creates a new merge policy instance. Note that if you intend to use it * without passing it to {@link IndexWriter}, you should call diff --git a/lucene/core/src/java/org/apache/lucene/index/MergeScheduler.java b/lucene/core/src/java/org/apache/lucene/index/MergeScheduler.java index b5a7bcd9599..b248634bbab 100644 --- a/lucene/core/src/java/org/apache/lucene/index/MergeScheduler.java +++ b/lucene/core/src/java/org/apache/lucene/index/MergeScheduler.java @@ -29,7 +29,7 @@ import java.io.IOException; * instance.

* @lucene.experimental */ -public abstract class MergeScheduler implements Closeable, Cloneable { +public abstract class MergeScheduler implements Closeable { /** Sole constructor. (For invocation by subclass * constructors, typically implicit.) */ @@ -46,13 +46,4 @@ public abstract class MergeScheduler implements Closeable, Cloneable { /** Close this MergeScheduler. */ @Override public abstract void close() throws IOException; - - @Override - public MergeScheduler clone() { - try { - return (MergeScheduler) super.clone(); - } catch (CloneNotSupportedException e) { - throw new Error(e); - } - } } diff --git a/lucene/core/src/java/org/apache/lucene/index/SnapshotDeletionPolicy.java b/lucene/core/src/java/org/apache/lucene/index/SnapshotDeletionPolicy.java index 0f78e3d8a54..ad4ed7d13b3 100644 --- a/lucene/core/src/java/org/apache/lucene/index/SnapshotDeletionPolicy.java +++ b/lucene/core/src/java/org/apache/lucene/index/SnapshotDeletionPolicy.java @@ -47,13 +47,13 @@ public class SnapshotDeletionPolicy extends IndexDeletionPolicy { /** Records how many snapshots are held against each * commit generation */ - protected Map refCounts = new HashMap<>(); + protected final Map refCounts = new HashMap<>(); /** Used to map gen to IndexCommit. */ - protected Map indexCommits = new HashMap<>(); + protected final Map indexCommits = new HashMap<>(); /** Wrapped {@link IndexDeletionPolicy} */ - private IndexDeletionPolicy primary; + private final IndexDeletionPolicy primary; /** Most recently committed {@link IndexCommit}. */ protected IndexCommit lastCommit; @@ -187,16 +187,6 @@ public class SnapshotDeletionPolicy extends IndexDeletionPolicy { return indexCommits.get(gen); } - @Override - public synchronized IndexDeletionPolicy clone() { - SnapshotDeletionPolicy other = (SnapshotDeletionPolicy) super.clone(); - other.primary = this.primary.clone(); - other.lastCommit = null; - other.refCounts = new HashMap<>(refCounts); - other.indexCommits = new HashMap<>(indexCommits); - return other; - } - /** Wraps each {@link IndexCommit} as a {@link * SnapshotCommitPoint}. */ private List wrapCommits(List commits) { diff --git a/lucene/core/src/java/org/apache/lucene/util/InfoStream.java b/lucene/core/src/java/org/apache/lucene/util/InfoStream.java index deef9fa33c3..bc67637e3e2 100644 --- a/lucene/core/src/java/org/apache/lucene/util/InfoStream.java +++ b/lucene/core/src/java/org/apache/lucene/util/InfoStream.java @@ -30,7 +30,7 @@ import java.io.Closeable; * * @lucene.internal */ -public abstract class InfoStream implements Closeable, Cloneable { +public abstract class InfoStream implements Closeable { /** Instance of InfoStream that does no logging at all. */ public static final InfoStream NO_OUTPUT = new NoOutput(); @@ -74,14 +74,4 @@ public abstract class InfoStream implements Closeable, Cloneable { } defaultInfoStream = infoStream; } - - @Override - public InfoStream clone() { - try { - return (InfoStream) super.clone(); - } catch (CloneNotSupportedException e) { - throw new Error(e); - } - } - } diff --git a/lucene/core/src/java/org/apache/lucene/util/SetOnce.java b/lucene/core/src/java/org/apache/lucene/util/SetOnce.java index 5b3cfd0f43b..d9792540ea8 100644 --- a/lucene/core/src/java/org/apache/lucene/util/SetOnce.java +++ b/lucene/core/src/java/org/apache/lucene/util/SetOnce.java @@ -74,10 +74,4 @@ public final class SetOnce implements Cloneable { public final T get() { return obj; } - - @Override - public SetOnce clone() { - return obj == null ? new SetOnce() : new SetOnce<>(obj); - } - } diff --git a/lucene/core/src/test/org/apache/lucene/codecs/lucene41/TestBlockPostingsFormat2.java b/lucene/core/src/test/org/apache/lucene/codecs/lucene41/TestBlockPostingsFormat2.java index 93071f80c03..7e9afbfe306 100644 --- a/lucene/core/src/test/org/apache/lucene/codecs/lucene41/TestBlockPostingsFormat2.java +++ b/lucene/core/src/test/org/apache/lucene/codecs/lucene41/TestBlockPostingsFormat2.java @@ -38,15 +38,14 @@ import org.apache.lucene.util.TestUtil; public class TestBlockPostingsFormat2 extends LuceneTestCase { Directory dir; RandomIndexWriter iw; - IndexWriterConfig iwc; @Override public void setUp() throws Exception { super.setUp(); dir = newFSDirectory(createTempDir("testDFBlockSize")); - iwc = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); + IndexWriterConfig iwc = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); iwc.setCodec(TestUtil.alwaysPostingsFormat(new Lucene41PostingsFormat())); - iw = new RandomIndexWriter(random(), dir, iwc.clone()); + iw = new RandomIndexWriter(random(), dir, iwc); iw.setDoRandomForceMerge(false); // we will ourselves } @@ -54,8 +53,9 @@ public class TestBlockPostingsFormat2 extends LuceneTestCase { public void tearDown() throws Exception { iw.shutdown(); TestUtil.checkIndex(dir); // for some extra coverage, checkIndex before we forceMerge + IndexWriterConfig iwc = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); iwc.setOpenMode(OpenMode.APPEND); - IndexWriter iw = new IndexWriter(dir, iwc.clone()); + IndexWriter iw = new IndexWriter(dir, iwc); iw.forceMerge(1); iw.shutdown(); dir.close(); // just force a checkindex for now diff --git a/lucene/core/src/test/org/apache/lucene/codecs/lucene41/TestBlockPostingsFormat3.java b/lucene/core/src/test/org/apache/lucene/codecs/lucene41/TestBlockPostingsFormat3.java index 66bd9c0c134..69770a11428 100644 --- a/lucene/core/src/test/org/apache/lucene/codecs/lucene41/TestBlockPostingsFormat3.java +++ b/lucene/core/src/test/org/apache/lucene/codecs/lucene41/TestBlockPostingsFormat3.java @@ -86,7 +86,7 @@ public class TestBlockPostingsFormat3 extends LuceneTestCase { iwc.setCodec(TestUtil.alwaysPostingsFormat(new Lucene41PostingsFormat())); // TODO we could actually add more fields implemented with different PFs // or, just put this test into the usual rotation? - RandomIndexWriter iw = new RandomIndexWriter(random(), dir, iwc.clone()); + RandomIndexWriter iw = new RandomIndexWriter(random(), dir, iwc); Document doc = new Document(); FieldType docsOnlyType = new FieldType(TextField.TYPE_NOT_STORED); // turn this on for a cross-check @@ -137,8 +137,9 @@ public class TestBlockPostingsFormat3 extends LuceneTestCase { iw.shutdown(); verify(dir); TestUtil.checkIndex(dir); // for some extra coverage, checkIndex before we forceMerge + iwc = newIndexWriterConfig(TEST_VERSION_CURRENT, analyzer); iwc.setOpenMode(OpenMode.APPEND); - IndexWriter iw2 = new IndexWriter(dir, iwc.clone()); + IndexWriter iw2 = new IndexWriter(dir, iwc); iw2.forceMerge(1); iw2.shutdown(); verify(dir); diff --git a/lucene/core/src/test/org/apache/lucene/index/TestBinaryDocValuesUpdates.java b/lucene/core/src/test/org/apache/lucene/index/TestBinaryDocValuesUpdates.java index f1b1191dc46..cc7aab9a920 100644 --- a/lucene/core/src/test/org/apache/lucene/index/TestBinaryDocValuesUpdates.java +++ b/lucene/core/src/test/org/apache/lucene/index/TestBinaryDocValuesUpdates.java @@ -566,7 +566,7 @@ public class TestBinaryDocValuesUpdates extends LuceneTestCase { Directory dir = newDirectory(); Random random = random(); IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)); - IndexWriter writer = new IndexWriter(dir, conf.clone()); + IndexWriter writer = new IndexWriter(dir, conf); int docid = 0; int numRounds = atLeast(10); @@ -593,7 +593,8 @@ public class TestBinaryDocValuesUpdates extends LuceneTestCase { writer.commit(); } else if (random.nextDouble() < 0.1) { writer.shutdown(); - writer = new IndexWriter(dir, conf.clone()); + conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)); + writer = new IndexWriter(dir, conf); } // add another document with the current value, to be sure forceMerge has @@ -1082,7 +1083,7 @@ public class TestBinaryDocValuesUpdates extends LuceneTestCase { return new Lucene45DocValuesFormat(); } }); - IndexWriter writer = new IndexWriter(dir, conf.clone()); + IndexWriter writer = new IndexWriter(dir, conf); Document doc = new Document(); doc.add(new StringField("id", "d0", Store.NO)); doc.add(new BinaryDocValuesField("f1", toBytes(5L))); @@ -1091,13 +1092,14 @@ public class TestBinaryDocValuesUpdates extends LuceneTestCase { writer.shutdown(); // change format + conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); conf.setCodec(new Lucene46Codec() { @Override public DocValuesFormat getDocValuesFormatForField(String field) { return new AssertingDocValuesFormat(); } }); - writer = new IndexWriter(dir, conf.clone()); + writer = new IndexWriter(dir, conf); doc = new Document(); doc.add(new StringField("id", "d1", Store.NO)); doc.add(new BinaryDocValuesField("f1", toBytes(17L))); @@ -1358,7 +1360,7 @@ public class TestBinaryDocValuesUpdates extends LuceneTestCase { conf.setMergePolicy(NoMergePolicy.INSTANCE); conf.setMaxBufferedDocs(Integer.MAX_VALUE); // manually flush conf.setRAMBufferSizeMB(IndexWriterConfig.DISABLE_AUTO_FLUSH); - IndexWriter writer = new IndexWriter(dir, conf.clone()); + IndexWriter writer = new IndexWriter(dir, conf); for (int i = 0; i < 100; i++) { writer.addDocument(doc(i)); } @@ -1366,7 +1368,8 @@ public class TestBinaryDocValuesUpdates extends LuceneTestCase { writer.close(); NRTCachingDirectory cachingDir = new NRTCachingDirectory(dir, 100, 1/(1024.*1024.)); - writer = new IndexWriter(cachingDir, conf.clone()); + conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); + writer = new IndexWriter(cachingDir, conf); writer.updateBinaryDocValue(new Term("id", "doc-0"), "val", toBytes(100L)); DirectoryReader reader = DirectoryReader.open(writer, true); // flush assertEquals(0, cachingDir.listCachedFiles().length); diff --git a/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java b/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java index 0b6b5c85877..84440a5ea86 100644 --- a/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java +++ b/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java @@ -572,13 +572,14 @@ public class TestDocValuesIndexing extends LuceneTestCase { public void testIllegalTypeChangeAcrossSegments() throws Exception { Directory dir = newDirectory(); IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); - IndexWriter writer = new IndexWriter(dir, conf.clone()); + IndexWriter writer = new IndexWriter(dir, conf); Document doc = new Document(); doc.add(new NumericDocValuesField("dv", 0L)); writer.addDocument(doc); writer.shutdown(); - writer = new IndexWriter(dir, conf.clone()); + conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); + writer = new IndexWriter(dir, conf); doc = new Document(); doc.add(new SortedDocValuesField("dv", new BytesRef("foo"))); try { @@ -594,13 +595,14 @@ public class TestDocValuesIndexing extends LuceneTestCase { public void testTypeChangeAfterCloseAndDeleteAll() throws Exception { Directory dir = newDirectory(); IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); - IndexWriter writer = new IndexWriter(dir, conf.clone()); + IndexWriter writer = new IndexWriter(dir, conf); Document doc = new Document(); doc.add(new NumericDocValuesField("dv", 0L)); writer.addDocument(doc); writer.shutdown(); - writer = new IndexWriter(dir, conf.clone()); + conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); + writer = new IndexWriter(dir, conf); writer.deleteAll(); doc = new Document(); doc.add(new SortedDocValuesField("dv", new BytesRef("foo"))); @@ -643,13 +645,14 @@ public class TestDocValuesIndexing extends LuceneTestCase { public void testTypeChangeAfterOpenCreate() throws Exception { Directory dir = newDirectory(); IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); - IndexWriter writer = new IndexWriter(dir, conf.clone()); + IndexWriter writer = new IndexWriter(dir, conf); Document doc = new Document(); doc.add(new NumericDocValuesField("dv", 0L)); writer.addDocument(doc); writer.shutdown(); + conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); conf.setOpenMode(IndexWriterConfig.OpenMode.CREATE); - writer = new IndexWriter(dir, conf.clone()); + writer = new IndexWriter(dir, conf); doc = new Document(); doc.add(new SortedDocValuesField("dv", new BytesRef("foo"))); writer.addDocument(doc); @@ -660,14 +663,15 @@ public class TestDocValuesIndexing extends LuceneTestCase { public void testTypeChangeViaAddIndexes() throws Exception { Directory dir = newDirectory(); IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); - IndexWriter writer = new IndexWriter(dir, conf.clone()); + IndexWriter writer = new IndexWriter(dir, conf); Document doc = new Document(); doc.add(new NumericDocValuesField("dv", 0L)); writer.addDocument(doc); writer.shutdown(); Directory dir2 = newDirectory(); - writer = new IndexWriter(dir2, conf.clone()); + conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); + writer = new IndexWriter(dir2, conf); doc = new Document(); doc.add(new SortedDocValuesField("dv", new BytesRef("foo"))); writer.addDocument(doc); @@ -686,14 +690,15 @@ public class TestDocValuesIndexing extends LuceneTestCase { public void testTypeChangeViaAddIndexesIR() throws Exception { Directory dir = newDirectory(); IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); - IndexWriter writer = new IndexWriter(dir, conf.clone()); + IndexWriter writer = new IndexWriter(dir, conf); Document doc = new Document(); doc.add(new NumericDocValuesField("dv", 0L)); writer.addDocument(doc); writer.shutdown(); Directory dir2 = newDirectory(); - writer = new IndexWriter(dir2, conf.clone()); + conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); + writer = new IndexWriter(dir2, conf); doc = new Document(); doc.add(new SortedDocValuesField("dv", new BytesRef("foo"))); writer.addDocument(doc); @@ -714,14 +719,15 @@ public class TestDocValuesIndexing extends LuceneTestCase { public void testTypeChangeViaAddIndexes2() throws Exception { Directory dir = newDirectory(); IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); - IndexWriter writer = new IndexWriter(dir, conf.clone()); + IndexWriter writer = new IndexWriter(dir, conf); Document doc = new Document(); doc.add(new NumericDocValuesField("dv", 0L)); writer.addDocument(doc); writer.shutdown(); Directory dir2 = newDirectory(); - writer = new IndexWriter(dir2, conf.clone()); + conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); + writer = new IndexWriter(dir2, conf); writer.addIndexes(dir); doc = new Document(); doc.add(new SortedDocValuesField("dv", new BytesRef("foo"))); @@ -739,14 +745,15 @@ public class TestDocValuesIndexing extends LuceneTestCase { public void testTypeChangeViaAddIndexesIR2() throws Exception { Directory dir = newDirectory(); IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); - IndexWriter writer = new IndexWriter(dir, conf.clone()); + IndexWriter writer = new IndexWriter(dir, conf); Document doc = new Document(); doc.add(new NumericDocValuesField("dv", 0L)); writer.addDocument(doc); writer.shutdown(); Directory dir2 = newDirectory(); - writer = new IndexWriter(dir2, conf.clone()); + conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); + writer = new IndexWriter(dir2, conf); IndexReader[] readers = new IndexReader[] {DirectoryReader.open(dir)}; writer.addIndexes(readers); readers[0].close(); diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterConfig.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterConfig.java index 64646342266..d1539894c80 100644 --- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterConfig.java +++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterConfig.java @@ -154,19 +154,6 @@ public class TestIndexWriterConfig extends LuceneTestCase { // expected } - // also cloning it won't help, after it has been used already - try { - assertNotNull(new RandomIndexWriter(random(), dir, conf.clone())); - fail("should have hit AlreadySetException"); - } catch (AlreadySetException e) { - // expected - } - - // if it's cloned in advance, it should be ok - conf = newIndexWriterConfig(TEST_VERSION_CURRENT, null); - new RandomIndexWriter(random(), dir, conf.clone()).shutdown(); - new RandomIndexWriter(random(), dir, conf.clone()).shutdown(); - dir.close(); } @@ -224,36 +211,6 @@ public class TestIndexWriterConfig extends LuceneTestCase { } } - @Test - public void testClone() throws Exception { - IndexWriterConfig conf = new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); - IndexWriterConfig clone = conf.clone(); - - // Make sure parameters that can't be reused are cloned - IndexDeletionPolicy delPolicy = conf.delPolicy; - IndexDeletionPolicy delPolicyClone = clone.delPolicy; - assertTrue(delPolicy.getClass() == delPolicyClone.getClass() && (delPolicy != delPolicyClone || delPolicy.clone() == delPolicyClone.clone())); - - FlushPolicy flushPolicy = conf.flushPolicy; - FlushPolicy flushPolicyClone = clone.flushPolicy; - assertTrue(flushPolicy.getClass() == flushPolicyClone.getClass() && (flushPolicy != flushPolicyClone || flushPolicy.clone() == flushPolicyClone.clone())); - - DocumentsWriterPerThreadPool pool = conf.indexerThreadPool; - DocumentsWriterPerThreadPool poolClone = clone.indexerThreadPool; - assertTrue(pool.getClass() == poolClone.getClass() && (pool != poolClone || pool.clone() == poolClone.clone())); - - MergePolicy mergePolicy = conf.mergePolicy; - MergePolicy mergePolicyClone = clone.mergePolicy; - assertTrue(mergePolicy.getClass() == mergePolicyClone.getClass() && (mergePolicy != mergePolicyClone || mergePolicy.clone() == mergePolicyClone.clone())); - - MergeScheduler mergeSched = conf.mergeScheduler; - MergeScheduler mergeSchedClone = clone.mergeScheduler; - assertTrue(mergeSched.getClass() == mergeSchedClone.getClass() && (mergeSched != mergeSchedClone || mergeSched.clone() == mergeSchedClone.clone())); - - conf.setMergeScheduler(new SerialMergeScheduler()); - assertEquals(ConcurrentMergeScheduler.class, clone.getMergeScheduler().getClass()); - } - @Test public void testInvalidValues() throws Exception { IndexWriterConfig conf = new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterDelete.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterDelete.java index 829d26823e0..db6060583ed 100644 --- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterDelete.java +++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterDelete.java @@ -1153,7 +1153,7 @@ public class TestIndexWriterDelete extends LuceneTestCase { Directory dir = newDirectory(); IndexWriterConfig iwc = new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); iwc.setMaxBufferedDocs(2); - IndexWriter w = new IndexWriter(dir, iwc.clone()); + IndexWriter w = new IndexWriter(dir, iwc); Document doc = new Document(); doc.add(newField("field", "0", StringField.TYPE_NOT_STORED)); w.addDocument(doc); @@ -1178,7 +1178,8 @@ public class TestIndexWriterDelete extends LuceneTestCase { // Segment should have deletions: assertTrue(s.contains("has deletions")); - w = new IndexWriter(dir, iwc.clone()); + iwc = new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); + w = new IndexWriter(dir, iwc); w.forceMerge(1); w.shutdown(); diff --git a/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java b/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java index 7f28b046562..eb2b0967b04 100644 --- a/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java +++ b/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java @@ -547,7 +547,7 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase { Directory dir = newDirectory(); Random random = random(); IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)); - IndexWriter writer = new IndexWriter(dir, conf.clone()); + IndexWriter writer = new IndexWriter(dir, conf); int docid = 0; int numRounds = atLeast(10); @@ -574,7 +574,8 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase { writer.commit(); } else if (random.nextDouble() < 0.1) { writer.shutdown(); - writer = new IndexWriter(dir, conf.clone()); + conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)); + writer = new IndexWriter(dir, conf); } // add another document with the current value, to be sure forceMerge has @@ -1064,7 +1065,7 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase { return new Lucene45DocValuesFormat(); } }); - IndexWriter writer = new IndexWriter(dir, conf.clone()); + IndexWriter writer = new IndexWriter(dir, conf); Document doc = new Document(); doc.add(new StringField("id", "d0", Store.NO)); doc.add(new NumericDocValuesField("f1", 5L)); @@ -1073,13 +1074,14 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase { writer.shutdown(); // change format + conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); conf.setCodec(new Lucene46Codec() { @Override public DocValuesFormat getDocValuesFormatForField(String field) { return new AssertingDocValuesFormat(); } }); - writer = new IndexWriter(dir, conf.clone()); + writer = new IndexWriter(dir, conf); doc = new Document(); doc.add(new StringField("id", "d1", Store.NO)); doc.add(new NumericDocValuesField("f1", 17L)); @@ -1341,7 +1343,7 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase { conf.setMergePolicy(NoMergePolicy.INSTANCE); conf.setMaxBufferedDocs(Integer.MAX_VALUE); // manually flush conf.setRAMBufferSizeMB(IndexWriterConfig.DISABLE_AUTO_FLUSH); - IndexWriter writer = new IndexWriter(dir, conf.clone()); + IndexWriter writer = new IndexWriter(dir, conf); for (int i = 0; i < 100; i++) { writer.addDocument(doc(i)); } @@ -1349,7 +1351,8 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase { writer.close(); NRTCachingDirectory cachingDir = new NRTCachingDirectory(dir, 100, 1/(1024.*1024.)); - writer = new IndexWriter(cachingDir, conf.clone()); + conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); + writer = new IndexWriter(cachingDir, conf); writer.updateNumericDocValue(new Term("id", "doc-0"), "val", 100L); DirectoryReader reader = DirectoryReader.open(writer, true); // flush assertEquals(0, cachingDir.listCachedFiles().length); diff --git a/lucene/misc/src/java/org/apache/lucene/index/sorter/SortingMergePolicy.java b/lucene/misc/src/java/org/apache/lucene/index/sorter/SortingMergePolicy.java index 034486a781f..afc9cac3649 100644 --- a/lucene/misc/src/java/org/apache/lucene/index/sorter/SortingMergePolicy.java +++ b/lucene/misc/src/java/org/apache/lucene/index/sorter/SortingMergePolicy.java @@ -203,11 +203,6 @@ public final class SortingMergePolicy extends MergePolicy { return sortedMergeSpecification(in.findForcedDeletesMerges(segmentInfos)); } - @Override - public MergePolicy clone() { - return new SortingMergePolicy(in.clone(), sort); - } - @Override public void close() { in.close(); diff --git a/lucene/test-framework/src/java/org/apache/lucene/index/BaseStoredFieldsFormatTestCase.java b/lucene/test-framework/src/java/org/apache/lucene/index/BaseStoredFieldsFormatTestCase.java index 7e11a3974a2..3927b9ced9f 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/index/BaseStoredFieldsFormatTestCase.java +++ b/lucene/test-framework/src/java/org/apache/lucene/index/BaseStoredFieldsFormatTestCase.java @@ -498,7 +498,7 @@ public abstract class BaseStoredFieldsFormatTestCase extends BaseIndexFileFormat Directory dir = newDirectory(); IndexWriterConfig iwConf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); iwConf.setMaxBufferedDocs(RandomInts.randomIntBetween(random(), 2, 30)); - RandomIndexWriter iw = new RandomIndexWriter(random(), dir, iwConf.clone()); + RandomIndexWriter iw = new RandomIndexWriter(random(), dir, iwConf); final int docCount = atLeast(200); final byte[][][] data = new byte [docCount][][]; @@ -531,13 +531,15 @@ public abstract class BaseStoredFieldsFormatTestCase extends BaseIndexFileFormat iw.w.addDocument(doc); if (random().nextBoolean() && (i % (data.length / 10) == 0)) { iw.w.shutdown(); + IndexWriterConfig iwConfNew = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); // test merging against a non-compressing codec if (iwConf.getCodec() == otherCodec) { - iwConf.setCodec(Codec.getDefault()); + iwConfNew.setCodec(Codec.getDefault()); } else { - iwConf.setCodec(otherCodec); + iwConfNew.setCodec(otherCodec); } - iw = new RandomIndexWriter(random(), dir, iwConf.clone()); + iwConf = iwConfNew; + iw = new RandomIndexWriter(random(), dir, iwConf); } } diff --git a/solr/test-framework/src/java/org/apache/solr/util/RandomMergePolicy.java b/solr/test-framework/src/java/org/apache/solr/util/RandomMergePolicy.java index 5571a0945f9..88f46035a2d 100644 --- a/solr/test-framework/src/java/org/apache/solr/util/RandomMergePolicy.java +++ b/solr/test-framework/src/java/org/apache/solr/util/RandomMergePolicy.java @@ -41,11 +41,12 @@ public final class RandomMergePolicy extends MergePolicy { * Not private so tests can inspect it, * Not final so it can be set on clone */ - MergePolicy inner; + final MergePolicy inner; public RandomMergePolicy() { this(LuceneTestCase.newMergePolicy()); } + private RandomMergePolicy(MergePolicy inner) { super(inner.getNoCFSRatio(), (long) (inner.getMaxCFSSegmentSizeMB() * 1024 * 1024)); @@ -54,12 +55,6 @@ public final class RandomMergePolicy extends MergePolicy { inner.getClass(), inner); } - public RandomMergePolicy clone() { - RandomMergePolicy clone = (RandomMergePolicy) super.clone(); - clone.inner = this.inner.clone(); - return clone; - } - public void close() { inner.close(); }