Skip to content

Commit 2d5f28c

Browse files
committed
Use local segment fieldInfos to lookup tsdb merge stats
1 parent fa6e905 commit 2d5f28c

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

server/src/main/java/org/elasticsearch/index/codec/tsdb/es819/DocValuesConsumerUtil.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class DocValuesConsumerUtil {
2424

2525
record MergeStats(boolean supported, long sumNumValues, int sumNumDocsWithField, int minLength, int maxLength) {}
2626

27-
static MergeStats compatibleWithOptimizedMerge(boolean optimizedMergeEnabled, MergeState mergeState, FieldInfo fieldInfo) {
27+
static MergeStats compatibleWithOptimizedMerge(boolean optimizedMergeEnabled, MergeState mergeState, FieldInfo mergedFieldInfo) {
2828
if (optimizedMergeEnabled == false || mergeState.needsIndexSort == false) {
2929
return UNSUPPORTED;
3030
}
@@ -42,6 +42,10 @@ static MergeStats compatibleWithOptimizedMerge(boolean optimizedMergeEnabled, Me
4242
int maxLength = 0;
4343

4444
for (int i = 0; i < mergeState.docValuesProducers.length; i++) {
45+
final FieldInfo fieldInfo = mergeState.fieldInfos[i].fieldInfo(mergedFieldInfo.name);
46+
if (fieldInfo == null) {
47+
continue;
48+
}
4549
DocValuesProducer docValuesProducer = mergeState.docValuesProducers[i];
4650
if (docValuesProducer instanceof FilterDocValuesProducer filterDocValuesProducer) {
4751
docValuesProducer = filterDocValuesProducer.getIn();

x-pack/plugin/logsdb/src/internalClusterTest/java/org/elasticsearch/xpack/logsdb/LogsIndexingIT.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@
1111
import org.elasticsearch.action.admin.indices.refresh.RefreshRequest;
1212
import org.elasticsearch.action.admin.indices.settings.get.GetSettingsRequest;
1313
import org.elasticsearch.action.admin.indices.settings.get.GetSettingsResponse;
14+
import org.elasticsearch.action.admin.indices.shrink.ResizeType;
1415
import org.elasticsearch.action.admin.indices.template.put.TransportPutComposableIndexTemplateAction;
1516
import org.elasticsearch.action.bulk.BulkRequest;
1617
import org.elasticsearch.action.get.GetRequest;
1718
import org.elasticsearch.action.index.IndexRequest;
1819
import org.elasticsearch.action.search.SearchRequest;
20+
import org.elasticsearch.action.support.WriteRequest;
1921
import org.elasticsearch.cluster.metadata.ComposableIndexTemplate;
2022
import org.elasticsearch.cluster.metadata.Template;
2123
import org.elasticsearch.common.compress.CompressedXContent;
@@ -35,6 +37,8 @@
3537
import java.util.List;
3638
import java.util.UUID;
3739

40+
import static org.elasticsearch.index.mapper.DateFieldMapper.DEFAULT_DATE_TIME_FORMATTER;
41+
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertNoFailures;
3842
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertResponse;
3943
import static org.hamcrest.Matchers.equalTo;
4044
import static org.hamcrest.Matchers.is;
@@ -206,6 +210,38 @@ private void checkIndexSearchAndRetrieval(String dataStreamName, boolean routeOn
206210
});
207211
}
208212

213+
public void testShrink() throws Exception {
214+
client().admin()
215+
.indices()
216+
.prepareCreate("my-logs")
217+
.setMapping("@timestamp", "type=date", "host.name", "type=keyword")
218+
.setSettings(indexSettings(between(3, 5), 0).put("index.mode", "logsdb").put("index.sort.field", "host.name"))
219+
.get();
220+
221+
long timestamp = DEFAULT_DATE_TIME_FORMATTER.parseMillis("2025-08-08T00:00:00Z");
222+
BulkRequest bulkRequest = new BulkRequest("my-logs");
223+
int numDocs = randomIntBetween(100, 10_000);
224+
for (int i = 0; i < numDocs; i++) {
225+
timestamp += randomIntBetween(0, 1000);
226+
String field = "field-" + randomIntBetween(1, 20);
227+
bulkRequest.add(
228+
new IndexRequest("my-logs").id(Integer.toString(i))
229+
.source("host.name", "host-" + between(1, 5), "@timestamp", timestamp, field, randomNonNegativeLong())
230+
);
231+
}
232+
bulkRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
233+
client().bulk(bulkRequest).actionGet();
234+
client().admin().indices().prepareFlush("my-logs").get();
235+
client().admin().indices().prepareUpdateSettings("my-logs").setSettings(Settings.builder().put("index.blocks.write", true)).get();
236+
client().admin()
237+
.indices()
238+
.prepareResizeIndex("my-logs", "shrink-my-logs")
239+
.setResizeType(ResizeType.SHRINK)
240+
.setSettings(indexSettings(1, 0).build())
241+
.get();
242+
assertNoFailures(client().admin().indices().prepareForceMerge("shrink-my-logs").setMaxNumSegments(1).setFlush(true).get());
243+
}
244+
209245
static String formatInstant(Instant instant) {
210246
return DateFormatter.forPattern(FormatNames.STRICT_DATE_OPTIONAL_TIME.getName()).format(instant);
211247
}

0 commit comments

Comments
 (0)