|
55 | 55 | import org.elasticsearch.index.deletionpolicy.KeepOnlyLastDeletionPolicy;
|
56 | 56 | import org.elasticsearch.index.deletionpolicy.SnapshotDeletionPolicy;
|
57 | 57 | import org.elasticsearch.index.deletionpolicy.SnapshotIndexCommit;
|
| 58 | +import org.elasticsearch.index.engine.Engine.Searcher; |
58 | 59 | import org.elasticsearch.index.indexing.ShardIndexingService;
|
59 | 60 | import org.elasticsearch.index.indexing.slowlog.ShardSlowLogIndexingService;
|
60 | 61 | import org.elasticsearch.index.mapper.ParseContext.Document;
|
@@ -1644,4 +1645,39 @@ public void testRetryWithAutogeneratedIdsAndWrongOrderWorksAndNoDuplicateDocs()
|
1644 | 1645 | replicaSearcher.close();
|
1645 | 1646 | }
|
1646 | 1647 |
|
| 1648 | + // #10312 |
| 1649 | + @Test |
| 1650 | + public void testDeletesAloneCanTriggerRefresh() throws IOException { |
| 1651 | + // Tiny indexing buffer: |
| 1652 | + Settings indexSettings = ImmutableSettings.builder().put(defaultSettings) |
| 1653 | + .put(EngineConfig.INDEX_BUFFER_SIZE_SETTING, "1kb").build(); |
| 1654 | + IndexSettingsService indexSettingsService = new IndexSettingsService(shardId.index(), indexSettings); |
| 1655 | + try (Store store = createStore(); |
| 1656 | + Translog translog = createTranslog(); |
| 1657 | + Engine engine = new InternalEngine(config(indexSettingsService, store, translog, createMergeScheduler(indexSettingsService)))) { |
| 1658 | + for(int i=0;i<100;i++) { |
| 1659 | + String id = Integer.toString(i); |
| 1660 | + ParsedDocument doc = testParsedDocument(id, id, "test", null, -1, -1, testDocument(), B_1, false); |
| 1661 | + engine.index(new Engine.Index(null, newUid(id), doc, 2, VersionType.EXTERNAL, Engine.Operation.Origin.PRIMARY, System.nanoTime())); |
| 1662 | + } |
| 1663 | + |
| 1664 | + // Force merge so we know all merges are done before we start deleting: |
| 1665 | + engine.forceMerge(true, 1, false, false); |
| 1666 | + |
| 1667 | + Searcher s = engine.acquireSearcher("test"); |
| 1668 | + long version1 = ((DirectoryReader) s.reader()).getVersion(); |
| 1669 | + s.close(); |
| 1670 | + for(int i=0;i<100;i++) { |
| 1671 | + String id = Integer.toString(i); |
| 1672 | + engine.delete(new Engine.Delete("test", id, newUid(id), 10, VersionType.EXTERNAL, Engine.Operation.Origin.PRIMARY, System.nanoTime(), false)); |
| 1673 | + } |
| 1674 | + s = engine.acquireSearcher("test"); |
| 1675 | + long version2 = ((DirectoryReader) s.reader()).getVersion(); |
| 1676 | + s.close(); |
| 1677 | + |
| 1678 | + // 100 buffered deletes will easily exceed 25% of our 1 KB indexing buffer so it should have forced a refresh: |
| 1679 | + assertThat(version2, greaterThan(version1)); |
| 1680 | + } |
| 1681 | + } |
| 1682 | + |
1647 | 1683 | }
|
0 commit comments