[4.1.3 release notes](https://github.com/apache/doris/issues/65306) # New Features ## AI & Search - Support ANN indexes on Merge-on-Write tables (#67155) - Support multimodal file embedding (#66461) ## Query & Execution - Add adaptive global runtime filter tree publishing to support large cluster (#65599) - Push down limits into CTE producers (#63675) - Add partition-filter SQL block rules (#62196) ## Load & Streaming - Add adaptive random-bucket load routing (#65450) - Support forwarding group-commit Stream Load requests (#63594) - Support compute-group routing and planning for Stream Load (#65571) - Support OceanBase CDC streaming jobs (#65588) - Detect PostgreSQL schema changes from Relation events (#64850) - Support MySQL `ADD` and `DROP` schema changes in streaming jobs (#65325) ## Cloud Native - Add MetaService RPC rate limiting in FE (#65694) - Add memory governance for external metadata caches (#66717) - Support `SHOW COMPUTE GROUPS` in non-cloud mode (#66697) - Support tablet-level compaction through SQL (#66611) - Add resource group success-quorum checks (#66751) ## Lakehouse - Support altering Iceberg and Paimon table properties (#66428) - Support Alibaba Cloud OSS Tables REST catalog (#66823) ## Security & Authentication - Add TLS support for internal Doris communication (#64016) - Add internal HTTP authentication between FE and MetaService (#66090) ## Other - Add `queue_time_ms` to audit logs (#66641) # Improvement ## Query & Execution - Optimize MD5 with an AVX2 batch path (#63484) - Improve percentile aggregate performance (#62520) - Optimize hash join probe-side output performance (#65600) - Optimize shuffle-key selection for Repeat decomposition (#66532) - Deduplicate grouping scalar functions in Repeat projections (#65880) - Infer set-operation distinctness from NDV statistics (#64618) - Avoid underestimating `NOT IN` predicate row counts (#66632) - Add instance IDs to hash join profiles (#66097) - Add spill-read deserialization timing (#67041) - Make random shuffle prefer local channels (#59431) ## Storage & Compaction - Add remote-index byte metrics for the file cache (#65398) - Add queue-time metrics for delete-bitmap tasks (#65523) - Speed up file-cache LRU restoration at startup (#65174) - Limit the file-cache LRU recorder shadow queue (#64798) - Skip redundant TTL scans for non-TTL tablets (#65434) - Add an option to disable file-cache writes during TopN lazy materialization (#66414) - Disable file-cache writes after a remote-scan threshold is reached (#66479) - Improve memory-limit refresh when cgroup settings change in serverless mode (#66463) - Backport nullable-column and projection optimizations (#66586) ## Load & Streaming - Optimize nullable-string deserialization in CSV and text load (#64476) - Backpressure asynchronous group commit by per-table WAL count (#65362) ## Cloud Native - Add S3 rate-limit observability (#64038) - Add warm-up job count metrics on BE (#66136) - Use rendezvous hashing for colocate-tablet placement (#64638) - Add MetaService rate-limit dry-run observability (#66969) - Add cloud-tablet rebalancer metrics (#66576) - Presize global cloud-tablet route sets (#66447) - Skip non-MoW tablets when calculating TopN delete-bitmap scores (#65964) ## Lakehouse - Cache credentials providers in the Hadoop S3A glue layer (#65165) - Use credential-aware Hadoop FileSystem cache keys (#65586) - Accelerate fixed-binary decimal decoding in Parquet (#66379) - Improve nullable selection planning for fragmented Parquet batches (#66397) # Bugfix ## AI & Search - Fix crashes caused by null-query inverted-index predicates (#65138) - Split bound multi-segment inverted-index readers (#63138) - Fix CLucene multi-segment `readBlock` handling (#66736) - Reject inverted-index terms containing embedded NUL bytes (#67179) - Disable the DSL cache for score queries (#65436) - Validate nested Variant `MATCH` predicates (#66207) - Fix index lookup after indexes are removed (#66316) - Preserve atomicity when appending nested Variant values (#66421) - Recognize nullable array elements as NestedGroup types (#66196) - Prefer sparse Variant fields over root values (#65660) - Serve shredded Variant leaves without rebuilding the root (#66941) - Preserve NestedGroup access paths through `explode` (#67022) - Avoid recursion when the ANN IVF-list cache is absent (#67024) ## Query & Execution - Fix analytic partition keys overflowing before conversion to 64-bit columns (#65240) - Guard execution-profile access during concurrent teardown (#65442) - Fix duplicate join nodes produced by `PushDownAggThroughJoinOnPkFk` (#65172) - Guard `UniqueFunction` handling in filter and TopN pushdown rules (#62742) - Enable pre-aggregation for multi-argument aggregates with all-key distinct inputs (#65846) - Fix missing decimal precision and scale for legacy decimal data (#65419) - Materialize constant columns before block merge (#65770) - Use serialized hash keys for complex types (#66777) - Fix blocking-queue waiter accounting (#65827) - Fix unsafe eager-aggregation nullability conversions (#66208) - Fix duplicate aggregate functions pushed through projects (#66531) - Preserve `NULL` in pushed-down CHAR `MIN` and `MAX` (#65952) - Fix invalid semi-join transpose when the lower join is a mark join (#66574) - Drop invalid functional dependencies from the outer side of joins (#65982) - Prevent unsafe CTE runtime-filter pushdown (#65247) - Suppress invalid unique constraints in scan functional-dependency derivation (#66801) - Fix TIMESTAMPTZ nullable type equality (#66722) - Fix TIMESTAMPTZ values in `COALESCE` (#66689) - Preserve TIMESTAMPTZ user-variable types (#66833) - Handle DST fallback in timestamp-cast monotonicity (#65903) - Accept spaced TIMESTAMPTZ offsets in range-partition bounds (#66292) - Return Arrow and Thrift DATETIME values as naive timestamps (#67027, #67232) - Correct the Flight SQL `GetTables` schema and TIMESTAMPTZ Arrow reader (#66344) - Fix `count_substrings` tail overmatching (#63215) - Avoid ICU default-locale contention in functions (#66440) - Keep multi-match regex cache ownership alive (#66909) - Prevent `explode_bitmap` crashes when output size exceeds `INT_MAX` (#66034) - Skip CHAR payload checks for `NULL` rows (#67043) - Restore null-literal return-type handling (#66280) - Stop strict-mode string casts from attaching `NULL` rows to the next value (#66952) - Materialize constant virtual columns before caching (#67112) - Handle case-insensitive auto-partition function arguments (#67121) - Preserve nested paths during lazy row-ID fetch (#67205) - Handle empty row-ID fetch RPC failures in TopN (#66443) - Key UDF class caches by function ID and clean them up in cloud mode (#67046) ## Storage & Compaction - Preserve shortest round-trip representations for FLOAT and DOUBLE ZoneMaps (#65302) - Fix floating-point equality during Parquet pruning (#66470) - Fix sparse vertical-compaction destination offsets (#66306) - Reject transaction preparation on tablets that are shutting down (#66448) - Clean up spill directories during query teardown (#66458) - Avoid scan-executor use-after-free during shutdown (#65220) - Pass tablet IDs explicitly through file-reader and packed-file cache contexts (#61683, #65701) - Avoid converting segment-cache blocks to index-cache blocks (#65905) - Fix BE memory leaks after failed schema-change jobs (#56207) - Fix `PublishVersionDaemon` thread-pool leaks (#60720) - Make nullable hash-state updates exception-safe (#66517) - Synchronize access to load error logs (#66250) - Fix cache lookup failures after an OLAP partition is dropped (#65889) - Skip file cache for HTTP chunk-response readers (#66932) ## Load & Streaming - Respect profile levels for load-writer details (#64978) - Fix Arrow Stream Load with uppercase column names (#65617) - Fail fast when a backend restarts during INSERT (#65525) - Skip decommissioning backends during load routing (#65406) - Correct quorum participants for incremental load streams (#66016) - Fix stream-receiver leaks racing with `close_load` (#65584) - Fix broker-load label self-conflicts during pending retries (#66469) - Recover Broker Load jobs whose transactions are already visible (#66987) - Clear transaction IDs after aborting Broker Load transactions (#66884) - Encode CDC Stream Load records as UTF-8 (#66771) - Prevent MySQL CDC data loss on non-GTID keepalive reconnects (#66998) - Isolate schemas across CDC snapshot splits (#65645) - Keep CDC end offsets consistent with current progress (#65688) - Normalize MySQL JDBC URLs used by streaming jobs (#65647) - Avoid applying a global BE authentication precheck to Stream Load (#66629) - Report Stream Load size limits in MiB (#66224) - Remove the unsupported Workload Policy action that mutates session variables (#64856) ## Cloud Native - Retry MetaService `too busy` responses (#65378) - Set a recycler S3 request timeout to avoid slow `DeleteObjects` failures (#64758) - Preserve resource IDs when recycling empty rowsets (#65862) - Skip packed-slice deletion while recycling rowsets (#65533) - Fix local and remote tablet-size semantics in schema views (#60887) - Normalize storage and replica fields in `SHOW PARTITIONS` (#60871) - Align colocate proc output and tablet-health reporting in cloud mode (#60944) - Exclude decommissioning backends from cloud backend selection (#65221) - Prevent urgent loads from preempting schema-change locks (#66082) - Skip unnecessary MetaService tablet updates after table-property changes (#65983) - Prevent older clients from treating unknown MetaService status codes as success (#64148) - Fail closed on unknown MetaService response codes (#66364) - Skip rowset promotion for incomplete lazy commits (#66253) - Track deleted-instance recycling status and retain instance tombstones (#66519, #66870) - Recycle delete-bitmap packed files with correct blob reads and reference counts (#66728, #66919) - Only mark prepared rowsets before recycling (#65550) - Skip versioned delete-bitmap cleanup for non-MoW tablets (#67084) - Separate HTTP encoding for recycler job and check keys (#67243) - Drop stale CloudReplica routes after compute groups are deleted (#66984) - Fix `SchemaVariablesScanner` crashes on incomplete FE responses (#65994) - Use a bthread-aware shared mutex for tablet-header locks (#66020) - Fix schema-change alter-version capture in cloud mode (#62506) - Restrict runtime FE configuration updates to root in cloud mode (#66478) - Resolve conflicting default replica properties (#65836) - Exclude zero-size tablets from backend balancing (#66499) - Inspect and abort failed conflicting transactions during cloud upgrades (#60830) - Cancel rebuilt virtual-compute-group warm-up jobs when the group is dropped (#65426) - Fix rollback handling when adding partitions (#64650) ## Lakehouse - Fix MaxCompute `IN` predicate pushdown polarity (#65083) - Improve MaxCompute catalog validation (#64119) - Preserve external partition metadata in multi-catalog queries (#66012) - Invalidate stale Hive file-cache entries after partition refresh (#65334) - Safely publish Hadoop catalog properties (#66392) - Resolve missing remote JDBC table names during schema lookup (#65718) - Harden JDBC driver URL validation and remove the file-upload HTTP API (#67149) - Decode ORC timestamps through the standard SerDe path (#64807) - Preserve nested nullability in Parquet predicate scans (#66799) - Safely prune nested Parquet columns with Bloom filters (#66471) - Fix Iceberg Merge-on-Read crashes with row-ID lazy reads (#66506) - Avoid BE aborts when evaluating Iceberg partition predicates (#66835) - Use the split file format when scanning Iceberg tables (#65760) - Delete external data files after failed writes to prevent orphan files (#64678) - Preserve Paimon partition metadata across splits (#65581) - Handle special characters in Paimon partition values (#65904) ## Security & Authentication - Require authorization and an explicit configuration gate for `_stream_load_forward` (#65377) - Mask Kafka Routine Load sensitive properties (#64786) - Hide Stream Load tokens and authentication data from BE information endpoints (#60656, #59743) - Escape audit-log record separators to prevent row forgery (#66580) - Mask sensitive fields in encryption-key schema tables (#66834) - Mask private-key passwords in backend configuration (#66836) - Mask credentials in authentication and Stream Load logs (#66917) - Stop writing Arrow Flight bearer tokens to `fe.log` (#67146) ## Materialized Views - Fix scan-materialization pattern-context checks (#65414) - Distinguish partition compensation from `UNION ALL` rewrite (#66445) - Reduce master FE CPU usage when serializing MTMV task TVF information (#66792) - Optimize MTMV partition-lineage checks (#63899) - Avoid invalid slot casts in MV null-reject compensation (#66613) - Refresh MTMVs after excluded trigger tables change (#64041) ## Other - Fix Arrow Flight SQL direct-memory leaks in prepared statements (#65311) - Fix task finish timestamps when scheduled jobs fail (#66232) - Guard query-instance metrics before metric repository initialization (#62762) - Remove query profiles from HDFS file readers (#67293)
4.1.3 release notes
New Features
AI & Search
Query & Execution
Load & Streaming
ADDandDROPschema changes in streaming jobs ([improve](streaming-job) Support MySQL ADD DROP schema changes #65325)Cloud Native
SHOW COMPUTE GROUPSin non-cloud mode ([feature](compute group) Support show compute groups in non cloud mode #66697)Lakehouse
Security & Authentication
Other
queue_time_msto audit logs (branch-4.1: [feat](audit log) add queue_time_ms in audit_log #66641)Improvement
Query & Execution
NOT INpredicate row counts ([improvement](fe) Avoid under-estimating not-in predicate row count #66632)Storage & Compaction
Load & Streaming
Cloud Native
Lakehouse
Bugfix
AI & Search
readBlockhandling ([fix](clucene) Fix clucene multi-segment readBlock #66736)MATCHpredicates ([fix](reverted index) Validate nested variant MATCH predicates #66207)explode(branch-4.1: [fix](variant) Preserve NestedGroup access paths through explode #67022)Query & Execution
PushDownAggThroughJoinOnPkFk([fix](fe) Fix duplicate join nodes in PushDownAggThroughJoinOnPkFk tree reconstruction #65172)UniqueFunctionhandling in filter and TopN pushdown rules ([fix](nereids) Guard UniqueFunction in multiple filter/topn pushdown rules #62742)NULLin pushed-down CHARMINandMAX([fix](exec) preserve NULL in pushed-down CHAR MIN/MAX #65952)COALESCE([fix](be) Fix TIMESTAMPTZ values in COALESCE #66689)GetTablesschema and TIMESTAMPTZ Arrow reader ([fix](arrow) correct the Flight SQL GetTables schema and the TIMESTAMPTZ arrow reader #66344)count_substringstail overmatching ([fix](function) prevent count_substrings tail overmatch #63215)explode_bitmapcrashes when output size exceedsINT_MAX([fix](be) fix BE core due to explode_bitmap size exceeding INT_MAX #66034)NULLrows ([fix](be) Skip CHAR payload checks for NULL rows #67043)NULLrows to the next value ([fix](serde) Stop strict-mode string casts gluing NULL rows onto the next value #66952)Storage & Compaction
PublishVersionDaemonthread-pool leaks ([fix](memory) fix ThreadPoolExecutor leak in PublishVersionDaemon #60720)Load & Streaming
close_load([fix](load_stream) fix receiver-side stream leak race on close_load #65584)Cloud Native
too busyresponses ([fix](fe) Retry meta service too busy responses #65378)DeleteObjectsfailures ([fix](cloud) set recycler S3 client requestTimeoutMs to avoid curl-28 on slow DeleteObjects (mirror #49315) #64758)SHOW PARTITIONS([fix](cloud) normalize SHOW PARTITIONS display for storage and replica #60871)SchemaVariablesScannercrashes on incomplete FE responses ([fix](cloud) Fix SchemaVariablesScanner crash due to incomplete FE response #65994)Lakehouse
INpredicate pushdown polarity ([fix](maxcompute)Fix MaxCompute IN predicate pushdown polarity. #65083)Security & Authentication
_stream_load_forward([branch-4.1][fix](security) Add auth and config gate for _stream_load_forward endpoint #65377)fe.log(branch-4.1: [fix](arrow-flight) Stop writing bearer tokens to fe.log #67146)Materialized Views
UNION ALLrewrite ([fix](mv) Distinguish partition compensation from UNION ALL rewrite #66445)Other