Skip to content

4.0.12

Choose a tag to compare

@wangsimo0 wangsimo0 released this 25 Jun 07:40
· 4158 commits to main since this release
1fe715d

4.0.12

Release Date: June 25, 2026

Behavior Changes

  • When reading INT64 timestamps from Parquet files written with isAdjustedToUTC=false (timezone-naive), SELECT FROM FILES() and broker/stream LOAD no longer shift the values by the session timezone offset. Such timestamps are now read as wall-clock values, consistent with Trino, Spark, and Impala. Previously the values drifted whenever the session timezone was not UTC. #73674
  • CTAS (CREATE TABLE AS SELECT) now preserves the declared VARCHAR(N) length when the source carries an explicit user length (a catalog column reference, CAST AS VARCHAR(N), or a string literal), instead of widening it to VARCHAR(1048576). This keeps the length constraint enforceable and aligns DDL with dbt schema contracts. Materialized view materialization still widens columns as before. #73498
  • The Paimon connector now respects the session variable connector_max_split_size when calculating scan splits, instead of always using the default value, so tuning it now affects Paimon scan parallelism. #71756

Improvements

  • Optimized base64_to_bitmap by folding the conversion at constant-evaluation time for constant inputs. #74684
  • ngram_search now supports a non-constant needle (the search term can be a column expression rather than only a constant). #74675
  • The Arrow-to-JSON converter now supports LARGE_LIST and FIXED_SIZE_LIST types. #73714
  • Added an opt-in option to isolate wide-string columns during statistics collection to reduce memory pressure. #73258
  • information_schema.COLUMNS now populates the DATETIME_PRECISION field. #74623
  • Relaxed database read locks to table-scoped intensive locks in InformationSchemaDataSource and FrontendServiceImpl to improve concurrency. #73936 #73913
  • Narrowed database write locks to table-scoped intensive write locks for shared-nothing clusters, and scoped replica row-count updates to the table lock. #74523 #74521
  • Moved the routine-load broker RPC out of the per-job write lock to reduce contention. #73591
  • Deferred JDBC REMARKS fetching out of the getTable() hot path to speed up metadata access for JDBC catalogs. #73488
  • Pushed down the table_name predicate for information_schema.tables_config queries. #73210
  • Skipped per-replica scans on single-medium BEs in BackendLoadStatistic. #73555
  • Added a write timeout to the MySQL channel result send path to prevent stuck connections. #73646
  • Added catalog recycle bin size gauge metrics. #74440
  • Added vacuum batch-size and retry-count metrics, and added decorrelated jitter to the lake vacuum retry backoff to reduce retry storms. #74112 #74108
  • Upgraded third-party dependencies to address security vulnerabilities (CVE): Netty to 4.1.135.Final, Tomcat to 9.0.118, and Thrift to 0.23.0. #74668 #73797 #73625

Bug Fixes

The following issues have been fixed:

  • Successfully committed multi-statement transaction stream loads were shown as PREPARING forever in information_schema.loads and SHOW STREAM LOAD. #74386
  • Rows were silently dropped from information_schema.loads on clusters whose session timezone differs from Asia/Shanghai, because load times were exchanged as naive wall-clock strings across the BE/FE thrift boundary. #73365
  • The COMMIT of an explicit transaction waited only query_timeout milliseconds (instead of seconds) for the database write lock due to a unit mismatch. #73549
  • current_timestamp / now() column defaults were displayed as a frozen literal after ALTER TABLE ... ADD COLUMN and could be lost across FE restarts or edit-log replay. #73455
  • Querying sys.fe_memory_usage / sys.fe_locks without the OPERATE ON SYSTEM privilege returned a misleading RPC-failure message instead of a clear access-denied error. #73567
  • Automatic per-key Hive partition stats refresh could overload the Hive Metastore for tables with many partitions. #73563
  • A null-pointer issue when reading the GTID during a schema change. #74855
  • An empty analytic operator was not pruned after pushing down a distinct aggregation. #74810
  • Zero row counts could corrupt partition statistics. #74801
  • Vector index rewrite could pollute the shared table schema. #74785
  • An IllegalStateException during parallel profile collection, fixed by making Tracers fork-aware. #74746
  • BE vacuum tasks were not aborted once the FE caller's timeout elapsed. #74694
  • Partition consumer errors in ChunksPartitioner were lost instead of being propagated. #74693
  • A lock mismatch in blockingAddTabletCtxToScheduler. #74596
  • A typo in the azure_adls2_oauth2_client_endpoint configuration field name. #74581
  • Pipeline observers were not notified on missed operator state transitions. #74557
  • The reported vacuum watermark was incorrect when retain-boundary metadata was gone. #74429
  • A data race on MaterializedIndexMeta during updateSchemaBackendId. #74412
  • A non-primary-key replica could get stuck with a permanent version hole; it now self-heals. #74408
  • A use-after-free of LLVMContext when JIT compilation fails. #74396
  • A column mismatch in the missing-replica row of ADMIN SHOW REPLICA STATUS. #74393
  • Invalid JIT IR generated for CASE WHEN with mixed float/int WHEN and result types. #74382
  • The CatalogRecycleBin was frozen when a cluster snapshot kept failing. #74379
  • A partial update targeting a table modified earlier in the same explicit transaction is now rejected with a clear error. #74344
  • Immutable-partition updates did not use the transaction's compute resource. #74316
  • A potential out-of-bounds error caused by partitioned join. #74315
  • Database-level UDFs were not restored to the renamed target database for FE followers. #74313
  • Non-root compound predicates yielded EOF instead of NotPushDown. #74218
  • Table names were not backquoted when persisting the routine load origStmt. #74188
  • An assertion name lookup error in assert-num-rows. #74178
  • Aggregation used type-mismatched aggregate functions. #74159
  • Force-killed task runs were not archived, and session-prefixed task-run timeouts were not honored. #74146
  • RENAME and SWAP (for tables and materialized views) now take the database write lock to avoid concurrent-modification issues. #74100
  • Composite-rowset stats were not summed when batching op_writes in primary-key multi-statement transactions. #74059
  • The sink was not notified when a distinct aggregate source finished. #74055
  • pipe_file_list was not recreated when _statistics_ was dropped. #73970
  • A crash in TabletInvertedIndex.deleteTablets, fixed by fast-path skipping empty input. #73955
  • The task manager could write an illegal edit log for a task run. #73882
  • A set_thread_name race on data directory load threads. #73862
  • A race condition in TabletSinkSender::_send_chunk_by_node. #73820
  • Incorrect memory accounting in OlapTableSink. #73807
  • Incorrect connector bytes-read statistics. #73799
  • BACKUP ON (ALL FUNCTION) / (ALL EXTERNAL CATALOGS) failures. #73790
  • NullableColumnUnaryFunction lost the decimal scale when all values were null. #73789
  • A FlatJSON crash when subwriters had no appends. #73730
  • LargeList / FixedSizeList could not be converted to a JSON column during broker load. #73718
  • Partial-append of nested types failed during JSON load. #73715
  • An NPE in StatisticsCalcUtils when a partition is dropped concurrently. #73711
  • Decimal-valued unit counters were not parsed in RuntimeProfileParser. #73683
  • An NPE during nested materialized view refresh. #73644
  • Multi-statement transactions were not handled correctly in lake publish_log_version. #73423
  • An empty ALTER TABLE clause is now rejected, and OPTIMIZE replay was improved. #73352
  • Disk cache overflow when Iceberg metadata entries are pinned. #71651