4.1.1
Release Date: May 29, 2026
Container Image Issue (v4.1.0): Due to an unstable load order issue in the v4.1.0 container image, BE processes may fail to start reliably in container environments. Container environment users should NOT upgrade to v4.1.0; use v4.1.1, which includes the fix (#71825).
Downgrade Notes: After upgrading StarRocks to v4.1, DO NOT downgrade to any v4.0 version below v4.0.6. Due to internal data-layout changes in v4.1 (tablet splitting and distribution), downgrade from v4.1 is only supported to v4.0.6 or later.
Behavior Changes
- The Hive connector now uses a native C++ Avro scanner instead of the JNI Avro scanner by default. #73237 #73569
- Query rewrite over INCREMENTAL/AUTO materialized views is now disabled, and FORCE refresh and partition refresh are rejected for INCREMENTAL/AUTO materialized views. #72890 #72336 #71355
Improvements
- Java UDF/UDAF/UDTF now support more types: STRUCT arguments and return values for UDAF/UDTF, nested ARRAY/MAP types, DATE/DATETIME, DECIMAL, and varargs. #72911 #72283 #72337 #72208 #68596
- Scalar UDFs now support STRUCT arguments. #72620
- Python UDFs now support nested ARRAY/MAP types. #72210
- UDAFs are now loaded and initialized once and reused across queries, reducing per-query overhead. #72038
- Replaced the JNI Avro scanner with a native C++ scanner for the Hive connector, with direct binary decoding and support for
avro.schema.literalandavro.schema.url. #73237 #73283 #73257 #73569 - Supports the Trino
WITHclause in CTAS statements. #71960 - Completed Iceberg
timestamptzpartition transform support on the sink path. #73397 - Enabled TopN runtime filter pushdown for Iceberg table aggregation. #72332
- Supports Iceberg datetime min/max optimization. #71870
- Allows HDFS HA configuration passthrough in Catalog and BE to support accessing multiple HDFS clusters. #71521
- Added a partition scan number limit for external table queries. #68480
- Fails fast for unsupported Iceberg V3 features. #70242
- Supports
csv.encloseandcsv.escapefor CSV exports via INSERT INTO FILES. #71589 - Added the
enable_push_down_schemaINSERT property for full schema push-down tofiles(). #70978 - Routine Load jobs are now paused on non-retryable errors (for example, primary key size exceeded). #71161
- Supports join reorder for complex expressions from two children. #71615
- Improved CBO statistics estimation, including MCV/null-fraction propagation for
date_trunc,array_map, CASE WHEN, IS NULL, UNION, and constants. #72233 #70372 #70221 #70865 #70989 #71000 - Improved skew join detection: skew is only detected when all join keys are skewed, and a
force_group_by_skew_eliminate_when_skewedswitch was added to force the skew rule. #72753 #71382 - Supports constant folding for
regexp_replacein the FE. #70804 - Optimized MIN/MAX on date partition columns with constant partition values. #69880
- Introduced the
SCHEDULEkeyword as a synonym forASYNCin materialized view refresh. #72329 - Supports tablet creation retry for Lake tables in shared-data mode. #71068
- Supports conditional update for Lake column-mode partial update. #71961
- Parallelized partial-update publish, persistent index initialization, and SSTable opening to improve ingestion throughput. #71652 #71217 #72112 #71145 #72986
- Supports DCG file synchronization during shared-nothing to shared-data replication. #69339
- Supports schema evolution for widening VARCHAR length on both key and non-key columns. #70747
- Added the
snapshot_meta.jsonmarker for cluster snapshot integrity checks. #71209 - Supports LDAP direct bind authentication via a DN pattern. #71559
- Added the
get_query_dump_from_query_idmeta function for easier query troubleshooting. #72875 - Supports auditing queried relations in the audit log. #71596
- Added session variables for MySQL binary result encoding. #71415
- Added metrics for better observability, including
tablet_numfor shared-data clusters,MemtableIOSpeed,staros_shard_count, and Iceberg metadata-table query metrics. #71444 #69842 #73096 #70825 - Added the FE configuration
deploy_serialization_min_thread_pool_size. #72274 - Added the
tablet_reshard_enable_tablet_mergeconfiguration to disable MergeTabletJob creation. #70906 - Eliminated HTTP-server accept thundering-herd via
SO_REUSEPORT. #72956
Security
- [CVE] Upgraded Netty to 4.1.133.Final. #72905
- [CVE-2026-42198] [CVE-2026-5598] Bumped pgjdbc to 42.7.11 (client-side DoS via unbounded SCRAM PBKDF2 iteration count) and BouncyCastle to 1.84 (FrodoKEM private-key leakage). #72797
- [CVE-2026-32280] [CVE-2026-32282] Built pprof with go1.25.9 to eliminate Golang CVEs. #71944 #73545
- Upgraded jetty-http to 9.4.58.v20250814. #71762
- Cleaned up Broker dependency CVEs and removed
wildfly-openssl. #72184 #71908 - Redacted credentials in INSERT INTO FILES error messages. #71245
Bug Fixes
The following issues have been fixed:
- CN segfault on startup caused by
hash_utilstatic initialization order. #71825 - CN crash when scanning an empty tablet with physical split enabled. #70281
- BE crash when querying
information_schema.warehouse_queries. #72019 - SIGFPE in Lake compaction when rowset
num_rowsis zero. #71742 - Division-by-zero in ExecutionDAG fragment connection. #67918
- Graceful-exit crash in SinkBuffer. #73202
- Spillable hash join probe crash. #72397
- Stack-buffer-overflow when formatting into a temporary
std::string. #72728 - Crash in
reverse(DecimalV3). #71834 - Use-after-free in
LoadChannel::get_load_replica_statuscaused by temporaryshared_ptrdestruction. #71843 - Use-after-free in
ThreadPool::do_submitwhen thread creation fails. #71276 - Hive partition descriptor use-after-free across fragment teardown. #73176
- An information schema sink use-after-free. #71513
- An FE file descriptor leak by reusing HttpClient instances. #73239
- JNI local-reference leak in
JDBCScanner::_init_jdbc_scanner. #72913 - Memory leak when caching the MV plan context. #72300
- Unexpected memory overuse in local exchange. #72262
- Race on
response->tablet_metasin Lakepublish_version. #73274 - Concurrent
SegmentFlushTaskrace inDeltaWriter::commit(). #73371 RuntimeProfilemin/max race during serialization. #72904- Race condition in
PipelineTimerTaskduring query context destruction. #73082 - Race condition in
_all_global_rf_ready_or_timeout. #70920 - Shared
NullColumnissue inmap_applyandarray_length. #71258 - Batch-publish deadlock caused by a partition version gap. #71483
- Deadlock when warming up the LRU cache for rowset metadata in shared-nothing mode. #71459
Lockerrollback is not exception-safe and unlock order is incorrect. #72789- Lock contention with DDL and StarOS RPCs caused by several DB locks on read-only and metadata paths. #73067 #72475 #72108 #72218 #72178
- Incorrect shuffle distribution due to a missing project node. #71075
- An AGG TopN runtime filter
exprOrdermismatch causing crashes and wrong results. #71479 - Wrong results from dict-merge GROUP BY. #70866
- Query cache conflicts with local shuffle aggregation. #73194
- Inconsistent global dictionary generation in flat JSON. #72953
- Flat JSON merge empty inconsistency. #72973
- A type mismatch in map literals when explicit key/value types are declared. #71316
- COALESCE children is not casted to a common type in the JOIN USING transformer. #72338
- VARCHAR length is not preserved after reduce-cast with global variables. #70269
- VARBINARY is incorrectly encoded inside nested types in MySQL result sets. #71346
- Check-having-clause issue when disabling aggregation spill on small LIMIT. #72705
- Quotes are not stripped before date parsing, and PostgreSQL date/time bug. #48517 #71016
- Data loss after a tablet split by skipping data-file deletion for range distribution tablets. #71135
- Data file shared-flag loss that caused vacuum to delete files still referenced by sibling split tablets. #71585
- Tablet merge correctness for the split→compaction→merge sequence. #72350
- Cross-published txn log num_rows/data_size inflation during tablet splits. #71144
- Delvec orphan entries caused by write-before-compaction in the same publish batch. #71001
- "no queryable replica" on follower FE by syncing the StarMgr journal replay. #71263
merge_conditionis not preserved when applying a normal rowset commit. #72542- Iceberg DELETE conflict detection using an incorrect snapshot ID and filter. #73354
- An NPE on invalid Iceberg transform arguments. #71917
- Iceberg min/max optimization being skipped due to extra columns injected by the planner. #71863
- Aggregate-join-pushdown MV rewrite on Iceberg base tables. #71856
- Missing Hive partition directory before INSERT OVERWRITE commit. #71810
- AWS assume-role not being applied for the JNI scanner. #71422
- Avro complex-type decoding for pruned children and nested nullable schemas. #73474
- File/column/row context is missing in Parquet Broker Load errors. #73236
- Lacking support for Arrow dictionary values in the Parquet scanner. #71855
- The Primary Key for Paimon tables is not shown in SHOW CREATE and DESC returns. #70535
- PostgreSQL/Oracle JDBC type compatibility and JDBC URL construction with trailing slashes. #70626 #70992
- Materialized view refresh issue with SQL Server tables in a JDBC catalog. #72962
- Lazy-materialization slot nullability issue for materialized views over outer joins. #72621
- Rejected AUTO and INCREMENTAL materialized view partition refresh. #71355
- The materialized view scheduler is not stopped after a materialized view becomes inactive. #71265
- Lacking support for
SHOW GRANTS FOR CURRENT_USER()for MySQL client compatibility. #71959 - SHOW statements are not allowed inside an explicit transaction. #72954
- Arrow Flight returning the column name
rfor an empty result set. #71534 - Lacking JNI exception-handling checks in Java UDF code. #71734
ai_queryfunction registration issue. #72103- Stream Load profile collection issue when
enable_load_profileis used. #71952 - Profile START_TIME/END_TIME is not displayed with the session timezone. #71429
star_mgr_meta_sync_interval_secis not runtime mutable. #71675information_schema.tablesnot escaping special characters in equality predicates. #71273