|
67 | 67 | import org.apache.lucene.index.Terms; |
68 | 68 | import org.apache.lucene.index.TermsEnum; |
69 | 69 | import org.apache.lucene.index.TieredMergePolicy; |
| 70 | +import org.apache.lucene.sandbox.index.MergeOnFlushMergePolicy; |
70 | 71 | import org.apache.lucene.search.IndexSearcher; |
71 | 72 | import org.apache.lucene.search.MatchAllDocsQuery; |
72 | 73 | import org.apache.lucene.search.ReferenceManager; |
|
142 | 143 | import org.opensearch.index.seqno.RetentionLeases; |
143 | 144 | import org.opensearch.index.seqno.SeqNoStats; |
144 | 145 | import org.opensearch.index.seqno.SequenceNumbers; |
| 146 | +import org.opensearch.index.shard.OpenSearchMergePolicy; |
145 | 147 | import org.opensearch.index.shard.ShardUtils; |
146 | 148 | import org.opensearch.index.store.Store; |
147 | 149 | import org.opensearch.index.translog.DefaultTranslogDeletionPolicy; |
|
201 | 203 | import java.util.stream.LongStream; |
202 | 204 |
|
203 | 205 | import static java.util.Collections.shuffle; |
| 206 | +import static org.opensearch.index.IndexSettings.DEFAULT_POLICY; |
| 207 | +import static org.opensearch.index.IndexSettings.MERGE_ON_FLUSH_MERGE_POLICY; |
204 | 208 | import static org.opensearch.index.engine.Engine.Operation.Origin.LOCAL_RESET; |
205 | 209 | import static org.opensearch.index.engine.Engine.Operation.Origin.LOCAL_TRANSLOG_RECOVERY; |
206 | 210 | import static org.opensearch.index.engine.Engine.Operation.Origin.PEER_RECOVERY; |
@@ -6604,6 +6608,77 @@ public void testStressShouldPeriodicallyFlush() throws Exception { |
6604 | 6608 | } |
6605 | 6609 | } |
6606 | 6610 |
|
| 6611 | + public void testMultiSettingsDynamicForMerge() { |
| 6612 | + boolean checkPendingFlushEnabled = true; |
| 6613 | + boolean mergeOnFlushEnabled = true; |
| 6614 | + TimeValue maxFullFlushMergeWaitTime = TimeValue.timeValueSeconds(1); |
| 6615 | + String indexMergeOnPlushPolicy = MERGE_ON_FLUSH_MERGE_POLICY; |
| 6616 | + final IndexSettings indexSettings = engine.config().getIndexSettings(); |
| 6617 | + IndexMetadata indexMetadata = IndexMetadata.builder(indexSettings.getIndexMetadata()) |
| 6618 | + .settings( |
| 6619 | + Settings.builder() |
| 6620 | + .put(indexSettings.getSettings()) |
| 6621 | + .put(IndexSettings.INDEX_CHECK_PENDING_FLUSH_ENABLED.getKey(), checkPendingFlushEnabled) |
| 6622 | + .put(IndexSettings.INDEX_MERGE_ON_FLUSH_ENABLED.getKey(), mergeOnFlushEnabled) |
| 6623 | + .put(IndexSettings.INDEX_MERGE_ON_FLUSH_MAX_FULL_FLUSH_MERGE_WAIT_TIME.getKey(), maxFullFlushMergeWaitTime) |
| 6624 | + .put(IndexSettings.INDEX_MERGE_ON_FLUSH_POLICY.getKey(), indexMergeOnPlushPolicy) |
| 6625 | + ) |
| 6626 | + .build(); |
| 6627 | + indexSettings.updateIndexMetadata(indexMetadata); |
| 6628 | + engine.onSettingsChanged( |
| 6629 | + indexSettings.getTranslogRetentionAge(), |
| 6630 | + indexSettings.getTranslogRetentionSize(), |
| 6631 | + indexSettings.getSoftDeleteRetentionOperations() |
| 6632 | + ); |
| 6633 | + assertEquals(checkPendingFlushEnabled, engine.getCurrentIndexWriterConfig().isCheckPendingFlushOnUpdate()); |
| 6634 | + assertEquals(maxFullFlushMergeWaitTime.millis(), engine.getCurrentIndexWriterConfig().getMaxFullFlushMergeWaitMillis()); |
| 6635 | + MergePolicy mergePolicy = engine.getCurrentIndexWriterConfig().getMergePolicy(); |
| 6636 | + assertTrue(mergePolicy instanceof OpenSearchMergePolicy); |
| 6637 | + assertTrue(((OpenSearchMergePolicy) mergePolicy).getDelegate() instanceof MergeOnFlushMergePolicy); |
| 6638 | + |
| 6639 | + indexMergeOnPlushPolicy = DEFAULT_POLICY; |
| 6640 | + indexMetadata = IndexMetadata.builder(indexSettings.getIndexMetadata()) |
| 6641 | + .settings( |
| 6642 | + Settings.builder() |
| 6643 | + .put(indexSettings.getSettings()) |
| 6644 | + .put(IndexSettings.INDEX_MERGE_ON_FLUSH_POLICY.getKey(), indexMergeOnPlushPolicy) |
| 6645 | + ) |
| 6646 | + .build(); |
| 6647 | + indexSettings.updateIndexMetadata(indexMetadata); |
| 6648 | + engine.onSettingsChanged( |
| 6649 | + indexSettings.getTranslogRetentionAge(), |
| 6650 | + indexSettings.getTranslogRetentionSize(), |
| 6651 | + indexSettings.getSoftDeleteRetentionOperations() |
| 6652 | + ); |
| 6653 | + mergePolicy = engine.getCurrentIndexWriterConfig().getMergePolicy(); |
| 6654 | + assertTrue(mergePolicy instanceof OpenSearchMergePolicy); |
| 6655 | + assertTrue(((OpenSearchMergePolicy) mergePolicy).getDelegate() instanceof ShuffleForcedMergePolicy); |
| 6656 | + |
| 6657 | + mergeOnFlushEnabled = false; |
| 6658 | + checkPendingFlushEnabled = false; |
| 6659 | + indexMetadata = IndexMetadata.builder(indexSettings.getIndexMetadata()) |
| 6660 | + .settings( |
| 6661 | + Settings.builder() |
| 6662 | + .put(indexSettings.getSettings()) |
| 6663 | + .put(IndexSettings.INDEX_CHECK_PENDING_FLUSH_ENABLED.getKey(), checkPendingFlushEnabled) |
| 6664 | + .put(IndexSettings.INDEX_MERGE_ON_FLUSH_ENABLED.getKey(), mergeOnFlushEnabled) |
| 6665 | + .put(IndexSettings.INDEX_MERGE_ON_FLUSH_MAX_FULL_FLUSH_MERGE_WAIT_TIME.getKey(), maxFullFlushMergeWaitTime) |
| 6666 | + .put(IndexSettings.INDEX_MERGE_ON_FLUSH_POLICY.getKey(), "merge-on-flush") |
| 6667 | + ) |
| 6668 | + .build(); |
| 6669 | + indexSettings.updateIndexMetadata(indexMetadata); |
| 6670 | + engine.onSettingsChanged( |
| 6671 | + indexSettings.getTranslogRetentionAge(), |
| 6672 | + indexSettings.getTranslogRetentionSize(), |
| 6673 | + indexSettings.getSoftDeleteRetentionOperations() |
| 6674 | + ); |
| 6675 | + assertEquals(checkPendingFlushEnabled, engine.getCurrentIndexWriterConfig().isCheckPendingFlushOnUpdate()); |
| 6676 | + assertEquals(0, engine.getCurrentIndexWriterConfig().getMaxFullFlushMergeWaitMillis()); |
| 6677 | + mergePolicy = engine.getCurrentIndexWriterConfig().getMergePolicy(); |
| 6678 | + assertTrue(mergePolicy instanceof OpenSearchMergePolicy); |
| 6679 | + assertTrue(((OpenSearchMergePolicy) mergePolicy).getDelegate() instanceof ShuffleForcedMergePolicy); |
| 6680 | + } |
| 6681 | + |
6607 | 6682 | public void testStressUpdateSameDocWhileGettingIt() throws IOException, InterruptedException { |
6608 | 6683 | final int iters = randomIntBetween(1, 15); |
6609 | 6684 | for (int i = 0; i < iters; i++) { |
|
0 commit comments