|
22 | 22 | import org.elasticsearch.action.get.GetRequest;
|
23 | 23 | import org.elasticsearch.action.index.IndexRequest;
|
24 | 24 | import org.elasticsearch.action.search.SearchRequest;
|
| 25 | +import org.elasticsearch.action.support.WriteRequest; |
25 | 26 | import org.elasticsearch.cluster.metadata.ComponentTemplate;
|
26 | 27 | import org.elasticsearch.cluster.metadata.ComposableIndexTemplate;
|
27 | 28 | import org.elasticsearch.cluster.metadata.Template;
|
|
35 | 36 | import org.elasticsearch.index.query.RangeQueryBuilder;
|
36 | 37 | import org.elasticsearch.indices.InvalidIndexTemplateException;
|
37 | 38 | import org.elasticsearch.plugins.Plugin;
|
| 39 | +import org.elasticsearch.rest.RestStatus; |
38 | 40 | import org.elasticsearch.search.builder.SearchSourceBuilder;
|
39 | 41 | import org.elasticsearch.test.ESSingleNodeTestCase;
|
40 | 42 | import org.elasticsearch.test.InternalSettingsPlugin;
|
@@ -457,6 +459,16 @@ public void testTrimId() throws Exception {
|
457 | 459 | indexName = bulkResponse.getItems()[0].getIndex();
|
458 | 460 | }
|
459 | 461 | client().admin().indices().refresh(new RefreshRequest(dataStreamName)).actionGet();
|
| 462 | + |
| 463 | + // In rare cases we can end up with a single segment shard, which means we can't trim away the _id later. |
| 464 | + // So update an existing doc to create a new segment without adding a new document after force merging: |
| 465 | + var indexRequest = new IndexRequest(indexName).setIfPrimaryTerm(1L) |
| 466 | + .setIfSeqNo((numBulkRequests * numDocsPerBulk) - 1) |
| 467 | + .setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE); |
| 468 | + indexRequest.source(DOC.replace("$time", formatInstant(time.minusMillis(1))), XContentType.JSON); |
| 469 | + var res = client().index(indexRequest).actionGet(); |
| 470 | + assertThat(res.status(), equalTo(RestStatus.OK)); |
| 471 | + assertThat(res.getVersion(), equalTo(2L)); |
460 | 472 | }
|
461 | 473 |
|
462 | 474 | // Check whether there are multiple segments:
|
@@ -494,7 +506,7 @@ public void testTrimId() throws Exception {
|
494 | 506 | assertThat(retentionLeasesStats.retentionLeases().leases(), hasSize(1));
|
495 | 507 | assertThat(
|
496 | 508 | retentionLeasesStats.retentionLeases().leases().iterator().next().retainingSequenceNumber(),
|
497 |
| - equalTo((long) numBulkRequests * numDocsPerBulk) |
| 509 | + equalTo((long) numBulkRequests * numDocsPerBulk + 1) |
498 | 510 | );
|
499 | 511 | });
|
500 | 512 |
|
|
0 commit comments