Skip to main content

Other changes in Imply Enterprise and Hybrid 2026.01 LTS

Imply 2026.01-lts includes a significant number of updates and fixes from a year's worth of STS releases. This document is a reference for the fixes applied since 2025.01 LTS.

Fixes from patches and hotfixes are included in the STS release version.

info

The list of fixes includes bugs from the STS cycle that did not impact the LTS release directly.

For release notes including feature highlights and upgrade considerations, see the Release notes.

Druid changes

2026.01 LTS

  • Fixed an issue where metadata failed to persist when using multi-topic ingestion for Kafka (id: 10821)
  • Fixed an NPE that could occur when ingesting from S3 (id: 73933)

2026.01.4

  • Fixed an issue with queries that used expression filters or expression-based aggregators when there was a multi-value dimension (id: 72776) #19245
  • Fixed an issue where Kinesis task live reports didn't work (id: 72777) #19246
  • Fixed an issue where append queries returned an authorization error even if you had authorization for both datasources (id: 72403) #19147

2026.01.2

  • Fixed an issue where compaction fails when a dimension is in the ordering dimension list but doesn't have a corresponding column (id: 72228)
  • Fixed a parsing issue when there are empty fields in a nested column. (id: 72196) #19072
  • Fixed a metric reporting bug where successful MSQ task requests (POST /druid/v2/sql/task) caused the Router to erroneously emit a query/time metric with a failed status instead of success (id: 72195) #19066

2026.01

  • Added retries for HTTP 401 issues (#18771)(id: 70431)
  • Added query/bytes logging for failed queries (id: 70749)
  • Added maxRowsInMemory to replace rowsInMemory. rowsInMemory now functions as an alternate way to provide that config and is ignored if maxRowsInMemory is specified. Previously, only rowsInMemory existed #18832 (id: 70711)
  • Added a fingerprinting mechanism to track compaction states in a more efficient manner (id: 70754)
  • Added the supervisorId dimension with streaming task metrics (id: 70552)
  • Added the mostFragmentedFirst compaction policy to prioritize fragmented intervals (#18802)(id: 70553)
  • Added support for full parallelism in localSort for the MSQ task engine (id: 70403)
  • Security fixes (id: 71109) (id: 69542)
    • Fixed CVE-2026-23906
  • Changed the response of the /handoff API to no body instead of an empty JSON response (#18884) (id: 70875)
  • Changed metrics behavior so that task metrics get emitted on all task completions (id: 70417)
  • Fixed a logic error in policy application for compaction using the MSQ task engine (id: 70362)
  • Fixed an issue where a projection fails to match when the aggregator has a filter (id: 68534)
  • Fixed an issue with Coordinator-based compaction (#18812) (id: 70609)
  • Fixed an issue where segments weren't getting dropped (#18782) (id: 70498)
  • Fixed an issue where a limit to segments per chunk was enforced incorrectly (#18777) (id: 70445)
  • Fixed an issue where changing the query detaches it from the currently running execution (#18776) (id: 70443)
  • Fixed an issue where an Overlord that is giving up leadership erroneously kills indexing tasks (#18772) (id: 70433)
  • Fixed how task slots for MSQ compaction task are calculated (#18756) (id: 70371)
  • Fixed an issue with how the task action retry count is calculated (#18755) (id: 70369)
  • Fixed an issue where MSQ compaction tasks can fail if a policy enforcer is enabled (#18741) (id: 70291)
  • Fixed an issue in the SeekableStream supervisor autoscaler where scale-down operations would create duplicate supervisor history entries. The autoscaler now correctly waits for tasks to complete before attempting subsequent scale operations (#18715) (id: 70137)
  • Fixed an issue with SQL planning for json_value returning a Boolean to plan as long type output (#18698) (id: 70005)
  • Fixed an issue where a query returns an empty result set with virtual columns in projection filter (id: 69020)
  • Improved the web console:
    • Lookup values now use the default engine (id: 70854)
    • System table queries now explicitly use the 'native' engine (id: 70820)
    • Improved explore max time cancellation (id: 70701)
    • Fixed areas where supervisor_id and datasource were conflated (id: 70691)
    • Fixed inactive worker counting (id: 70571)
    • Improved ISO date parsing (#18724) (id: 70195)
  • Improved supervisors so that they can't kill tasks while the supervisor is stopping (#18767) (id: 70419)
  • Improved the lag-based autoscaler for streaming ingest (#18745) (id: 70402)
  • Improved compaction so that it identifies multi-value dimensions for dimension schemas that can produce them #18760 (id: 70381)
  • Improved lag-based autoscaler config persistence (#18745) (id: 70147)
  • Improved JSON ingestion so that Druid can compute JSON values directly from dictionary or index structures, allowing ingestion to skip persisting raw JSON data entirely. This reduces on-disk storage size #18589 (id: 69394)
  • Improved performance for the timeseries aggregator (id: 69170)
  • Updated ZooKeeper to 3.8.5 (id: 69186)

Changes in 2025.10.3

  • Security updates

Changes in 2025.10.1

  • Added support for AWS S3's internal error retries to the S3 input source (#18720) (id: 70132)

Changes in 2025.07.2

  • Improved how task runners shutdown to prevent the task queue sync from getting stuck (#18471) (id: 68484)
  • Fixed query failures that occurred when you use the Dart query engine and select a destination (#18350) (id: 68331)
  • Fixed a deadlock that occurred when the MSQ task engine retried tasks (#18467) (id: 68498)

Changes in 2025.07.1

  • Added new Kafka consumer metrics (#17919)
  • Added new MSQ task engine metrics and new dimensions to existing metrics (#18121)
  • Added the description dimension for the task/run/time metric
  • Added a metric for how long it takes to complete an autoscale action: task/autoScaler/scaleActionTime (#17971) (id: 66752)
  • Added a taskType dimension to Overlord-emitted task count metrics (#18032) (id: 67226)
  • Added the following groupBy metrics to the Prometheus emitter: mergeBuffer/used, mergeBuffer/acquisitionTimeNs, mergeBuffer/acquisition, groupBy/spilledQueries, groupBy/spilledBytes, and groupBy/mergeDictionarySize (#17929) (id: 66527)
  • Changed the logging level for query cancellation from warn to info to reduce noise (#18046) (id: 67279)
  • Changed query logging so that SQL queries that can't be parsed are no longer logged and don't emit metrics (#18102)
  • Changed the logging level for lifecycle from debug to info (#17884) (id: 66354)
  • Added groupId and tasks to Overlord logs (#18046)
  • You can now use the druid.request.logging.rollPeriod to configure the log rotation period (default 1 day) (#17976) (id: 66767)
  • Improved metric emission on the Broker to include per-query result-level caching (query/resultCache/hit returning 1 means the cache was used) (#18063) (id: 67325)
  • Added audit logs for the following BasicAuthorizerResource update methods: authorizerUserUpdateListener, authorizerGroupMappingUpdateListener, authorizerUpdateListener (deprecated) (#17916)
  • Added support for streaming task logs to Indexers (#18170)
  • Improved ThreadDumpMonitor. It's no loner part of MonitorScheduler so that thread dumps are available even if the MonitorScheduler thread is blocked (id: 67230)
  • Added the following Coordinator APIs: /druid/coordinator/v1/cloneStatus and /druid/coordinator/v1/brokerConfigurationStatus (#17899) Fixed an issue where MSQ task engine workers deadlocked when retrying (#18254) (id: 68043)
  • Improved concurrency for batch and streaming ingestion tasks (#17828)
  • Improved how MSQ task engine tasks get canceled, speeding it up and freeing up resources sooner (#18095)
  • Improved streaming ingestion so that it automatically determine the maximum number of columns to merge (#17917)
  • Improved batch segment allocation so that it uses multiple threads to improve performance when allocating segments for different datasources. Set the config druid.indexer.tasklock.batchAllocationNumThreads (default value 5) to the number of threads you want to use for segment allocation. If you set this config to a very large value, it can hinder performance due to strain on the metadata store (id: 67449) (#18098)
  • Added the optional taskCountStart property to the lag based auto scaler. Use it to specify the initial task count for the supervisor to be submitted with (#18098)
  • Changed how Druid interacts with streaming input sources. Druid now explicitly prevents Seekable Stream Supervisors (Kafka, Kinesis, and Rabbit) from updating the underlying "input stream" (such as a topic for kafka) that is persisted for it. This action, while previously allowed by the API, is not fully supported by the underlying system. Going forward, a request to make such a change will result in a 400 error from the Supervisor API with details on the reason why it is not allowed. The docs and the message in the response describe a work-a-round for users who are adamant that they want to make such a change (#17955) (id: 66327)
  • Added support for big decimal values (id: 63062) (id: 663)
  • Fixed an issue with realtime queries using the MSQ task engine that led to incorrect results (#18235) (id: 67972)
  • Fixed an issue with numeric vector selectors on JSON_VALUE when the least restrictive type contains arrays (#18053) (id: 67356)
  • Changed groupBy queries. Druid now uses the groupBy native query type, rather than topN, for SQL queries that group by and order by the same column, have LIMIT, and don't have HAVING. This speeds up execution of such queries since groupBy is vectorized while topN is not. (#18074) (id:67423)
  • Changed MV_OVERLAP and MV_CONTAINS functions now aligns more closely with the native inType filter (#18084)
  • Fixed an issue where equalTo, greaterThan, and lessThan specs throw a NPE when used with first or last aggregators that return null (#17911) (id: 66482)
  • Improved json_merge() to be SQL-compliant when arguments are null. The function now returns null if any argument is null. For example, queries like SELECT JSON_MERGE(null, null) and SELECT JSON_MERGE(null, '') will return null instead of throwing an error. (#17983)
  • Fixed an issue where NVL vector processor fails with NPE if all inputs are null (#18024) (id: 67214)
  • Fixed the ordering for certain float values in row-based frames (#18181) (id: 66846)
  • You can now perform big decimal aggregations using the MSQ task engine (#18164)
  • You can now configure a timeout for index_parallel and compact type tasks. Set the context parameter subTaskTimeoutMillis to the maximum time in milliseconds you want to wait before a subtask gets canceled. By default, there's no timeout. (#18039) (id: 67252)
  • Improved query handling when segments are temporarily missing on Historicals but not detected by Brokers. Druid doesn't return partial results incorrectly now. (#18025) (id: 67211)
  • Fixed an issue with dropping and reingesting segments when using concurrent append and replace (#18216) (id: 67907)
  • Fixed an issue where concurrent replace tasks didn't delete rows despite marking them as successfully deleted (#18099) (id: 67455)
  • Fixed an issue with URL encoding with Azure (#17887) (id: 66370)
  • Improved the concurrency on the Overlord for the task queue (#17828) (id: 66035)
  • Improved the concurrency on the Overlord by ensuring that task actions on one datasource don't block actions on other datasources (#17390) (id: 66034)
  • Improved streaming ingestion so that it automatically determine the maximum number of columns to merge (#17917)
  • Improved the streaming task autoscaler to use a common thread pool (#18163) (id: 66647)
  • Fixed an issue that can happen when a cursor is reset and the offset contains an OR filter bundle that includes partial index value matchers (#18029) (id: 67221)
  • You can now assign tiered replications to tiers that aren't currently online in the Druid console (#18050)
  • You can now filter tasks by the error in the Task view (#18057)
  • Improved SQL autocomplete and added JSON autocomplete (#18126)
  • Changed how the web console determines what functions are available, improving things like auto-completion (#18214)
  • Updated the web console to use the Overlord APIs instead of Coordinator APIs when managing segments, such as marking them as unused (#18172)
  • Removed the IS_INCREMENTAL_HANDOFF_SUPPORTED context reference from supervisors, as incremental publishing has been the default behavior since version 0.16.0. This context was originally introduced to support rollback to LegacyKafkaIndexTaskRunner in versions earlier than 0.16.0, which has since been removed (#18120) (id: 67502)
  • Removed the useMaxMemoryEstimates config. When set to false, Druid used a much more accurate memory estimate that was introduced in Druid 0.23.0. That more accurate method is the only available method now. The config has defaulted to false for several releases (#17936)

Changes in 2025.04.2

  • Changed the cast expression to be more lenient when casting arrays of primitive values. Casting multi-element arrays now results in a null value in the target type instead of failing. This behavior is consistent with other primitive value behavior (#18078) (id: 67399)
  • Fixed an issue where the NVL function failed if all the inputs were null (#18024) (id: 67214)
  • Fixed an issue where JSON_VALUE would return null for all values if a nested field contained an array (#18053) (id: 67356)
  • Fixed an issue that occurred during a cursor reset if the offset contained an OR filter bundle (#18029) (id: 67221)
  • Fixed an issue where the segment map for a GroupBy query got discarded (#17763) (id: 67430)

Changes in 2025.04.1

  • Fixed an issue that caused streaming ingestion jobs to fail when upsert was enabled (id: 10053)

Changes in 2025.04

  • Row policies are now enforced for Task SQL and Dart SQL endpoints (#17666) (id: 65091)
  • Changed Javascript backed selector strategies to use GraalJS (#17843) (id: 66312)
  • Changed how the Druid console exports data. It is now normalized to how Druid exports data. Additionally, you can export results as Markdown tables (#17845)(id: 66228)
  • Changed the cap for balancerComputeThreads to 100 (#17855) (id: 66275)
  • Improved cleanup of unused datasources from segment metadata cache (#17853)(id: 66272)
  • Improved projections so that they work with compaction (id: 65174) (#17803) (id: 66310)
  • Updated netty4 version (#17755)(id: 65657)
  • Updated async-http-client to 3.0.1 (#17646) (id: 65304)
  • Updated parquet-avro (#17874) (id: 66328)

Changes in 2025.01.1

2025.01

  • Added support to the web console for the expectedLoadTimeMillis metric (#17359) (id: 64208)
  • Added support for aggregate only projections (#17484) (id: 64763)
  • Added support for UNION in decoupled planning (#17354) (id: 64402)
  • Added ingest/notices/queueSize, ingest/pause/time, and ingest/notices/time to statsd emitter (#17487) (id: 64679) (#17468) (id: 64601)
  • Added druid.expressions.allowVectorizeFallback and default to false (#17248) (id: 64173)
  • Added stageId and workerNumber to the MSQ task engine's processing thread names (#17324) (id: 64147)
  • Added support for a high-precision ST_GEOHASH function that takes the complex column geo, which contains longitude and latitude in that order, and returns a hash (id: 63437)
  • Added the config druid.server.http.showDetailedJsonMappingError, which is similar to druid.server.http.showDetailedJettyError, to configure the detail level for JSON mapping error messages (#16821) (id: 62645)
  • Changed how real-time segment metrics are now for each Sink instead of for each FireHydrant. This is a return to emission behavior prior to improvements to real-time query performance made in 2024.02 (#17170) (id: 61871)
  • You no longer have to configure a temporary storage directory on the Middle Manager for durable storage or exports. If it isn't configured, Druid uses the task directory (#17015) (id: 60547)
  • Improved the column order for scan queries so that they align with its desired signature (#17463) (id: 64441)
  • Improved the Query view in the web console to support resizable side panels (#17387) (id: 64404)
  • Improved how the Overlord service determines the leader and hands off leadership (#17415) (id: 64312)
  • Improved Middle Manager-less ingestion so that the Kubernetes task runner exposes the getMaximumCapacity field (#17107) (id: 64168)
  • Improved the styling in the web console for the stage timing bar (#17295) (id: 64157)
  • Improved autoscaling for Supervisors so that scaling doesn't happen when partitions are less than minTaskCount (#17335) (id: 64145)
  • Improved how the Explore view in the web console handles defaults (#17252) (id: 64020)
  • Improved the MSQ task engine to account for situations where there are two simultaneous statistics collectors (#17216) (id: 63987)
  • Improved the lookups extension to support iterating over fetched data (#17212) (id: 63939)
  • Improved logging to include taskId in handoff notifier thread (#17185) (id: 63882)
  • Improved window functions that use the MSQ task engine so that its processor can send any number of rows and columns to the operator without having to partition by column (#17038)(id: 63249)
  • Fixed an issue with PostgreSQL metadata storage because of table name casing issues (#17351) (id: 64128)
  • Fixed an issue with Supervisor autoscaling which could cause it to get skipped when the Supervisor could be publishing or when minTriggerScaleActionFrequencyMillis hasn't elapsed (#17356) (id: 64226)
  • Fixed in issue in the web console where the progress indication for table input gets stuck at 0 (#17334) (id: 64209)
  • Fixed an issue where batch segment allocation fails when there are replicas (#17262) (id: 64169)
  • Fixed an issue when grouping on a string array and sorting by it (#17183) (id: 64166)
  • Fixed an issue where duplicate compaction tasks might get launched (#17287) (id: 64154)
  • Fixed a race condition for failed queries with the MSQ task engine (#17313) (id: 64153)
  • Fixed several issues with the Explore view in the web console (#17234) (id: 64005) (#17240) (id: 64010) (#17225) (id: 63985)
  • Fixed an issue with querying realtime segment when using concurrent append and replace (#17157) (id: 63852)
  • Fixed an issue where Indexer tasks get stuck in a publishing state and must either get killed or hit the timeout (#17146) (id: 63800)
  • Removed unused Coordinator dynamic configs mergeSegmentsLimit and mergeBytesLimit (#17384) (id: 64267)

Pivot changes

2026.01

  • You can now add names and descriptions to Pivot API tokens (id: 70265)
  • You can now add banner messages to data cubes and dashboards (id: 69940)
  • Added tooltips to dimensions and measures in data cube view (id: 70271)

2025.10

A high volume of notifications can cause links in alert and report emails and webhooks to stop working. If this happens, increase the maxUrlEntries value in the Pivot server configuration.

(id: 69510)

2025.07.1

  • In a line chart visualization the Multiples property is now limited to a single dimension. This is in line with the multi-axis line chart (id: 66811)
  • Comparisons in reports now use the same unit as the original measure (id: 66480)
  • Links to data cubes in alert emails, report emails, and webhooks are now permanent. This means that the links remain valid long after the emails are delivered (id: 23929)
  • Fixed DELTA_TIMESERIES to automatically align the window with the time bucket, preventing errors in the time series visualization (id: 67487)
  • Fixed dashboard string filters to show suggestions from all relevant data cubes when multiple dimensions share the same title (id: 67484)
  • Fixed an issue where an alert would fire multiple times after being changed to a smaller time frame (id: 66546)

Changes in 2025.04.2

  • The line chart visualization now allows you to select a Horizontal scale: Scroll (default) or Fit to view. To display all data in the visible line chart without scrolling, select Fit to view (id: 67054)
  • Fixed an issue where you could create collections with the same name (id: 67235)
  • Fixed an issue in the Collections API where you could create collections containing data cube and dashboard IDs that didn't exist. This resulted in collections with no assets (id: 67235)
  • Fixed an issue with long collection names in the UI (id: 67235)
  • Fixed scrolling issues on the collections page (id: 66702)
  • Fixed an issue where an alert would fire multiple times after being changed to a smaller time frame (id: 66546)
  • Improved the API endpoint to create a collection so that it only accepts the name and description fields (id: 67235)

Changes in 2025.04.1

You can now group Pivot data cubes and dashboards into collections for easy access. See Collections for more details.

Changes in 2025.04

  • Fixed limits configured on time splits are not correctly applied when a data cube's timezone is set to Etc/UTC (id: 65568)

Changes in 2025.01

  • The async download process now shows more information during the download process, including the number of rows processed (id: 60947)
  • The time series visualization now supports the TIMESERIES function (id: 63901)
  • In the records visualization you can now use the Nulls summary pill drop-down to turn off displaying the number of hidden null values (id: 64197)
  • You can now set a minimum auto-refresh rate when creating or editing a dashboard (id: 64032)
  • You can now preview the time range when adding a relative comparison to a visualization (id: 63944)
  • You can now specify the date and time to start evaluating alerts (id: 40669)
  • In the general options for a dashboard you can now set a default auto-refresh rate (id: 39798)
  • Fixed an issue with editing a report after removing a dimension used as a report filter (id: 63475)

Imply Manager changes

2026.01.3

  • Security updates

2026.01.1

  • Security updates

2026.01

  • Fixed an issue with upgrades for Imply Enterprise deployments running on ARM (id: 70401)
  • Imply Enterprise and Hybrid now support cgroup v2 (id: 68187)

Changes in 2025.10.2

  • Security updates

2025.10.1

Starting December 10, 2025, Imply Hybrid supports the following instances:

  • i4g.4xlarge
  • i4g.8xlarge
  • 4g.16xlarge
  • i8ge.12xlarge

(id: 68632) (id: 70672)

2025.07.2

  • You can now configure how long Imply Manager waits for data instances to update during a rolling upgrade (id: 68717)

2025.07.1

  • Imply Hybrid now supports r7gd.8xlarge instances (id: 68078)
  • Added support for Helm chart value overrides for Imply Enterprise on GKE (id: 67053)

2025.04

  • Added support for MySQL 8.4's default authentication method (id: 65921)
  • Imply Enterprise now requires Python version 3.8 or later (id: 65824)
  • Imply Enterprise on Kubernetes now requires Kubernetes 1.25 or later (id: 65709)
  • You can now use Java 21 for Imply Enterprise (id: 65618)
  • Fixed an issue where you couldn't supply a custom version (id: 66212)
  • Fixed an issue where Imply Manager can get stuck when part of an upgrade times out (id: 66372)
  • Upgraded ZooKeeper client to 3.8.4 (id: 65594)

2025.01

  • Fixed a problem where updated Helm values were sometimes incorrectly displayed (id: 64648)