Skip to content

Conversation

@limotova
Copy link
Contributor

@limotova limotova commented Aug 29, 2025

This commit adds a single_node variation of the GenerativeRestTest in ES|QL that queries indices marked as time series indices and runs time series aggregations on them (amongst all the other commands already supported in the Generative tests), with a lot of limitations.

This commit adds a variation of the GenerativeRestTest in ES|QL that
queries indices marked as time series indices and runs time series
aggregations on them (amongst all the other commands already supported
in the Generative tests)
@limotova limotova force-pushed the ts-in-generative-tests branch from e3a4b22 to 82296eb Compare August 29, 2025 17:32
@limotova
Copy link
Contributor Author

limotova commented Aug 29, 2025

Edit: This was a comment with a list of bugs, these have either been dealt with or triaged with new individual issues, so I am hiding the original contents of this comment in a drop-down

Existing bug 1:

Can't combine count(*) with time series aggregations. (This query occurs because there is a 50% chance an aggregation will be time series vs normal, and the safe default for aggregations is count(*), which shouldn't be failing as far as I understand.)

Example stack trace
GenerativeMetricsIT > test FAILED
    java.lang.AssertionError: query: ts k8s-downsampled,k8s | stats  IaMXIgsQwQY = min(count_distinct_over_time(events_received)), network.eth0.tx = count(*) by NzliBvnExn = bucket(@timestamp,1hour)
    exception: method [POST], host [http://[::1]:57951], URI [/_query?pretty=true&error_trace=true], status line [HTTP/1.1 400 Bad Request]
    Warnings: [No limit defined, adding default limit of [1000]]
    {
      "error" : {
        "root_cause" : [
          {
            "type" : "invalid_argument_exception",
            "reason" : "Does not support yet aggregations over constants - [network.eth0.tx = count(*)]",
            "stack_trace" : 
    "org.elasticsearch.xpack.esql.core.InvalidArgumentException: Does not support yet aggregations over constants - [network.eth0.tx = count(*)]
     org.elasticsearch.xpack.esql.planner.AbstractPhysicalOperationProviders.aggregatesToFactory(AbstractPhysicalOperationProviders.java:277)
     org.elasticsearch.xpack.esql.planner.AbstractPhysicalOperationProviders.groupingPhysicalOperation(AbstractPhysicalOperationProviders.java:160)
     org.elasticsearch.xpack.esql.planner.LocalExecutionPlanner.planAggregation(LocalExecutionPlanner.java:362)
     org.elasticsearch.xpack.esql.planner.LocalExecutionPlanner.plan(LocalExecutionPlanner.java:253)
     org.elasticsearch.xpack.esql.planner.LocalExecutionPlanner.planExchangeSink(LocalExecutionPlanner.java:443)
     org.elasticsearch.xpack.esql.planner.LocalExecutionPlanner.plan(LocalExecutionPlanner.java:312)
     org.elasticsearch.xpack.esql.planner.LocalExecutionPlanner.plan(LocalExecutionPlanner.java:229)
     org.elasticsearch.xpack.esql.plugin.ComputeService.runCompute(ComputeService.java:648)
     org.elasticsearch.xpack.esql.plugin.DataNodeComputeHandler$DataNodeRequestExecutor.lambda$runBatch$4(DataNodeComputeHandler.java:332)
     [email protected]/org.elasticsearch.action.ActionListener$2.onResponse(ActionListener.java:258)
     [email protected]/org.elasticsearch.action.ActionRunnable$2.accept(ActionRunnable.java:58)
     [email protected]/org.elasticsearch.action.ActionRunnable$2.accept(ActionRunnable.java:55)
     [email protected]/org.elasticsearch.action.ActionRunnable$4.doRun(ActionRunnable.java:101)
     [email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:27)
     org.elasticsearch.xpack.esql.plugin.DataNodeComputeHandler$DataNodeRequestExecutor.lambda$acquireSearchContexts$7(DataNodeComputeHandler.java:389)
     [email protected]/org.elasticsearch.core.AbstractRefCounted$1.closeInternal(AbstractRefCounted.java:125)
     [email protected]/org.elasticsearch.core.AbstractRefCounted.decRef(AbstractRefCounted.java:77)
     [email protected]/org.elasticsearch.action.support.RefCountingRunnable.close(RefCountingRunnable.java:113)
     org.elasticsearch.xpack.esql.plugin.DataNodeComputeHandler$DataNodeRequestExecutor.acquireSearchContexts(DataNodeComputeHandler.java:402)
     org.elasticsearch.xpack.esql.plugin.DataNodeComputeHandler$DataNodeRequestExecutor.runBatch(DataNodeComputeHandler.java:297)
     org.elasticsearch.xpack.esql.plugin.DataNodeComputeHandler$DataNodeRequestExecutor.start(DataNodeComputeHandler.java:258)
     org.elasticsearch.xpack.esql.plugin.DataNodeComputeHandler.runComputeOnDataNode(DataNodeComputeHandler.java:470)
     org.elasticsearch.xpack.esql.plugin.DataNodeComputeHandler.messageReceived(DataNodeComputeHandler.java:533)
     org.elasticsearch.xpack.esql.plugin.DataNodeComputeHandler.messageReceived(DataNodeComputeHandler.java:68)
     [email protected]/org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:86)
     [email protected]/org.elasticsearch.transport.TransportService$6.doRun(TransportService.java:1098)
     [email protected]/org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:1067)
     [email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:27)
     [email protected]/org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:35)
     [email protected]/org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:1067)
     [email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:27)
     java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1095)
     java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:619)
     java.base/java.lang.Thread.run(Thread.java:1447)"
          }

Existing bug 2:

After a few pipes, the date field being used as a timestamp gets lost (note that the example query has many layers of stats commands, meaning it actually runs successfully for the first 4 out of 5 stats commands)

Example stack trace
GenerativeMetricsIT > test FAILED
    java.lang.AssertionError: query: ts k8s | stats  network.cost = count(network.cost) by network.bytes_in, event_city = bucket(@timestamp,1hour) | stats  `network.cost` = count(*), gRBINelovE = min(network.cost) by network.bytes_in, event_city = bucket(event_city,1hour) | stats  event_city = count(*) by network.bytes_in, yDAJQznJh = bucket(event_city,1hour) | stats  yndReaROxShP = min(network.bytes_in), network.bytes_in = count(yDAJQznJh) by event_city, yeKLhgaun = bucket(yDAJQznJh,1hour) | stats  yndReaROxShP = min(last_over_time(event_city)), CScmUybs = count_distinct(yeKLhgaun) by event_city, network.bytes_in = bucket(yeKLhgaun,1hour)
    exception: method [POST], host [http://[::1]:58010], URI [/_query?pretty=true&error_trace=true], status line [HTTP/1.1 400 Bad Request]
    Warnings: [No limit defined, adding default limit of [1000]]
    :)
    ú�errorú�root_causeøú�typeUverification_exception�reasonvFound 1 problem
    line 1:488: Unknown column [@timestamp]�stack_traceäorg.elasticsearch.xpack.esql.VerificationException: Found 1 problem
    line 1:488: Unknown column [@timestamp]
        at org.elasticsearch.xpack.esql.analysis.Analyzer.verify(Analyzer.java:222)
        at org.elasticsearch.xpack.esql.analysis.Analyzer.analyze(Analyzer.java:216)
        at org.elasticsearch.xpack.esql.session.EsqlSession.analyzedPlan(EsqlSession.java:764)
        at org.elasticsearch.xpack.esql.session.EsqlSession.analyzeWithRetry(EsqlSession.java:705)
        at org.elasticsearch.xpack.esql.session.EsqlSession.lambda$analyzedPlan$11(EsqlSession.java:389)
        at [email protected]/org.elasticsearch.action.ActionListenerImplementations$ResponseWrappingActionListener.onResponse(ActionListenerImplementations.java:261)
        at [email protected]/org.elasticsearch.action.support.SubscribableListener$SuccessResult.complete(SubscribableListener.java:406)
        at [email protected]/org.elasticsearch.action.support.SubscribableListener.tryComplete(SubscribableListener.java:326)
        at [email protected]/org.elasticsearch.action.support.SubscribableListener.setResult(SubscribableListener.java:355)
        at [email protected]/org.elasticsearch.action.support.SubscribableListener.onResponse(SubscribableListener.java:262)
        at org.elasticsearch.xpack.esql.session.EsqlSession.lambda$preAnalyzeMainIndices$18(EsqlSession.java:659)
        at [email protected]/org.elasticsearch.action.ActionListenerImplementations$DelegatingFailureActionListener.onResponse(ActionListenerImplementations.java:233)
        at org.elasticsearch.xpack.esql.session.IndexResolver.lambda$resolveAsMergedMapping$0(IndexResolver.java:90)
        at [email protected]/org.elasticsearch.action.ActionListenerImplementations$ResponseWrappingActionListener.onResponse(ActionListenerImplementations.java:261)
        at [email protected]/org.elasticsearch.action.ActionListener$3.onResponse(ActionListener.java:413)
        at [email protected]/org.elasticsearch.tasks.TaskManager$1.onResponse(TaskManager.java:228)
        at [email protected]/org.elasticsearch.tasks.TaskManager$1.onResponse(TaskManager.java:222)
        at [email protected]/org.elasticsearch.action.ActionListenerImplementations$RunBeforeActionListener.onResponse(ActionListenerImplementations.java:350)
        at [email protected]/org.elasticsearch.action.ActionListener$3.onResponse(ActionListener.java:413)
        at [email protected]/org.elasticsearch.action.fieldcaps.TransportFieldCapabilitiesAction.mergeIndexResponses(TransportFieldCapabilitiesAction.java:399)
        at [email protected]/org.elasticsearch.action.fieldcaps.TransportFieldCapabilitiesAction.lambda$doExecuteForked$7(TransportFieldCapabilitiesAction.java:259)
        at [email protected]/org.elasticsearch.core.AbstractRefCounted$1.closeInternal(AbstractRefCounted.java:125)
        at [email protected]/org.elasticsearch.core.AbstractRefCounted.decRef(AbstractRefCounted.java:77)
        at [email protected]/org.elasticsearch.action.support.RefCountingRunnable.close(RefCountingRunnable.java:113)
        at [email protected]/org.elasticsearch.core.Releasables$4.close(Releasables.java:178)
        at [email protected]/org.elasticsearch.common.util.concurrent.RunOnce.run(RunOnce.java:41)
        at [email protected]/org.elasticsearch.action.fieldcaps.RequestDispatcher.innerExecute(RequestDispatcher.java:177)
        at [email protected]/org.elasticsearch.action.fieldcaps.RequestDispatcher$1.doRun(RequestDispatcher.java:146)
        at [email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:27)
        at [email protected]/org.elasticsearch.action.fieldcaps.TransportFieldCapabilitiesAction$1.onResponse(TransportFieldCapabilitiesAction.java:348)
        at [email protected]/org.elasticsearch.action.fieldcaps.TransportFieldCapabilitiesAction$1.onResponse(TransportFieldCapabilitiesAction.java:344)
        at [email protected]/org.elasticsearch.common.util.concurrent.AbstractThrottledTaskRunner$1.doRun(AbstractThrottledTaskRunner.java:136)
        at [email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:27)
        at [email protected]/org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:35)
        at [email protected]/org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:1067)
        at [email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:27)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1095)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:619)
        at java.base/java.lang.Thread.run(Thread.java:1447)

Another (shorter) failing query is

ts k8s-downsamp* | stats  zQECuIIgH = max(network.eth0.currently_connected_clients), `network.total_cost` = min(network.cost) by client.ip = bucket(@timestamp,1hour) | stats  network.total_cost = max(client.ip), TjxZpcuH = sum(first_over_time(network.total_cost)) by zQECuIIgH = bucket(client.ip,1hour)

Existing bug 3:

Verification fails because field being grouped on changes from field to reference (Output has changed from [ ... event_log{f}#347 ...] to [ ... event_log{r}#347 ...])

Example stack trace
GenerativeMetricsIT > test FAILED
    java.lang.AssertionError: query: ts k8s-downsa* | stats  `network.eth0.tx` = count(*), network.eth0.rx = min(count_over_time(event)) by event_log, `network.eth0.currently_connected_clients` = bucket(@timestamp,1hour)
    exception: method [POST], host [http://[::1]:58427], URI [/_query?pretty=true&error_trace=true], status line [HTTP/1.1 400 Bad Request]
    Warnings: [No limit defined, adding default limit of [1000]]
    ---
    error:
      root_cause:
      - type: "verification_exception"
        reason: "Found 1 problem\nline 1:18: Output has changed from [[network.eth0.tx{r}#338,\
          \ network.eth0.rx{r}#341, event_log{f}#347, network.eth0.currently_connected_clients{r}#336]]\
          \ to [[network.eth0.tx{r}#338, network.eth0.rx{r}#341, event_log{r}#347, network.eth0.currently_connected_clients{r}#336]]. "
        stack_trace: "org.elasticsearch.xpack.esql.VerificationException: Found 1 problem
          line 1:18: Output has changed from [[network.eth0.tx{r}#338, network.eth0.rx{r}#341,\
          \ event_log{f}#347, network.eth0.currently_connected_clients{r}#336]] to [[network.eth0.tx{r}#338,\
          \ network.eth0.rx{r}#341, event_log{r}#347, network.eth0.currently_connected_clients{r}#336]].
               org.elasticsearch.xpack.esql.optimizer.LogicalPlanOptimizer.optimize(LogicalPlanOptimizer.java:118)
               org.elasticsearch.xpack.esql.session.EsqlSession.optimizedPlan(EsqlSession.java:773)
               org.elasticsearch.xpack.esql.session.EsqlSession$1.lambda$onResponse$1(EsqlSession.java:186)
               [email protected]/org.elasticsearch.action.ActionListenerImplementations$ResponseWrappingActionListener.onResponse(ActionListenerImplementations.java:261)
               [email protected]/org.elasticsearch.action.support.SubscribableListener$SuccessResult.complete(SubscribableListener.java:406)
               [email protected]/org.elasticsearch.action.support.SubscribableListener.tryComplete(SubscribableListener.java:326)
               [email protected]/org.elasticsearch.action.support.SubscribableListener.addListener(SubscribableListener.java:222)
               [email protected]/org.elasticsearch.action.support.SubscribableListener.lambda$andThen$1(SubscribableListener.java:534)
               [email protected]/org.elasticsearch.action.ActionListener.run(ActionListener.java:465)
               [email protected]/org.elasticsearch.action.support.SubscribableListener.newForked(SubscribableListener.java:138)
               [email protected]/org.elasticsearch.action.support.SubscribableListener.andThen(SubscribableListener.java:534)
               [email protected]/org.elasticsearch.action.support.SubscribableListener.andThen(SubscribableListener.java:489)
               org.elasticsearch.xpack.esql.session.EsqlSession$1.onResponse(EsqlSession.java:186)
               org.elasticsearch.xpack.esql.session.EsqlSession$1.onResponse(EsqlSession.java:177)
               [email protected]/org.elasticsearch.action.support.SubscribableListener$SuccessResult.complete(SubscribableListener.java:406)
               [email protected]/org.elasticsearch.action.support.SubscribableListener.tryComplete(SubscribableListener.java:326)
               [email protected]/org.elasticsearch.action.support.SubscribableListener.setResult(SubscribableListener.java:355)
               [email protected]/org.elasticsearch.action.support.SubscribableListener.onResponse(SubscribableListener.java:262)
               org.elasticsearch.xpack.esql.session.EsqlSession.analyzeWithRetry(EsqlSession.java:708)
               org.elasticsearch.xpack.esql.session.EsqlSession.lambda$analyzedPlan$11(EsqlSession.java:389)
               [email protected]/org.elasticsearch.action.ActionListenerImplementations$ResponseWrappingActionListener.onResponse(ActionListenerImplementations.java:261)
               [email protected]/org.elasticsearch.action.support.SubscribableListener$SuccessResult.complete(SubscribableListener.java:406)
               [email protected]/org.elasticsearch.action.support.SubscribableListener.tryComplete(SubscribableListener.java:326)
               [email protected]/org.elasticsearch.action.support.SubscribableListener.setResult(SubscribableListener.java:355)
               [email protected]/org.elasticsearch.action.support.SubscribableListener.onResponse(SubscribableListener.java:262)
               org.elasticsearch.xpack.esql.session.EsqlSession.lambda$preAnalyzeMainIndices$18(EsqlSession.java:659)
               [email protected]/org.elasticsearch.action.ActionListenerImplementations$DelegatingFailureActionListener.onResponse(ActionListenerImplementations.java:233)
               org.elasticsearch.xpack.esql.session.IndexResolver.lambda$resolveAsMergedMapping$0(IndexResolver.java:90)
               [email protected]/org.elasticsearch.action.ActionListenerImplementations$ResponseWrappingActionListener.onResponse(ActionListenerImplementations.java:261)
               [email protected]/org.elasticsearch.action.ActionListener$3.onResponse(ActionListener.java:413)
               [email protected]/org.elasticsearch.tasks.TaskManager$1.onResponse(TaskManager.java:228)
               [email protected]/org.elasticsearch.tasks.TaskManager$1.onResponse(TaskManager.java:222)
               [email protected]/org.elasticsearch.action.ActionListenerImplementations$RunBeforeActionListener.onResponse(ActionListenerImplementations.java:350)
               [email protected]/org.elasticsearch.action.ActionListener$3.onResponse(ActionListener.java:413)
               [email protected]/org.elasticsearch.action.fieldcaps.TransportFieldCapabilitiesAction.mergeIndexResponses(TransportFieldCapabilitiesAction.java:399)
               [email protected]/org.elasticsearch.action.fieldcaps.TransportFieldCapabilitiesAction.lambda$doExecuteForked$7(TransportFieldCapabilitiesAction.java:259)
               [email protected]/org.elasticsearch.core.AbstractRefCounted$1.closeInternal(AbstractRefCounted.java:125)
               [email protected]/org.elasticsearch.core.AbstractRefCounted.decRef(AbstractRefCounted.java:77)
               [email protected]/org.elasticsearch.action.support.RefCountingRunnable.close(RefCountingRunnable.java:113)
               [email protected]/org.elasticsearch.core.Releasables$4.close(Releasables.java:178)
               [email protected]/org.elasticsearch.common.util.concurrent.RunOnce.run(RunOnce.java:41)
               [email protected]/org.elasticsearch.action.fieldcaps.RequestDispatcher.innerExecute(RequestDispatcher.java:177)
               [email protected]/org.elasticsearch.action.fieldcaps.RequestDispatcher$1.doRun(RequestDispatcher.java:146)
               [email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:27)
               [email protected]/org.elasticsearch.action.fieldcaps.TransportFieldCapabilitiesAction$1.onResponse(TransportFieldCapabilitiesAction.java:348)
               [email protected]/org.elasticsearch.action.fieldcaps.TransportFieldCapabilitiesAction$1.onResponse(TransportFieldCapabilitiesAction.java:344)
               [email protected]/org.elasticsearch.common.util.concurrent.AbstractThrottledTaskRunner$1.doRun(AbstractThrottledTaskRunner.java:136)
               [email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:27)
               [email protected]/org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:35)
               [email protected]/org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:1067)
               [email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:27)
               java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1095)
               java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:619)
               java.base/java.lang.Thread.run(Thread.java:1447)"

}

public static String metricsAgg(List<Column> previousOutput) {
String outerCommand = randomFrom("min", "max", "sum", "count", "avg");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there an easy way to include a wider range of aggregation functions that apply on numerics? E.g. std_dev and top should be applicable.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this list is probably the closest thing we'd have to that? Could exclude the commands that don't apply? (*_over_time functions, spatial, i/rate, and those 3 internal functions?)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, let's give it a shot.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reviewing the list a little bit more closely, it looks like some of the names (as NamedWriteableRegistry.Entry) might be a little bit different vs the ES|QL names (CountDistinct vs count_distinct) so this might not work actually....

if (counterField == null) {
yield null;
}
yield "rate(" + counterField + ")";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

or last|first_over_time, once supported.

};
if (innerCommand == null) {
// TODO: figure out a default that maybe makes more sense than using a timestamp field
innerCommand = "count_over_time(" + randomDateField(previousOutput) + ")";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe * works, though not great.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

count(*) is the default in the normal Stats generator but it breaks when combined with time_series aggregations (bug 1), so until we fix that I don't think we can/should set that as the default here

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah we'd need to think of the semantics.. Let's file an issue for the bug btw, good catch :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I will double-check the state of these bugs first before opening an issue; running a few queries I'm getting some completely new bugs so it's possible that some of them might be fixed.
Somewhat related, I think I saw that @not-napoleon was working on something similar to bug 3 (Output has changed)?

Copy link
Contributor

@kkrik-es kkrik-es left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, promising! Lemme add Nhat for thoughts too.

@kkrik-es kkrik-es requested a review from dnhatn September 10, 2025 11:41
@luigidellaquila
Copy link
Contributor

Quick heads-up: we are moving the query generator to a more convenient place, so that we can reuse it in different contexts, see #134696

It's not merged yet and I can wait a bit, so please let me know if you are close to merging this one. I don't want to block your progress.

@limotova
Copy link
Contributor Author

@luigidellaquila thank you for letting us know!
Yes if it's possible I'd like to try to get this in first. I'm looking at making a list of bugs and getting this test in a passing state for now

@limotova limotova force-pushed the ts-in-generative-tests branch from dfb9d59 to 5235b80 Compare September 16, 2025 10:24
@limotova
Copy link
Contributor Author

Sorry for the force push; the only thing it should've swallowed was the spotlessApply

@limotova limotova added >test Issues or PRs that are addressing/adding tests :StorageEngine/ES|QL Timeseries / metrics / logsdb capabilities in ES|QL labels Sep 16, 2025
Copy link
Contributor

@kkrik-es kkrik-es left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome.

@limotova limotova marked this pull request as ready for review September 16, 2025 11:04
@elasticsearchmachine
Copy link
Collaborator

Pinging @elastic/es-storage-engine (Team:StorageEngine)

Copy link
Member

@dnhatn dnhatn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One comment, great work! Thanks Larisa!

@limotova limotova merged commit 8d6f446 into elastic:main Sep 18, 2025
34 checks passed
@limotova limotova deleted the ts-in-generative-tests branch September 18, 2025 19:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

:StorageEngine/ES|QL Timeseries / metrics / logsdb capabilities in ES|QL Team:StorageEngine >test Issues or PRs that are addressing/adding tests v9.2.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants