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.
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 aquery/timemetric with a failed status instead of success (id: 72195) #19066
2026.01
- Added retries for HTTP 401 issues (#18771)(id: 70431)
- Added
query/byteslogging for failed queries (id: 70749) - Added
maxRowsInMemoryto replacerowsInMemory.rowsInMemorynow functions as an alternate way to provide that config and is ignored ifmaxRowsInMemoryis specified. Previously, onlyrowsInMemoryexisted #18832 (id: 70711) - Added a fingerprinting mechanism to track compaction states in a more efficient manner (id: 70754)
- Added the
supervisorIddimension with streaming task metrics (id: 70552) - Added the
mostFragmentedFirstcompaction policy to prioritize fragmented intervals (#18802)(id: 70553) - Added support for full parallelism in
localSortfor the MSQ task engine (id: 70403) - Security fixes (id: 71109) (id: 69542)
- Fixed CVE-2026-23906
- Changed the response of the
/handoffAPI 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
SeekableStreamsupervisor 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_valuereturning 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_idanddatasourcewere 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
descriptiondimension for thetask/run/timemetric - Added a metric for how long it takes to complete an autoscale action:
task/autoScaler/scaleActionTime(#17971) (id: 66752) - Added a
taskTypedimension 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, andgroupBy/mergeDictionarySize(#17929) (id: 66527) - Changed the logging level for query cancellation from
warntoinfoto 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
debugtoinfo(#17884) (id: 66354) - Added
groupIdandtasksto Overlord logs (#18046) - You can now use the
druid.request.logging.rollPeriodto 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/hitreturning1means the cache was used) (#18063) (id: 67325) - Added audit logs for the following
BasicAuthorizerResourceupdate methods:authorizerUserUpdateListener,authorizerGroupMappingUpdateListener,authorizerUpdateListener(deprecated) (#17916) - Added support for streaming task logs to Indexers (#18170)
- Improved
ThreadDumpMonitor. It's no loner part ofMonitorSchedulerso that thread dumps are available even if theMonitorSchedulerthread is blocked (id: 67230) - Added the following Coordinator APIs:
/druid/coordinator/v1/cloneStatusand/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
taskCountStartproperty 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_VALUEwhen the least restrictive type contains arrays (#18053) (id: 67356) - Changed
groupByqueries. Druid now uses thegroupBynative query type, rather thantopN, for SQL queries that group by and order by the same column, haveLIMIT, and don't haveHAVING. This speeds up execution of such queries sincegroupByis vectorized whiletopNis not. (#18074) (id:67423) - Changed
MV_OVERLAPandMV_CONTAINSfunctions now aligns more closely with the nativeinTypefilter (#18084) - Fixed an issue where
equalTo,greaterThan, andlessThanspecs 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_parallelandcompacttype tasks. Set the context parametersubTaskTimeoutMillisto 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_SUPPORTEDcontext reference from supervisors, as incremental publishing has been the default behavior since version 0.16.0. This context was originally introduced to support rollback toLegacyKafkaIndexTaskRunnerin versions earlier than 0.16.0, which has since been removed (#18120) (id: 67502) - Removed the
useMaxMemoryEstimatesconfig. 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
balancerComputeThreadsto 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
netty4version (#17755)(id: 65657) - Updated
async-http-clientto 3.0.1 (#17646) (id: 65304) - Updated
parquet-avro(#17874) (id: 66328)
Changes in 2025.01.1
- Fixed a CVE. See advisory (id: 65594)
2025.01
- Added support to the web console for the
expectedLoadTimeMillismetric (#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, andingest/notices/timeto statsd emitter (#17487) (id: 64679) (#17468) (id: 64601) - Added
druid.expressions.allowVectorizeFallbackand default to false (#17248) (id: 64173) - Added
stageIdandworkerNumberto 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 todruid.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
getMaximumCapacityfield (#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
taskIdin 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
minTriggerScaleActionFrequencyMillishasn'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
mergeSegmentsLimitandmergeBytesLimit(#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
nameanddescriptionfields (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
cgroupv2(id: 68187)
Changes in 2025.10.2
- Security updates
2025.10.1
Starting December 10, 2025, Imply Hybrid supports the following instances:
i4g.4xlargei4g.8xlarge4g.16xlargei8ge.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.8xlargeinstances (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)