Commit graph

287 commits

Author SHA1 Message Date
Przemyslaw Gomulka
11f3c29089
DocumentSizeObserver infrastructure to allow not reporting upon failures (#104859)
We want to report that observation of document parsing has finished only upon a successful indexing.
To achieve this, we need to perform reporting only in one place (not as previously in both IngestService and 'bulk action')

This commit splits the DocumentParsingObserver in two. One for wrapping an XContentParser and returning the observed state - the DocumentSizeObserver and a DocumentSizeReporter to perform an action when parsing has been completed and indexing successful.

To perform reporting in one place we need to pass the state from IngestService to 'bulk action'. The state is currently represented as long - normalisedBytesParsed.

In TransportShardBulkAction we are getting the normalisedBytesParsed information and in the serverless plugin we will check if the value is indicating that parsing already happened in IngestService (value being != -1) we create a DocumentSizeObserver with the fixed normalisedBytesParsed and won't increment it.

When the indexing is completed and successful we report the observed state for an index with DocumentSizeReporter

small nit: by passing the documentParsingObserve via SourceToParse we no longer have to inject it via complex hierarchy for DocumentParser. Hence some constructor changes
2024-02-12 17:16:24 +01:00
Craig Taverner
eb1c490264
ESQL: Support reading points from doc-values for STATS (#104218)
* Add initial structure for ST_CENTROID

* Revert "Revert stab at implementing forStats for doc-values vs source"

This reverts commit cfc4341bf4.

* Refined csv-spect tests with st_centroid

* Spotless disagrees with intellij

* Fixes after reverting fieldmapper code to test GeoPointFieldMapper

* Get GeoPointFieldMapperTests working again after enabling doc-values reading

* Simplify after rebase on main

In particular, field-mappers that do not need to know about fields can have simpler calls.

* Support local physical planning of forStats attributes for spatial aggregations

* Get st_centroid aggregation working on doc-values

We changed it to produce BytesRef, so we don't (yet) need any doc-values types.

* Create both DocValues and SourceValues versions of st_centroid

* Support physical planning of DocValues and SourceValues SpatialCentroid

* Improve test for physical planning of DocValues in SpatialCentroid

* Fixed show functions for st_centroid

* More st_centroid tests with mv_expand

To test single and multi-value centroids

* Fix st_centroid from point literals

The blocks contained BytesRef byte[] with multiple values, and we were ignoring the offsets when decoding, so decoding the first value over and over instead of decoding the subsequent values.

* Teach CsvTests to handle spatial types alternative loading from doc-values

Spatial GEO_POINT and CARTESIAN_POINT load from doc-values in some cases. If the physical planner has planned for this, we need the CsvTests to also take that into account, changing the type of the point field from BytesRefBlock to LongBlock.

* Fixed failing NodeSubclassTests

Required making the new constructor public and enabling Set as a valid parameter in the test framework.

* More complex st_centroid tests and fixed bug with multiple aggs

When there were multiple agregations in the same STATS, we were inadvertently re-ordering them, causing the wrong Blocks to be fed to the wrong aggregator in the coordinator node.

* Update docs/changelog/104218.yaml

* Fix automatically generated changelog file

* Fixed failing test

The nodes can now sometimes be Set, which is also a Collection, but not a List, and therefor never can be a subset of the children.

* More tests covering more combinations including MV_EXPAND and grouping

* Added cartesian st_centroid with grouping test

We could not add MV_EXPAND tests since the cartesian data does not have multi-value columns, but the geo_point tests are sufficient for this since they share the same code.

* Reduce flaky tests by sorting results

* Reduce flaky tests by sorting results

* Added tests for stats on stats to ensure planner coped

* Add unit tests to ensure doc-values in query planning complex cases

* Some minor updates from code review

* Fixes after rebase on main

* Get correct error message on unsupported geo_shape for st_centroid

* Refined point vs shape differences after merging main

* Added basic docs

* Delete docs/changelog/104218.yaml

* Revert "Delete docs/changelog/104218.yaml"

This reverts commit 4bc596a442.

* Fixed broken docs tag link

* Simplify BlockReaderSupport in MapperTestCase from code review

* Moved spatial aggregations into a sub-package

* Added some more code review updates, including nested tests

* Get nested functions working, if only from source values for now

* Code review update

* Code review update

* Added second location column to airports for wider testing

* Use second location in tests, including nulls

Includes a test fix for loading and converting nulls to encoded longs.

* Fixed bug supporting multi spatial aggregations in the local node

The local physical planner only marked a single field for stats loading, but marked all spatial aggregations for stats loading, which load to only one aggregation getting the right data, while the rest would get the wrong data.

* Renamed forStats to fieldExtractPreference for clarity

Now the planner decides whether to load data from doc-values. To remove the confusion of preferDocValues==false in the non-spatial cases, we use an ENUM with the default value of NONE, to make it clear we're leaving the choice up to the field type in all non-spatial cases.

* EsqlSpecIT was failing on very high precision centroids on different computers

This was not reproducible on the development machine, but CI machines were sufficiently different to lead to very tiny precision changes over very large Kahan summations. We fixed this by reducing the need for precision checks in clustered integration tests.

* Delete docs/changelog/104218.yaml

* Revert "Delete docs/changelog/104218.yaml"

This reverts commit 12c6980881.

* Fixed changelog entry
2024-01-23 16:04:45 +01:00
Gareth Ellis
764269b395
Thread pool metrics (#104500)
This implements metrics for the threadpools.

The aim is to emit metrics for the various threadpools, the metric callback should be created when the threadpool is created, and removed before the threadpool is shutdown.

The PR also includes a test for the new metrics, and some additions to the metrics test plugin.

Finally the metric name check has been modified to allow some of the non compliant threadpools (too long, includes - )
Co-authored-by: Przemyslaw Gomulka <przemyslaw.gomulka@elastic.co>
2024-01-18 10:15:58 +01:00
Przemyslaw Gomulka
aa42368dba
Revert "Adding threadpool metrics (#102371)" (#104467)
This reverts commit afd915af1e.
2024-01-17 17:01:28 +01:00
Gareth Ellis
afd915af1e
Adding threadpool metrics (#102371)
This implements metrics for the threadpools.

The aim is to emit metrics for the various threadpools, the metric callback should be created when the threadpool is created, and removed before the threadpool is shutdown.

The PR also includes a test for the new metrics, and some additions to the metrics test plugin.

Finally the metric name check has been modified to allow some of the non compliant threadpools (too long, includes - )

---------

Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
Co-authored-by: Przemyslaw Gomulka <przemyslaw.gomulka@elastic.co>
2024-01-17 15:27:12 +01:00
Alexander Spies
83565aceff
ESQL: Fix rounding error in BlockBenchmark (#104041)
Round doubles before summing to avoid errors due to wrong checksum.
2024-01-16 09:53:57 +01:00
Nik Everett
f6c036227b
ESQL: Drop BigArrays from many places (#104014)
Many places in ESQL receive a `BigArrays` and a `DriverContext`. We only
need one of the two because `DriveContext` *has* `BigArrays`. This stops
passing `BigArrays` many, many, many places.
2024-01-05 21:52:46 -05:00
Nik Everett
a994aede95
ESQL: Check field exists before load from _source (#103632)
Loading fields from `_source` is *super* slow because you have to
decompress the stored fields and then turn the stored field into a
map-of-maps. And then dig through the map-of-maps. This adds "does this
field exist" style checks before most loads from `_source`. Not all
fields can do it, but most fields can.

This really improves the performance of our
`esql_dissect_duration_and_stats` benchmark, mostly because it is
running `dissect` on a field that has to load from `_source` that isn't
in many of the documents. Here's the performance:
```
|  50th percentile service time | 867.667 | 100.491 | -767.176 | ms | -88.42% |
|  90th percentile service time | 886.042 | 102.434 | -783.608 | ms | -88.44% |
| 100th percentile service time | 893.035 | 104.598 | -788.437 | ms | -88.29% |
```
2024-01-05 08:51:15 -05:00
Benjamin Trent
83007037c8
Update jmh benchmark for dynamic mappers (#103916) 2024-01-04 12:22:12 -05:00
Nik Everett
fac60e5803
ESQL: Delay finding field load infrastructure (#103821)
This optimizes loading fields across many, many indices by resolving the
field loading infrastructure when it's first needed rather than up
front. This speeds things up because, if you are loading from many many
shards, you often don't need to set up the field loading infrastructure
for all shards at all - often you'll just need to set it up for a couple
of the shards.
2024-01-03 14:00:32 -05:00
Alexander Spies
eb18ad911c
ESQL: Array blocks backed by vecs (#103623)
Use vectors consistently for storing blocks' values.

This allows for simple implementations of expand and filter by simply sharing the (refcounted) vector contained in a block.
2023-12-22 13:34:25 +01:00
Nhat Nguyen
509dfbdd1f
Remove non-breaking block factory from production (#103661)
We now can remove the non-breaking block factory from production code. 
All blocks are now properly tracked except two small places in the planner.
2023-12-21 12:11:13 -08:00
Nhat Nguyen
281ec13a38
Remove non-breaking block builders (#103638)
This PR removes Builder APIs that use the non-breaking block factory. 
Similar to the previous PRs, some tests now explicitly use the
non-breaking block factory. The main goal of this PR is to remove the
non-breaking block factory from the production code.
2023-12-21 08:26:07 -08:00
Nhat Nguyen
d5a2dc4a49
Remove non-breaking API vectors (#103598)
This PR removes APIs in Vectors that use the non-breaking block factory. 
Some tests now explicitly use the non-breaking factory. The goal of this
PR, along with some follow-ups, is to phase out the non-breaking block
factory in production. We can gradually remove its usage in tests later
2023-12-20 10:00:55 -08:00
Nhat Nguyen
642ae13989 Fix benchmark compilation 2023-12-20 08:18:05 -08:00
Alexander Spies
812686a079
ESQL: Block access benchmark (#102872)
Add a micro benchmark for access times to individual block elements.
2023-12-20 14:57:20 +01:00
Benjamin Trent
6b6fd7b957
Adding new DynamicMapperBenchmark to exercise dynamic mapping parsing (#103015) 2023-12-05 15:43:48 -05:00
Alexander Spies
09afa36020
ESQL: Make EvalBenchmarks executable again (#102854) 2023-12-01 18:03:06 +01:00
Nik Everett
f3b68a6b8f
ESQL: Load text field from parent keyword field (#102490)
This adds support for loading a text field from a parent keyword field.
The mapping for that looks like:

```
"properties": {
  "foo": {
    "type": "keyword",
    "fields": {
      "text": { "type": "text" }
    }
  }
}
```

In this case it's safe to load the `text` subfield from the doc values
for the `keyword` field above.

Closes #102473
2023-11-28 14:38:33 -05:00
Salvatore Campagna
b9db21ab06
Export circuit breaker trip count as a counter metric (#101423)
Here we export both parent and children circuit breaker trip counts as metrics so that we can collect their values using APM. We expose a counter for the trip count of the parent circuit breaker and a counter for each trip count of children circuit breakers including:

* field data circuit breakers
* per-request circuit breakers
* in-flight requests circuit breakers
* custom circuit breakers used by plugins (EQL and Machine Learning)

The circuit breaker metrics include:

* es.breaker.parent.trip.total
* es.breaker.field_data.trip.total
* es.breaker.request.trip.total
* es.breaker.in_flight_requests.trip.total
* es.breaker.eql_sequence.trip.total
* es.breaker.in_model_inference.trip.total

Each of the metrics is exposed at node level.
2023-11-27 14:18:27 +01:00
Nhat Nguyen
e100384466
Remove Block.Ref from MultivalueDedupe (#102432)
We should replace Block.Ref with reference counting of Block. The PR is 
an initial step that removes Block.Ref from MultivalueDedupe.
2023-11-21 22:36:49 -08:00
Nik Everett
a4a12a668e
ESQL: Support the _source metadata field (#102391)
This adds support for load the `_source` field using the syntax:

```
FROM test [METADATA _source]
```

The `_source` field is loaded as a special type - `_source` which no
functions support (1). We just render it on the output. Which looks
like:

```
$ curl -XDELETE -uelastic:password localhost:9200/test
$ curl -XPOST -HContent-Type:application/json -uelastic:password localhost:9200/test/_doc/1?refresh -d'{
  "words": "words",
  "other stuff": [
    "wow",
    "such",
    "suff"
  ]
}'
$ curl -XPOST -HContent-Type:application/json -uelastic:password localhost:9200/_query?pretty -d'{
  "query": "FROM test [METADATA _source] | KEEP _source | LIMIT 1"
}'

{
  "columns" : [
    {
      "name" : "_source",
      "type" : "_source"
    }
  ],
  "values" : [
    [
      {
        "words" : "words",
        "other stuff" : [
          "wow",
          "such",
          "suff"
        ]
      }
    ]
  ]
}
```

The `_source` is just a json object. We use the same infrastructure to
convert it to json as the `_search` response.

This works for both stored `_source` and synthetic `_source`, but it
runs row-by-row every time. This *perfect* for stored `_source` but it's
less nice to synthetic `_source`. We'd be better of rebuilding synthetic
`_source` from blocks but that'd require a lot of new infrastructure.
And synthetic `_source` isn't going to be fast anyway.

(1): `IS NULL` and `IS NOT NULL` support `_source` because we get that
for free.
2023-11-21 16:34:20 -05:00
Nik Everett
fd300cffcf
ESQL: Load more than one field at once (#102192)
This modifies ESQL to load a list of fields at one time which is especially
effective when loading from stored fields or _source because it allows
visiting the stored fields one time.

Part of #101322
2023-11-20 09:44:04 -05:00
Armin Braun
ae6d180379
Clean up some more dead code in o.e.s.aggregations (#101820)
Another iteration of mostly automatic cleanup on top of #101806.
2023-11-07 20:07:17 +01:00
Lee Hinman
4952f986ce
Modularize shard availability service (#101796)
* Modularize shard availability service

This commit moves the `ShardsAvailabilityHealthIndicatorService` to a package and modularizes it
with exports so that Serverless can make use of it as a superclass.

Relates to #101394
2023-11-03 15:59:09 -06:00
Simon Cooper
43a3730df9
Refactor PluginsService.filterPlugins to return a Stream rather than a List (#101522) 2023-10-31 10:09:14 +00:00
Nik Everett
5365daa221
ESQL: Track memory from values loaded from lucene (#101383)
This adds memory tracking for values loaded from doc values and stored
fields.
2023-10-26 21:24:43 -04:00
Nik Everett
4ca793ec1a
ESQL: Load values a different way (#101235)
This changes how we load values in ESQL, delegating to the
`MappedFieldType` like we do with doc values and synthetic
source. This allows a much more OO way of getting the loads
working which makes that path much easier to read. And! It
means those code paths look like doc values. So there's
symmetry. It's like it rhymes.

There are a few side effects here:
1. It's fairly simple to load from ordinals efficiently. I
   wrote some block-at-a-time code for resolving ordinals
   and it's about twice as fast. With more work it should
   be possible to make custom ordinal-shaped blocks move
   through the system to save space and speed things up.
2. Most fields can now be loaded from `_source`. Everything
   that can be loaded from `_source` in scripts will load
   from `_source` in ESQL.
3. We get a *lot* more tests for loading fields in
   different configurations by piggybacking on the synthetic
   source testing framework. 
4. Loading from `_source` no longer sorts the fields. Same
   for stored fields. Now we keep them in whatever they were
   stored in. This is a pretty marginal time save because
   loading from `_source` is so much more time consuming
   than the sort. But it's something.
2023-10-25 14:05:09 -04:00
Nik Everett
38eac268b4
ESQL: Build tracked block in EVAL (#100268)
This changes `EVAL` to build tracked blocks so we can trip the breaker
when there are too many tracked blocks hanging about.
2023-10-04 10:29:54 -04:00
Luigi Dell'Aquila
2212c7d7c4
ESQL: Add DriverContext to aggregators and aggregator functions (#100080)
Add DriverContext to aggregators and aggregator functions so that block
creation can use blockFactory()
2023-10-04 06:41:07 -04:00
Nik Everett
c779a54578
ESQL: Fix mv evaluators releasing (#100097)
This adds comprehensive tests for `ExpressionEvaluator` making sure that it releases `Block`s. It fixes all of the `mv_*` evaluators to make sure they release as well.
2023-10-03 16:46:45 -04:00
Chris Hegarty
29de48e339
ESQL: Use blockFactory more in aggs (#100017)
This commit updates the hash grouping operator to close input pages, as well as use the block factory for internally created blocks.

Additionally:

 * Adds a MockBlockFactory to help with tracking block creation
 * Eagerly creates the block view of a vector, which helps with tracking since there can be only one block view instance per vector
 * Resolves an issue with Filter Blocks, whereby they previously tried to emit their contents in toString
2023-10-03 14:01:13 +01:00
Nik Everett
e1b1f6f1db
ESQL: Create Block.Ref (#100042)
This creates `Block.Ref`, a reference to a `Block` which may or may not
be part of a `Page`. `Block.Ref` is `Releasable` and closing it is a
noop if the `Block` is part of a `Page`, but if it is "free floating"
then closing the `Block.Ref` will close the block.

It also modified `ExpressionEvaluator` to return a `Block.Ref` instead
of a `Block` - so you tend to work with `ExpressionEvaluator`s like
this:

```
try (Block.Ref ref = eval.eval(page)) {
  return ref.block().doStuff();
}
```

This should make it *much* easier to release the memory from `Block`s
built by `ExpressionEvaluator`s.

This change is mostly mechanical, introducing the new signature for
`ExpressionEvaluator`. In a follow up change I'll modify the tests to
make sure we're correctly using it to close pages.

I did think about changing `ExpressionEvaluator` to add a method telling
you if the block that it returns must be closed or not. This would have
been more difficult to work with, and, ultimately, limiting.
Specifically, it is possible for an `ExpressionEvaluator` to *sometimes*
return a free floating block and other times return one that is
contained in a `Page`. Imagine `mv_concat` - it returns the block it
receives if the block doesn't have multivalued fields. Otherwise it
concats things. If that block happens to come directly out of the
`Page`, then `mv_concat` will sometimes produce free floating blocks and
sometimes not.
2023-09-29 09:26:44 -04:00
Nhat Nguyen
163b5eff5a
Add deduplicated attribute to MvOrdering (#100027)
Today, we have the ability to specify whether multivalued fields are 
sorted in ascending order or not. This feature allows operators like
topn to enable optimizations. However, we are currently missing the
deduplicated attribute. If multivalued fields are deduplicated at each
position, we can further optimize operators such as hash and mv_dedup.
In fact, blocks should not have mv_ascending property alone; it always
goes together with mv_deduplicated. Additionally, mv_dedup or hash
should generate blocks that have only the mv_dedup property.
2023-09-28 12:41:39 -07:00
Nik Everett
0e219307f2
ESQL: Track blocks (#100025)
This tracks blocks from topn and a few other places. We're going to try
and track blocks all the places.
2023-09-28 13:17:08 -04:00
Chris Hegarty
21d9de04a1
Add a Factory for building blocks and Vectors (#99657)
This commit adds a BlockFactory - an extra level of indirection when building blocks. The factory couples circuit breaking when building, allowing for incrementing the breaker as blocks and Vectors are built.

This PR adds the infrastructure to allow us to move the operators and implementations over to the factory, rather than actually moving all there at once.
2023-09-22 14:30:34 +01:00
William Brafford
1f3126b47b
Add mappings versions to ClusterState.Builder convenience methods (#99551)
This is a follow-up to
[#99307](https://github.com/elastic/elasticsearch/pull/99307), adjusting
convenience methods that used to take `TransportVersion` arguments to
account for `MappingsVersion` maps.
2023-09-19 15:36:21 -04:00
Nik Everett
1a14bc7a06
ESQL: Prevent topn from using too much memory (#99611)
This prevents topn operations from using too much memory by hooking them
into circuit breaking framework. It builds on the work done in
https://github.com/elastic/elasticsearch/pull/99316 that moved all topn
storage to byte arrays by adding circuit breaking to process of growing
the underlying byte array.
2023-09-18 11:33:39 -04:00
Chris Hegarty
07f6a65b24
ESQL: Remove default driver context (#99573)
This commit removes the default driver implementation.
2023-09-14 17:24:42 +01:00
Chris Hegarty
baf11a9d03
ESQL: Add DriverContext to the construction of Evaluators (#99518)
This commit adds DriverContext to the construction of Evaluators.

DriverContext is enriched to carry bigArrays, and will eventually carry a BlockFactory - it's the context for code requiring to create instances of blocks and big arrays.
2023-09-13 22:09:23 +01:00
Nik Everett
5ddc67db03
ESQL: Compact topn (#99316)
This lowers topn's memory usage somewhat and makes it easier to track
the memory usage. That looks like:

```
"status" : {
  "occupied_rows" : 10000,
  "ram_bytes_used" : 255392224,
  "ram_used" : "243.5mb"
}
```

In some cases the memory usage savings is significant. In an example
with many, many keys the memory usage of each row drops from `58kb` to
`25kb`. This is a little degenerate though and I expect the savings to
normally be on the order of 10%.

The real advantage is memory tracking. It's *easy* to track used memory.
And, in a followup, it should be fairly easy to track circuit break the
used memory.

Mostly this is done by adding new abstractions and moving existing
abstractions to top level classes with tests and stuff.

* `TopNEncoder` is now a top level class. It has grown the ability to *decode* values as well as encode them. And it has grown "unsortable" versions which don't write their values such that sorting the bytes sorts the values. We use the "unsortable" versions when writing values.
* `KeyExtractor` extracts keys from the blocks and writes them to the row's `BytesRefBuilder`. This is basically objects replacing one of switch statements in `RowFactory`. They are more scattered but easier to test, and hopefully `TopNOperator` is more readable with this behavior factored out. Also! Most implementations are automatically generated.
* `ValueExtractor` extracts values from the blocks and writes them to the row's `BytesRefBuilder`. This replaces the other switch statement in `RowFactory` for the same reasons, except instead of writing to many arrays it writes to a `BytesRefBuilder` just like the key as compactly as it can manage.

The memory savings comes from three changes: 1. Lower overhead for
storing values by encoding them rather than using many primitive arrays.
2. Encode the value count as a vint rather than a whole int. Usually
there are very few rows and vint encodes that quite nicely. 3. Don't
write values that are in the key for single-valued fields. Instead we
read them from the key. That's going to be very very common.

This is unlikely to be faster than the old code. I haven't really tried
for speed. Just memory usage and accountability. Once we get good
accounting we can try and make this faster. I expect we'll have to
figure out the megamorphic invocations I've added. But, for now, they
help more than they hurt.
2023-09-13 16:27:50 -04:00
William Brafford
b5e06da143
Add mappings versions to CompatibilityVersions (#99307)
CompatibilityVersions now holds a map of system index names to their
mappings versions, alongside the transport version. We also add mapping
versions to the "minimum version barrier": if a node has a system index
whose version is below the cluster mappings version for that system
index, it is not allowed to join the cluster.
2023-09-12 11:16:55 -04:00
Nik Everett
f9107e34c9
ESQL: Disable optimizations with bad null handling (#99434)
* ESQL: Disable optimizations with bad null handling

We have optimizations that kick in when aggregating on the following
pairs of field types:
* `long`, `long`
* `keyword`, `long`
* `long`, `keyword`

These optimizations don't have proper support for `null` valued fields
but will grow that after #98749. In the mean time this disables them in
a way that prevents them from bit-rotting.

* Update docs/changelog/99434.yaml
2023-09-11 13:18:23 -04:00
Nik Everett
443c53c636
ESQL: Add type to layout (#99327)
We want it in a few places.
2023-09-08 07:17:18 -04:00
William Brafford
d32902cf45
Wrap transport version in cluster state (#99114)
Cluster state currently holds a cluster minimum transport version and a map of nodes to transport versions. However, to determine node compatibility, we will need to account for more types of versions in cluster state than just the transport version (see #99076). Here we introduce a wrapper class to cluster state and update accessors and builders to use the new method. (I would have liked to re-use org.elasticsearch.cluster.node.VersionInformation, but that one holds IndexVersion rather than TransportVersion.

* Introduce CompatibilityVersions to cluster state class
2023-09-06 09:52:42 -04:00
Luigi Dell'Aquila
ba87357824
ESQL: Add support for TEXT fields in comparison operators and SORT (#98528) 2023-08-30 15:45:03 +02:00
Simon Cooper
b67a9e1ec3
Move text references to index created version to IndexVersion (#98727) 2023-08-23 10:51:56 +01:00
Armin Braun
83cf72c7dc
Remove ClusterSettings from SearchExecutionContext (#98753)
We did not use the cluster settings on these gigantic objects
except for the one spot in the aggregtion context.
=> we can just hold a reference to it on the aggregation context
and simplify things a little for tests etc.
Also, inline needless indirection via single-use private method in
`toQuery`.
2023-08-23 10:05:18 +02:00
Ignacio Vera
0a2fbee130
Fix compilation error on JDK 20+ (#98762) 2023-08-23 11:11:07 +08:00
Bogdan Pintea
372458c9fd
ESQL: date_trunc(): swap order of arguments (#98624)
Swap arguments order so that the range parameter is first and datetime
one second, inline with other languages.
2023-08-22 18:20:05 +02:00