Skip to content

Commit 3dc8133

Browse files
Merge branch 'main' into pkar/msearch-flatworld-search-project-routing
2 parents ab0f408 + ce51f85 commit 3dc8133

File tree

92 files changed

+1182
-569
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

92 files changed

+1182
-569
lines changed

docs/changelog/138282.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 138282
2+
summary: Allow fast blob-cache introspection by shard-id
3+
area: Searchable Snapshots
4+
type: enhancement
5+
issues: []

docs/changelog/138756.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 138756
2+
summary: Add project routing support to JDBC
3+
area: SQL
4+
type: enhancement
5+
issues: []

docs/changelog/138876.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 138876
2+
summary: "Use doc values skipper for @timestamp in synthetic `_id` postings #138568"
3+
area: TSDB
4+
type: enhancement
5+
issues: []

libs/exponential-histogram/src/main/java/org/elasticsearch/exponentialhistogram/ExponentialHistogramMerger.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@
3636
* while keeping the bucket count in the result below a given limit.
3737
*/
3838
public class ExponentialHistogramMerger implements Accountable, Releasable {
39-
39+
// OpenTelemetry SDK default, we might make this configurable later
40+
private static final int MAX_HISTOGRAM_BUCKETS = 320;
4041
private static final long BASE_SIZE = RamUsageEstimator.shallowSizeOfInstance(ExponentialHistogramMerger.class) + DownscaleStats.SIZE;
4142

4243
// Our algorithm is not in-place, therefore we use two histograms and ping-pong between them
@@ -53,6 +54,14 @@ public class ExponentialHistogramMerger implements Accountable, Releasable {
5354
private final ExponentialHistogramCircuitBreaker circuitBreaker;
5455
private boolean closed = false;
5556

57+
/**
58+
* Creates a new instance with the OpenTelemetry SDK default bucket limit of {@link ExponentialHistogramMerger#MAX_HISTOGRAM_BUCKETS}
59+
* @param circuitBreaker the circuit breaker to use to limit memory allocations
60+
*/
61+
public static ExponentialHistogramMerger create(ExponentialHistogramCircuitBreaker circuitBreaker) {
62+
return create(MAX_HISTOGRAM_BUCKETS, circuitBreaker);
63+
}
64+
5665
/**
5766
* Creates a new instance with the specified bucket limit.
5867
*

modules/data-streams/src/main/java/org/elasticsearch/datastreams/lifecycle/rest/RestPutDataStreamLifecycleAction.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.elasticsearch.action.datastreams.lifecycle.PutDataStreamLifecycleAction;
1212
import org.elasticsearch.action.support.IndicesOptions;
1313
import org.elasticsearch.client.internal.node.NodeClient;
14+
import org.elasticsearch.cluster.metadata.DataStreamLifecycle;
1415
import org.elasticsearch.common.Strings;
1516
import org.elasticsearch.rest.BaseRestHandler;
1617
import org.elasticsearch.rest.RestRequest;
@@ -46,17 +47,12 @@ public List<Route> routes() {
4647
@Override
4748
protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException {
4849
try (XContentParser parser = request.contentParser()) {
49-
PutDataStreamLifecycleAction.Request putLifecycleRequest = PutDataStreamLifecycleAction.Request.parseRequest(
50-
parser,
51-
(dataRetention, enabled, downsamplingRounds, downsamplingMethod) -> new PutDataStreamLifecycleAction.Request(
52-
getMasterNodeTimeout(request),
53-
getAckTimeout(request),
54-
Strings.splitStringByCommaToArray(request.param("name")),
55-
dataRetention,
56-
enabled,
57-
downsamplingRounds,
58-
downsamplingMethod
59-
)
50+
final var lifecycle = DataStreamLifecycle.dataLifecycleFromXContent(parser);
51+
PutDataStreamLifecycleAction.Request putLifecycleRequest = new PutDataStreamLifecycleAction.Request(
52+
getMasterNodeTimeout(request),
53+
getAckTimeout(request),
54+
Strings.splitStringByCommaToArray(request.param("name")),
55+
lifecycle
6056
);
6157
putLifecycleRequest.indicesOptions(IndicesOptions.fromRequest(request, putLifecycleRequest.indicesOptions()));
6258
return channel -> client.execute(

modules/data-streams/src/test/java/org/elasticsearch/datastreams/MetadataIndexTemplateServiceTests.java

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,12 @@ public void testLifecycleComposition() {
151151
// One lifecycle results in this lifecycle as the final
152152
{
153153
ResettableValue<List<DataStreamLifecycle.DownsamplingRound>> downsamplingRounds = randomDownsampling();
154-
DataStreamLifecycle.Template lifecycle = DataStreamLifecycle.createDataLifecycleTemplate(
155-
true,
156-
randomRetention(),
157-
downsamplingRounds,
158-
randomResettable(() -> randomSamplingMethod(downsamplingRounds.get()))
159-
);
154+
DataStreamLifecycle.Template lifecycle = DataStreamLifecycle.dataLifecycleBuilder()
155+
.enabled(true)
156+
.dataRetention(randomRetention())
157+
.downsamplingRounds(downsamplingRounds)
158+
.downsamplingMethod(randomResettable(() -> randomSamplingMethod(downsamplingRounds.get())))
159+
.buildTemplate();
160160
List<DataStreamLifecycle.Template> lifecycles = List.of(lifecycle);
161161
DataStreamLifecycle result = composeDataLifecycles(lifecycles).build();
162162
// Defaults to true
@@ -169,12 +169,12 @@ public void testLifecycleComposition() {
169169
// Enabled is always true unless it's explicitly set to false
170170
{
171171
List<DataStreamLifecycle.DownsamplingRound> downsamplingRounds = randomRounds();
172-
DataStreamLifecycle.Template lifecycle = DataStreamLifecycle.createDataLifecycleTemplate(
173-
false,
174-
randomPositiveTimeValue(),
175-
downsamplingRounds,
176-
randomSamplingMethod(downsamplingRounds)
177-
);
172+
DataStreamLifecycle.Template lifecycle = DataStreamLifecycle.dataLifecycleBuilder()
173+
.enabled(false)
174+
.dataRetention(randomPositiveTimeValue())
175+
.downsamplingRounds(downsamplingRounds)
176+
.downsamplingMethod(randomSamplingMethod(downsamplingRounds))
177+
.buildTemplate();
178178
List<DataStreamLifecycle.Template> lifecycles = List.of(lifecycle, DataStreamLifecycle.Template.DATA_DEFAULT);
179179
DataStreamLifecycle result = composeDataLifecycles(lifecycles).build();
180180
assertThat(result.enabled(), equalTo(true));
@@ -185,20 +185,22 @@ public void testLifecycleComposition() {
185185
// If both lifecycles have all properties, then the latest one overwrites all the others
186186
{
187187
DownsampleConfig.SamplingMethod downsamplingMethod1 = randomFrom(DownsampleConfig.SamplingMethod.LAST_VALUE);
188-
DataStreamLifecycle.Template lifecycle1 = DataStreamLifecycle.createDataLifecycleTemplate(
189-
false,
190-
randomPositiveTimeValue(),
191-
randomRounds(),
192-
downsamplingMethod1
193-
);
194-
DataStreamLifecycle.Template lifecycle2 = DataStreamLifecycle.createDataLifecycleTemplate(
195-
true,
196-
randomPositiveTimeValue(),
197-
randomRounds(),
198-
downsamplingMethod1 == DownsampleConfig.SamplingMethod.LAST_VALUE
199-
? DownsampleConfig.SamplingMethod.AGGREGATE
200-
: DownsampleConfig.SamplingMethod.LAST_VALUE
201-
);
188+
DataStreamLifecycle.Template lifecycle1 = DataStreamLifecycle.dataLifecycleBuilder()
189+
.enabled(false)
190+
.dataRetention(randomPositiveTimeValue())
191+
.downsamplingRounds(randomRounds())
192+
.downsamplingMethod(downsamplingMethod1)
193+
.buildTemplate();
194+
DataStreamLifecycle.Template lifecycle2 = DataStreamLifecycle.dataLifecycleBuilder()
195+
.enabled(true)
196+
.dataRetention(randomPositiveTimeValue())
197+
.downsamplingRounds(randomRounds())
198+
.downsamplingMethod(
199+
downsamplingMethod1 == DownsampleConfig.SamplingMethod.LAST_VALUE
200+
? DownsampleConfig.SamplingMethod.AGGREGATE
201+
: DownsampleConfig.SamplingMethod.LAST_VALUE
202+
)
203+
.buildTemplate();
202204
List<DataStreamLifecycle.Template> lifecycles = List.of(lifecycle1, lifecycle2);
203205
DataStreamLifecycle result = composeDataLifecycles(lifecycles).build();
204206
assertThat(result.enabled(), equalTo(lifecycle2.enabled()));

modules/data-streams/src/test/java/org/elasticsearch/datastreams/action/GetDataStreamsResponseTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ public void testResponseIlmAndDataStreamLifecycleRepresentation() throws Excepti
154154
.setGeneration(3)
155155
.setAllowCustomRouting(true)
156156
.setIndexMode(IndexMode.STANDARD)
157-
.setLifecycle(DataStreamLifecycle.createDataLifecycle(false, null, null, null))
157+
.setLifecycle(DataStreamLifecycle.dataLifecycleBuilder().enabled(false).build())
158158
.setDataStreamOptions(DataStreamOptions.FAILURE_STORE_ENABLED)
159159
.setFailureIndices(DataStream.DataStreamIndices.failureIndicesBuilder(failureStores).build())
160160
.build();

modules/data-streams/src/test/java/org/elasticsearch/datastreams/lifecycle/DataStreamLifecycleFixtures.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,12 @@ static DataStreamLifecycle.Template randomDataLifecycleTemplate() {
148148
ResettableValue<List<DataStreamLifecycle.DownsamplingRound>> downsampling = randomResettable(
149149
DataStreamLifecycleFixtures::randomDownsamplingRounds
150150
);
151-
return DataStreamLifecycle.createDataLifecycleTemplate(
152-
frequently(),
153-
randomResettable(ESTestCase::randomTimeValue),
154-
downsampling,
155-
randomResettable(() -> randomSamplingMethod(downsampling.get()))
156-
);
151+
return DataStreamLifecycle.dataLifecycleBuilder()
152+
.enabled(frequently())
153+
.dataRetention(randomResettable(ESTestCase::randomTimeValue))
154+
.downsamplingRounds(downsampling)
155+
.downsamplingMethod(randomResettable(() -> randomSamplingMethod(downsampling.get())))
156+
.buildTemplate();
157157
}
158158

159159
public static <T> ResettableValue<T> randomResettable(Supplier<T> supplier) {

server/src/main/java/module-info.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,10 +396,10 @@
396396
to
397397
org.elasticsearch.inference,
398398
org.elasticsearch.metering,
399-
org.elasticsearch.stateless,
400399
org.elasticsearch.settings.secure,
401400
org.elasticsearch.serverless.constants,
402401
org.elasticsearch.serverless.apifiltering,
402+
org.elasticsearch.serverless.stateless,
403403
org.elasticsearch.internal.security,
404404
org.elasticsearch.xpack.gpu;
405405

server/src/main/java/org/elasticsearch/action/datastreams/lifecycle/PutDataStreamLifecycleAction.java

Lines changed: 6 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
import org.elasticsearch.action.ActionType;
1313
import org.elasticsearch.action.IndicesRequest;
14-
import org.elasticsearch.action.downsample.DownsampleConfig;
1514
import org.elasticsearch.action.support.IndicesOptions;
1615
import org.elasticsearch.action.support.master.AcknowledgedRequest;
1716
import org.elasticsearch.action.support.master.AcknowledgedResponse;
@@ -20,23 +19,13 @@
2019
import org.elasticsearch.common.io.stream.StreamOutput;
2120
import org.elasticsearch.core.Nullable;
2221
import org.elasticsearch.core.TimeValue;
23-
import org.elasticsearch.xcontent.AbstractObjectParser;
24-
import org.elasticsearch.xcontent.ConstructingObjectParser;
25-
import org.elasticsearch.xcontent.ObjectParser;
2622
import org.elasticsearch.xcontent.ToXContentObject;
2723
import org.elasticsearch.xcontent.XContentBuilder;
28-
import org.elasticsearch.xcontent.XContentParser;
2924

3025
import java.io.IOException;
3126
import java.util.Arrays;
32-
import java.util.List;
3327
import java.util.Objects;
3428

35-
import static org.elasticsearch.cluster.metadata.DataStreamLifecycle.DATA_RETENTION_FIELD;
36-
import static org.elasticsearch.cluster.metadata.DataStreamLifecycle.DOWNSAMPLING_FIELD;
37-
import static org.elasticsearch.cluster.metadata.DataStreamLifecycle.DOWNSAMPLING_METHOD_FIELD;
38-
import static org.elasticsearch.cluster.metadata.DataStreamLifecycle.ENABLED_FIELD;
39-
4029
/**
4130
* Sets the data stream lifecycle that was provided in the request to the requested data streams.
4231
*/
@@ -48,53 +37,6 @@ private PutDataStreamLifecycleAction() {/* no instances */}
4837

4938
public static final class Request extends AcknowledgedRequest<Request> implements IndicesRequest.Replaceable, ToXContentObject {
5039

51-
public interface Factory {
52-
Request create(
53-
@Nullable TimeValue dataRetention,
54-
@Nullable Boolean enabled,
55-
@Nullable List<DataStreamLifecycle.DownsamplingRound> downsampling,
56-
@Nullable DownsampleConfig.SamplingMethod downsamplingMethod
57-
);
58-
}
59-
60-
@SuppressWarnings("unchecked")
61-
public static final ConstructingObjectParser<Request, Factory> PARSER = new ConstructingObjectParser<>(
62-
"put_data_stream_lifecycle_request",
63-
false,
64-
(args, factory) -> factory.create(
65-
(TimeValue) args[0],
66-
(Boolean) args[1],
67-
(List<DataStreamLifecycle.DownsamplingRound>) args[2],
68-
(DownsampleConfig.SamplingMethod) args[3]
69-
)
70-
);
71-
72-
static {
73-
PARSER.declareField(
74-
ConstructingObjectParser.optionalConstructorArg(),
75-
(p, c) -> TimeValue.parseTimeValue(p.text(), DATA_RETENTION_FIELD.getPreferredName()),
76-
DATA_RETENTION_FIELD,
77-
ObjectParser.ValueType.STRING
78-
);
79-
PARSER.declareBoolean(ConstructingObjectParser.optionalConstructorArg(), ENABLED_FIELD);
80-
PARSER.declareField(
81-
ConstructingObjectParser.optionalConstructorArg(),
82-
(p, c) -> AbstractObjectParser.parseArray(p, null, DataStreamLifecycle.DownsamplingRound::fromXContent),
83-
DOWNSAMPLING_FIELD,
84-
ObjectParser.ValueType.OBJECT_ARRAY
85-
);
86-
PARSER.declareField(
87-
ConstructingObjectParser.optionalConstructorArg(),
88-
(p, c) -> DownsampleConfig.SamplingMethod.fromString(p.text()),
89-
DOWNSAMPLING_METHOD_FIELD,
90-
ObjectParser.ValueType.STRING
91-
);
92-
}
93-
94-
public static Request parseRequest(XContentParser parser, Factory factory) {
95-
return PARSER.apply(parser, factory);
96-
}
97-
9840
private String[] names;
9941
private IndicesOptions indicesOptions = IndicesOptions.builder()
10042
.concreteTargetOptions(IndicesOptions.ConcreteTargetOptions.ERROR_WHEN_UNAVAILABLE_TARGETS)
@@ -150,26 +92,12 @@ public Request(
15092
@Nullable TimeValue dataRetention,
15193
@Nullable Boolean enabled
15294
) {
153-
this(masterNodeTimeout, ackTimeout, names, dataRetention, enabled, null, null);
154-
}
155-
156-
public Request(
157-
TimeValue masterNodeTimeout,
158-
TimeValue ackTimeout,
159-
String[] names,
160-
@Nullable TimeValue dataRetention,
161-
@Nullable Boolean enabled,
162-
@Nullable List<DataStreamLifecycle.DownsamplingRound> downsamplingRounds,
163-
@Nullable DownsampleConfig.SamplingMethod downsamplingMethod
164-
) {
165-
super(masterNodeTimeout, ackTimeout);
166-
this.names = names;
167-
this.lifecycle = DataStreamLifecycle.dataLifecycleBuilder()
168-
.dataRetention(dataRetention)
169-
.enabled(enabled == null || enabled)
170-
.downsamplingRounds(downsamplingRounds)
171-
.downsamplingMethod(downsamplingMethod)
172-
.build();
95+
this(
96+
masterNodeTimeout,
97+
ackTimeout,
98+
names,
99+
DataStreamLifecycle.dataLifecycleBuilder().enabled(enabled == null || enabled).dataRetention(dataRetention).build()
100+
);
173101
}
174102

175103
public String[] getNames() {

0 commit comments

Comments
 (0)