|
52 | 52 | import org.elasticsearch.index.deletionpolicy.KeepOnlyLastDeletionPolicy;
|
53 | 53 | import org.elasticsearch.index.deletionpolicy.SnapshotDeletionPolicy;
|
54 | 54 | import org.elasticsearch.index.deletionpolicy.SnapshotIndexCommit;
|
| 55 | +import org.elasticsearch.index.engine.Engine.Searcher; |
55 | 56 | import org.elasticsearch.index.indexing.ShardIndexingService;
|
56 | 57 | import org.elasticsearch.index.indexing.slowlog.ShardSlowLogIndexingService;
|
57 | 58 | import org.elasticsearch.index.mapper.ParseContext.Document;
|
@@ -1677,4 +1678,39 @@ public void testRetryWithAutogeneratedIdsAndWrongOrderWorksAndNoDuplicateDocs()
|
1677 | 1678 | replicaSearcher.close();
|
1678 | 1679 | }
|
1679 | 1680 |
|
| 1681 | + // #10312 |
| 1682 | + @Test |
| 1683 | + public void testDeletesAloneCanTriggerRefresh() throws IOException { |
| 1684 | + // Tiny indexing buffer: |
| 1685 | + Settings indexSettings = ImmutableSettings.builder().put(defaultSettings) |
| 1686 | + .put(EngineConfig.INDEX_BUFFER_SIZE_SETTING, "1kb").build(); |
| 1687 | + IndexSettingsService indexSettingsService = new IndexSettingsService(shardId.index(), indexSettings); |
| 1688 | + try (Store store = createStore(); |
| 1689 | + Translog translog = createTranslog(); |
| 1690 | + Engine engine = new InternalEngine(config(indexSettingsService, store, translog, createMergeScheduler(indexSettingsService)))) { |
| 1691 | + for(int i=0;i<100;i++) { |
| 1692 | + String id = Integer.toString(i); |
| 1693 | + ParsedDocument doc = testParsedDocument(id, id, "test", null, -1, -1, testDocument(), B_1, false); |
| 1694 | + engine.index(new Engine.Index(null, newUid(id), doc, 2, VersionType.EXTERNAL, Engine.Operation.Origin.PRIMARY, System.nanoTime())); |
| 1695 | + } |
| 1696 | + |
| 1697 | + // Force merge so we know all merges are done before we start deleting: |
| 1698 | + engine.forceMerge(true, 1, false, false); |
| 1699 | + |
| 1700 | + Searcher s = engine.acquireSearcher("test"); |
| 1701 | + long version1 = ((DirectoryReader) s.reader()).getVersion(); |
| 1702 | + s.close(); |
| 1703 | + for(int i=0;i<100;i++) { |
| 1704 | + String id = Integer.toString(i); |
| 1705 | + engine.delete(new Engine.Delete("test", id, newUid(id), 10, VersionType.EXTERNAL, Engine.Operation.Origin.PRIMARY, System.nanoTime(), false)); |
| 1706 | + } |
| 1707 | + s = engine.acquireSearcher("test"); |
| 1708 | + long version2 = ((DirectoryReader) s.reader()).getVersion(); |
| 1709 | + s.close(); |
| 1710 | + |
| 1711 | + // 100 buffered deletes will easily exceed 25% of our 1 KB indexing buffer so it should have forced a refresh: |
| 1712 | + assertThat(version2, greaterThan(version1)); |
| 1713 | + } |
| 1714 | + } |
| 1715 | + |
1680 | 1716 | }
|
0 commit comments