Skip to content

1.2.1 Release

Latest

Choose a tag to compare

@voonhous voonhous released this 24 Sep 10:58
· 625 commits to master since this release

Trino packaging changes

The Trino-Hudi connector now lives in the Hudi repo (RFC-105, #18837). This changes which Trino artifacts are published:

  • org.apache.hudi:hudi-trino-bundle is no longer published. 1.2.0 is its last version.
  • The connector is now published as org.apache.hudi:hudi-trino, a regular (non-shaded) jar built against Trino 483 and JDK 25.
  • The hudi-hadoop-trinobase-docker, hudi-hadoop-trinocoordinator-docker and hudi-hadoop-trinoworker-docker test images are no longer published.
  • The connector config hudi.table.resolve-column-name-casing.enabled defaults to false, where the connector in the Trino repo defaulted to true. Set it to true for tables with mixed-case column names.

What's Changed

  • chore(docker): reduce base_java17 and spark_base image size by @kartikeyaagrawal in #18542
  • test(spark): Add date logical type test to TestAvroConversionUtils by @ashokkumar-allu in #18584
  • feat(common): roll over commit metadata to clean by @kbuci in #18590
  • refactor: move checkpoint metadata lookup helper to hudi-common by @suryaprasanna in #18489
  • feat(flink): Backport Flink 2.1 nested Parquet column readers and INT64 timestamp dispatch (FLINK-35702) by @skywalker0618 in #18636
  • feat(flink): Wire Flink 2.1 nested Parquet readers into the Hudi read path (FLINK-35702) by @skywalker0618 in #18700
  • refactor(flink): Remove legacy Parquet nested readers superseded by Flink 2.1 Dremel path (FLINK-35702) by @skywalker0618 in #18701
  • docs: Document muttley package as internal/optional for OSS users by @shangxinli in #18394
  • perf: Reduce unnecessary FSDataOutputStream#hsync to enhance append performance by @TheR1sing3un in #17517
  • fix(flink): add Apache license header to muttley/README.md by @shangxinli in #18713
  • feat: add variant type adapter for Flink by @danny0405 in #18702
  • chore: migrate the flink ITs run to flink2.1 by @danny0405 in #18717
  • feat(utilities): add Spark/HoodieStreamer validators for pre-commit validation - Phase 3 by @shangxinli in #18405
  • [MINOR] Fix typos in comments and assertion messages by @shangxinli in #18763
  • fix(flink): enforce Parquet VARIANT annotation in Flink schema conversion for unshredded variant by @kbuci in #18539
  • feat(spark): add restore_to_instant stored procedure by @mahsoodebrahim in #18696
  • feat(spark): add show_inflight_commits and cleanup_stale_inflight_com... by @mahsoodebrahim in #18709
  • chore: add spark4.1 and flink2.1 profile entries to RC bundle validation by @yihua in #18796
  • fix(flink): fix disable table service not effective in hudi-flink by @fhan688 in #13875
  • feat(flink): Backport Flink 2.1 Dremel nested Parquet reader rewrite to hudi-flink1.19.x (FLINK-35702) by @skywalker0618 in #18809
  • chore: Fix stale zip file for variant backward compatibility test by @cshuo in #18815
  • chore: Add release information for Apache Hudi 1.2.0 by @yihua in #18831
  • fix(spark): Add options for archive procedure by @fhan688 in #18437
  • fix: RLI bootstrap fails due to NPE with cleaner table service by @lokeshj1703 in #18836
  • chore: Fix Flink CI Maven profile arguments by @cshuo in #18845
  • [MINOR] Handle cancellation error with HoodieMetadataTableValidator by @lokeshj1703 in #18371
  • docs: Update DOAP file to include 0.15.1 by @voonhous in #18838
  • feat(trino): [RFC-105] Trino Hudi Connector -- Shim/Bundle Refactor by @yihua in #18782
  • feat(flink): add lance format for Flink append only table by @danny0405 in #18741
  • refactor(flink): Refactor RowData writer factory to use HoodieSchema by @cshuo in #18873
  • fix(cli): Fix the typo in show-inflight CLI command by @yihua in #18868
  • perf(streamer): fold validate() error-table WriteStatus sums into one pass by @Davis-Zhang-Onehouse in #18871
  • fix(hudi-sync): Fix Hive test temp directory cleanup with JUnit TempDir by @fhan688 in #18883
  • fix(flink): set canonical base path in Hive sync config by @fhan688 in #18884
  • fix(flink): fix data loss in stream read from earliest by @fhan688 in #18848
  • fix(spark): fix MOR bulk insert commit operation error by @fhan688 in #18878
  • feat(utilities): migrate HoodieStreamerWriteStatusValidator into pre-commit validator framework by @shangxinli in #18765
  • fix: Fix NPE due to race condition while handling rocksdb handles by @lokeshj1703 in #18834
  • fix(flink): Trigger a failover after pending instants recommitted for... by @cshuo in #18793
  • refactor: Add Lombok annotations to hudi-utilities (Part 1) by @voonhous in #17823
  • refactor: Add Lombok Builders to HoodieFileGroupReader, InputSplit, ReaderParameters by @voonhous in #17781
  • fix(spark): align CTAS partition fields by table partition order by @fhan688 in #18899
  • fix(ci): Flink version corresponds to used in Docker image, resolution for Everit JSON schema by @geserdugarov in #18905
  • refactor: Add Lombok annotations to hudi-utilities (Part 3) by @voonhous in #17877
  • refactor: Add Lombok annotations to hudi-common module (part 3) by @voonhous in #17825
  • refactor: Add Lombok Builder annotation to HoodieLogFormat by @voonhous in #17785
  • chore(docker): silence Dockerfile lint warnings across image set by @voonhous in #18664
  • refactor(core): Unify record key/index key splitting and extraction by @cshuo in #18842
  • fix(streamer): Use checkpoint V1 for non-incremental streamer sources by @yihua in #18896
  • fix(flink): Use the execution mode without rocksdb cache by default ... by @cshuo in #18894
  • [MINOR] Update DOAP with 0.14.2 Release by @danny0405 in #18924
  • fix(flink): avoid repeated timeline reload for unchanged lookup table commits by @fhan688 in #18930
  • fix(common): Close log writer output stream on append failure by @fhan688 in #18909
  • fix(metrics): NPE handling when hudi metrics is disabled by @HuangZhenQiu in #18947
  • feat(flink): Backport Flink 2.1 Dremel nested Parquet reader to hudi-... by @cshuo in #18953
  • fix(clustering): retain missing partitions in selected/regex incremental scheduling by @fhan688 in #18945
  • fix(flink): Close write client properly in DefaultCleanHandler by @cshuo in #18940
  • feat(flink): Backport Flink 2.1 Dremel nested Parquet reader to hudi-... by @cshuo in #18960
  • feat(flink): Backport Flink 2.1 Dremel nested Parquet reader to hudi-... by @cshuo in #18959
  • docs: RFC-106 - Record Level and Secondary Index Support for Flink Writers by @danny0405 in #17610
  • perf(clean): Avoid extra getPathInfo RPC per file during clean execution by @voonhous in #18963
  • fix(spark): catch HoodieSchemaNotFoundException in 3-arg DefaultSource.createRelation by @lokeshj1703 in #18977
  • refactor: Add Lombok annotations to hudi-common module (part 7) by @voonhous in #18944
  • fix(flink): relocate org.apache.flink.dropwizard by @ericyuan915 in #18982
  • feat: add more metrics for delta streamer by @prashantwason in #18085
  • feat: Add HUDI version and engine properties to commit metadata by @prashantwason in #18183
  • [MINOR] Fix NPE in getInputFileSlices when RO path filter returns empty partition by @prashantwason in #18639
  • fix: Introduce ExecutorServiceBasedEngineContext to fix ClassNotFoundException in pre-commit validators on Java 11+ by @ashokkumar-allu in #18585
  • perf(spark): Resolve drop-partition-columns projection once per write... by @voonhous in #18972
  • fix(spark): strip hoodie* meta columns from CDC before/after images by @ad1happy2go in #18948
  • perf(spark): Parse bucket index hash-field config once instead of per... by @voonhous in #18979
  • perf(metadata): Parse RLI instant time once per batch instead of per ... by @voonhous in #18965
  • test(trino): de-flake TestHudi*FileOperations by disabling async table statistics by @wombatu-kun in #18995
  • perf(metadata): Avoid per-record enum-array clone and string parse when materializing MDT records by @voonhous in #18997
  • [MINOR] Cap UT_FT_10 Azure install to -T 2 to avoid flaky compiler heap OOM by @wombatu-kun in #19008
  • refactor(metadata): Replace misused stream reduce with a plain for-loop by @voonhous in #18532
  • perf(io): Derive log file size from AppendResult on append-handle close by @voonhous in #19002
  • refactor: Add Lombok annotations to hudi-common module (part 8) by @voonhous in #18957
  • [MINOR] Wait for ZK connection in lock provider to de-flake direct-marker detection test by @wombatu-kun in #19014
  • fix(flink): fix the mor small file record size estimation by @danny0405 in #18991
  • perf(kafka-connect): reuse AvroConvertor across records in the connect writer by @wombatu-kun in #19015
  • fix(spark): Propagate merge configs to file group reader during clustering by @ad1happy2go in #19007
  • perf(kafka-connect): memoize file id per partition path in the connect writer by @wombatu-kun in #19016
  • perf(kafka-connect): use a pre-sized ArrayList when flushing buffered records by @wombatu-kun in #19017
  • chore(test): document macOS-specific cleaner consistency-guard slowness (#17714) by @voonhous in #19003
  • perf(metadata): Resolve column-stats field schemas once per collection instead of per record by @voonhous in #19000
  • test(hadoop-mr): enable rollback case in HoodieRealtimeRecordReader.testReader by @oglego in #18693
  • feat(flink): Support writing out-of-line BLOB columns by @kbuci in #18958
  • fix(flink): reuse the preceeding avg size if there is no eligible estimation by @danny0405 in #19022
  • test(flink): de-flake testStreamReadMorTableWithCompactionFromEarliest by @wombatu-kun in #19019
  • test(flink): retry short CollectSink reads to de-flake stream-read ITs by @wombatu-kun in #19030
  • test(trino): de-flake TestHudi*FileOperations by asserting only synchronous reads by @wombatu-kun in #19004
  • fix: prevent heartbeat timer from being permanently killed by slow or delayed heartbeats by @prashantwason in #18904
  • perf: Add dedicated batch size config for LSM timeline migration on u... by @cshuo in #19052
  • test(clean): cover executing pending clean before scheduling a new one by @suryaprasanna in #19051
  • test(spark): de-flake TestHoodieClientMultiWriter early-conflict detection by @voonhous in #19069
  • fix(test): close TestingServer + write clients on all exit paths in TestHoodieClientMultiWriter by @nsivabalan in #19062
  • [MINOR] Guard detailed metadata size metrics with a config by @nsivabalan in #18803
  • test(metadata): Add test coverage for deferred RLI init and bulk_insert by @nsivabalan in #18865
  • fix(spark): support consistent hashing clustering on non-partitioned tables by @ad1happy2go in #18968
  • chore(integ-test): bump trino-jdbc 390 to 481 by @voonhous in #19073
  • fix: Fix Typo in PartitionTTLStrategyType#getPartitionTTLStrategyClassName by @wangxianghu in #19076
  • fix: Skip missing properties files gracefully in DFSPropertiesConfiguration by @nsivabalan in #18805
  • [HUDI-18827] Fix per-task write token for MOR (table v6) rollback log files by @nsivabalan in #18828
  • fix(spark): reject INSERT_OVERWRITE when overlapping with pending clustering by @nsivabalan in #18829
  • fix(streamer): override all deserialize() overloads in KafkaAvroSchemaDeserializer by @nsivabalan in #18892
  • fix(spark): preserve Spark's native unresolved-column errors in HoodieAnalysis by @nada-attia in #18147
  • [MINOR] Forward spark.hoodie.* SparkConf to write path (parity with read path) by @prashantwason in #18650
  • fix(partition-ttl): Fix the integer overflow issue when TTL exceeded 24 days. by @wangxianghu in #19075
  • perf(common): Avoid per-record HoodieSchema rebuilds on Avro read/merge paths by @voonhous in #18967
  • test(flink): de-flake testLookupJoin lookup-join IT by @wombatu-kun in #19093
  • fix(partition-ttl): Fix IllegalArgumentException in KeepByTimeStrategy when no candidate partitions exist by @wangxianghu in #19092
  • feat(spark): add repair_orphan_files stored procedure by @mahsoodebrahim in #19121
  • fix: remove the dependency to flink-table-planner by @danny0405 in #19131
  • chore(glue-sync): Ignore EntityNotFoundException when dropping Glue partitions by @wangxianghu in #19142
  • fix(storage-format): return all records when scanning multi-block native HFiles by @yihua in #19146
  • refactor(spark): consolidate the vendored AvroUtils fork into hudi-spark-common by @yihua in #19147
  • refactor(spark): share Spark 4.x partition-values and mapping classes in hudi-spark4-common by @yihua in #19148
  • refactor(spark): dedup catalyst utils and analysis rules across Spark version modules by @yihua in #19149
  • refactor(spark): consolidate duplicated small utils across Spark version modules by @yihua in #19150
  • refactor: Retire leftover Avro Schema usages in AvroSchemaUtils and LSMTimelineWriter by @voonhous in #19153
  • refactor: Migrate reconcileSchema/reconcileSchemaRequirements to HoodieSchema by @voonhous in #19154
  • perf(common): replace BitSet with a fixed word array in the ported bloom filter by @yihua in #19140
  • test: handle expected OCC conflict in concurrent Java writer test by @yihua in #19124
  • refactor(flink): use SLF4J parameterized logging instead of string concatenation by @voonhous in #19156
  • refactor(hadoop-mr): use SLF4J parameterized logging instead of string concatenation by @voonhous in #19157
  • refactor(hadoop-common): use SLF4J parameterized logging instead of string concatenation by @voonhous in #19160
  • refactor(common): use SLF4J parameterized logging instead of string concatenation by @voonhous in #19158
  • fix(spark): correct self-recursive equals in ProcedureParameterImpl by @yihua in #19167
  • refactor(cli): use SLF4J parameterized logging instead of string concatenation by @voonhous in #19159
  • test(spark): add streaming source and writer support coverage by @yihua in #19166
  • refactor(spark): use SLF4J parameterized logging instead of string concatenation by @voonhous in #19184
  • refactor(aws): use SLF4J parameterized logging instead of string concatenation by @voonhous in #19186
  • refactor(utilities): use SLF4J parameterized logging instead of string concatenation by @voonhous in #19185
  • refactor(examples): use SLF4J parameterized logging instead of string concatenation by @voonhous in #19187
  • fix(spark): make export_instants descending order work by @yihua in #19172
  • refactor(sync): use SLF4J parameterized logging instead of string concatenation by @voonhous in #19189
  • refactor(client): use SLF4J parameterized logging instead of string concatenation by @voonhous in #19155
  • refactor(io): use SLF4J parameterized logging instead of string concatenation by @voonhous in #19188
  • test(trino): de-flake testRecordLevelFileSkipping by setting the record-index wait timeout by @wombatu-kun in #19213
  • fix(flink): avoid ArrayIndexOutOfBoundsException in NestedColumnReader across the read batch boundary by @ericyuan915 in #19210
  • test(integ-test): add Testcontainers E2E for VECTOR/BLOB/VARIANT Hive... by @voonhous in #19203
  • fix(spark): demote spurious per-write INFO logs to debug by @yihua in #19170
  • test(client): cover low-coverage small classes across hudi-client by @yihua in #19224
  • test(integ-test): add Spark 4.1.1 stack to hive-sync E2E matrix by @voonhous in #19216
  • fix(spark): shade parquet-variant into the spark bundle for Spark 4.1+ by @voonhous in #19235
  • test(spark): add extended SQL parser coverage for index DDL and Hudi column types by @yihua in #19218
  • fix(spark): read Lance BLOB columns in <=512-row chunks to avoid lance-core FFI abort by @vinothchandar in #19181
  • fix(common): name the offending expression in BindVisitor's unsupported-predicate error by @wombatu-kun in #19241
  • refactor(spark): consolidate the vendored 3.x Avro serde forks into hudi-spark3-common by @yihua in #19168
  • fix(flink): prevent data loss on global failover for streaming writes by @Joy-2000 in #19237
  • fix(spark): read INLINE blobs as CONTENT on internal write-side Lance... by @voonhous in #19236
  • fix: Remove spaces around partition columns by @linliu-code in #18423
  • fix: align log4j2 and slf4j versions to resolve IntelliJ test failures by @suryaprasanna in #18177
  • fix(spark): match the staged table, not LogicalWriteInfo, in BasicStagedTable.newWriteBuilder by @wombatu-kun in #19251
  • test(spark): cover the legacy parquet read path with file-group reader disabled by @yihua in #19133
  • fix: reuse Inflater/Deflater in BitCaskDiskMap to avoid JDK8 finalizer contention by @vamsikarnika in #18818
  • fix: Improve error message for conflict resolution by @vinishjail97 in #18119
  • fix(flink): remove the Source V2 read teardown race via materialized bounded minibatches by @wombatu-kun in #19202
  • docs: claim RFC-108 Multi-dataset incremental reads in Hudi Streamer by @ashokkumar-allu in #19308
  • test: fix flaky TestJavaHoodieBackedMetadata.testReattemptOfFailedClusteringCommit by @lokeshj1703 in #19120
  • test(common): add log-format reader and scanner coverage by @yihua in #19223
  • fix(metadata-table): add config to skip zero-size data files on MDT initialization by @nada-attia in #18611
  • fix(hive-sync): sync column and partition column comments to HMS by @rangareddy in #19289
  • test(spark): add unit coverage for Spark row, schema and sort utilities by @yihua in #19219
  • test(common): add unit coverage for config and utility classes by @yihua in #19220
  • test(client): add unit coverage for client utilities and services by @yihua in #19222
  • fix(hive-sync): close proxied IMetaStoreClient in HoodieHiveSyncClient.close() to prevent HMS connection leak by @skywalker0618 in #19331
  • fix(flink): avoid reusing split reader functions across fetchers by @cshuo in #19315
  • test(common): add unit coverage for metrics reporters and schema utilities by @yihua in #19221
  • fix(hive-sync): fix partition-value parsing on '=' and pushdown comparator overflow by @wombatu-kun in #19336
  • fix: Schema evolution: relax existing column to nullable in reconcileSchema by @vamsikarnika in #19337
  • fix(hive-sync): set HMS table createTime in seconds instead of milliseconds by @wombatu-kun in #19335
  • chore: upload Flink integration-test coverage by @danny0405 in #19343
  • fix: do not fall back to timeline server markers on transient HDFS failures by @vamshipasunuru1 in #18887
  • refactor(spark): share the Spark 3.x legacy parquet file format via a common base by @yihua in #19341
  • fix(spark): improve error message when precombine field value is null by @prashantwason in #18061
  • fix(hive-sync): keep HMS lock heartbeat alive and release its thread pool on close by @wombatu-kun in #19334
  • fix(utilities): guard Source.releaseResources() against transient RDD unpersist failures by @niks002 in #19328
  • chore(utilities): add SQS backlog / in-flight visibility to S3 events source by @Davis-Zhang-Onehouse in #19333
  • fix(reader): derive pre-v9 CDC delete markers from the effective payload class by @lokeshj1703 in #19348
  • test(common): add LSM file group read path coverage by @danny0405 in #19347
  • fix(flink): make hudi-flink-bundle built with flink-bundle-shade-hive usable for Hive sync by @skywalker0618 in #19330
  • fix: Handle map/array-nested leaf columns in column stats collection during MOR log-append by @vinishjail97 in #19126
  • test(spark): Fix flaky TestSparkFilterHelper by giving it its own SparkSession by @wombatu-kun in #19356
  • docs(docker): document build_docker_images.sh flags by @201573 in #18687
  • fix(metadata-table): follow-ups for the zero-size file skip (#18611) by @voonhous in #19355
  • fix(flink): normalize row logical conversions and improve coverage by @danny0405 in #19351
  • fix(flink): deduplicate delete keys and cover write paths by @danny0405 in #19354
  • fix(timeline-service): fail marker creation requests when marker flush fails by @yihua in #19368
  • test(hudi-client): improve metadata table writer coverage by @cshuo in #19363
  • chore(deps): bump io.airlift:aircompressor from 0.27 to 2.0.3 by @dependabot[bot] in #18247
  • chore(deps): bump org.apache.thrift:libthrift from 0.14.0 to 0.23.0 in /packaging/hudi-integ-test-bundle by @dependabot[bot] in #18910
  • chore(deps): bump org.apache.commons:commons-configuration2 from 2.11.0 to 2.15.0 in /packaging/hudi-cli-bundle by @dependabot[bot] in #18801
  • fix(hive-sync): stop the HMS lock heartbeat once the metastore drops the lock by @wombatu-kun in #19370
  • fix(record-index-bootstrap): sort record index keys by UTF-8 bytes to match HFile sorting by @nada-attia in #18941
  • perf(flink): Parse bucket index hash-field config once instead of per ... by @voonhous in #18993
  • fix: Fix lock expiration metric by @linliu-code in #18492
  • feat(trino): Migrate the Trino-Hudi connector into the Hudi repo (RFC-105) by @voonhous in #18837
  • feat(hive-sync): batch and parallelize HiveQL partition operations by @nsivabalan in #18984
  • fix(hive-sync): drop the unreachable HMS lock timeout-recovery path by @wombatu-kun in #19371
  • fix(metadata): correct index definition lookup and improve mdt read coverage by @cshuo in #19359
  • fix(common): load single archived instant details by @danny0405 in #19385
  • fix(schema): gate timestamp-precision change behind a per-field verdict by @yihua in #19029
  • fix(reader): give the file group reader schema handler the merged record-merge properties by @wombatu-kun in #19389
  • fix(hive-sync): stop HiveDriverPool from swallowing a failed SQL batch by @wombatu-kun in #19391
  • feat(trino): resolve merge-required columns from the table schema by @voonhous in #19288
  • fix(client): fix NPE in schema conflict resolution on commits with null writer schema by @yihua in #19388
  • test(flink): improve streamer config and schema provider coverage by @danny0405 in #19392
  • feat(release): add a JDK 25 staging path for org.apache.hudi:hudi-trino by @voonhous in #19410
  • test(trino): add MoR read tests for delete markers, custom payloads and commit-time ordering by @voonhous in #19295
  • feat(client): enrich write commit callback message and fire it for table-service commits by @codope in #18988
  • perf(common): avoid UTF-8 allocations in string comparator by @cshuo in #19414
  • fix(hive-sync): make skip_ro_suffix take precedence over sync_snapshot_with_table_name by @yihua in #19427
  • fix(utilities): include metadata table index-init instants in the record index validation snapshot by @Davis-Zhang-Onehouse in #19395
  • fix(trino): read uncompacted MDT HFILE log deltas and guard index pruning by @voonhous in #19298
  • fix(flink): rethrow StreamWriteOperatorCoordinator start() failures by @Joy-2000 in #19432
  • fix(trino): remap pushed-down predicate columns to physical file ordinals by @wombatu-kun in #19456
  • test(java-client): cover both marker types with the embedded timeline server by @rangareddy in #19444
  • fix(metrics): explain how to enable the CloudWatch reporter when hudi-aws is absent by @rangareddy in #19418
  • fix(timeline): do not NPE on archived instants without a completion time by @rangareddy in #19452
  • perf(trino): cache decimal Avro schema in HudiAvroSerializer instead ... by @voonhous in #19483
  • fix(meta-sync): advance last commit time synced when it trails the active timeline midpoint by @yihua in #19239
  • fix(fs): stop depending on the optional FileSystem#getScheme() by @rangareddy in #19470
  • fix(schema): require a per-field override to promote a bare long to a timestamp logical type by @yihua in #19384
  • fix(trino): report real block size and slice splits solely by target_split_size by @voonhous in #19478
  • perf(trino): drop the decimal schema cache and memoize prefilled values by @voonhous in #19495
  • fix(flink): close CDC image spillable maps on failures by @danny0405 in #19482
  • fix(metrics): do not drop the whole CloudWatch batch on one unmappable metric name by @rangareddy in #19476
  • test(trino): add a Trino E2E testcontainers pipeline for the RFC-105 connector by @voonhous in #19217
  • fix(flink): close lookup reader after cache reload attempts by @danny0405 in #19503
  • fix(spark): preserve the Avro fixed-size decimal width in the Spark row write support by @yihua in #19512
  • fix(metrics): route the reflection failures a CloudWatch skew actually produces by @rangareddy in #19477
  • fix(client): report completed timeline action in clustering callback by @codope in #19464
  • perf(flink): use a shared work-stealing split pool for Source V2 bounded reads by @ericyuan915 in #19520
  • fix(flink): preserve Avro fixed decimal widths in Parquet writes by @cshuo in #19522
  • fix: harden async indexing and improve coverage by @danny0405 in #19537
  • fix(storage-format): emit HBase-readable block-index keys in the native HFile writer by @yihua in #19071
  • fix(storage-format): fix multi-block previous-block offset and add byte-level HFile writer tests by @yihua in #19083
  • feat(hive-sync): parallelize DROP partitions in HiveQL sync mode by @nsivabalan in #19033
  • docs: claim RFC-110 native full-text search by @danny0405 in #19614
  • fix(avro): fetch correct avro version from pom.properties for shade / fat jars by @Rajeev-01 in #19596
  • chore(deps): bump org.apache.logging.log4j:log4j-api from 2.25.4 to 2.25.5 by @dependabot[bot] in #19628
  • docs: rfc-107 Support data partition aware RocksDB RecordIndexBackend by @HuangZhenQiu in #19046
  • fix(test): cover SparkContext shutdown path in HoodieMetadataTableValidator by @lokeshj1703 in #19349
  • fix(core): decode strings read from storage as UTF-8 by @linliu-code in #19454
  • feat: Add source path field in table created from S3/GCS source by @kroushan-nit in #14257
  • fix: Parallelize cloud object existence checks in S3EventsHoodieIncrSource by @vinishjail97 in #18252
  • feat(core): Pass the number of updates from workload profiling through to merge handle by @yihua in #18396
  • feat(trino): track trinodb/trino master via a pinned SHA by @voonhous in #19642
  • fix(common): normalize hudi table base path in implicit-key lock providers by @Davis-Zhang-Onehouse in #18814
  • fix(spark): return partition values in Catalyst's internal representation by @SEPURI-SAI-KRISHNA in #19652
  • feat(kinesis): Cross-account Kinesis source support via STS assume-role in JsonKinesisSource by @suryadanny in #19383
  • fix(flink): sort ClientIds heartbeat files numerically instead of lexicographically by @adityaanikam in #19653
  • fix(storage-format): ignore temporary LSM timeline manifests by @danny0405 in #19659
  • fix(spark): don't prune files with unknown null-count on IS NULL by @SEPURI-SAI-KRISHNA in #19646
  • fix(spark): make new schema evolution fields nullable by @danny0405 in #19665
  • fix(spark): align libthrift with the Hive 2.3.10 client jars by @voonhous in #19682
  • fix(lock): stop guarding the filesystem lock with an interned string literal and make the provider serializable by @rangareddy in #19486
  • fix: support reading tables partitioned on a nested column by @vinishjail97 in #19123
  • [MINOR] Reword the hive.libthrift.version comment in the root pom by @voonhous in #19704
  • fix(kinesis): replace ASL-licensed KPL deaggregation with a native decoder by @voonhous in #19707
  • fix(flink): keep the declared joda-time in hudi-flink-bundle with flink-bundle-shade-hive2 by @skywalker0618 in #19711
  • fix(spark): make slash-separated date partitioning work on the row writer path by @SEPURI-SAI-KRISHNA in #19648
  • fix(flink): prevent reusing diverged buffers on memory exhaustion by @fhan688 in #19692
  • fix(hive-sync): call Driver.destroy() so HiveQL sync stops leaking Drivers into ShutdownHookManager by @skywalker0618 in #19718
  • fix(spark-sql): resolve a partition path without validating the record key by @linliu-code in #19709
  • fix(hive-sync): pass the default partition through the slash-encoded value extractors by @SEPURI-SAI-KRISHNA in #19710
  • docs(hudi-io): fill in the HFile format details the doc was missing by @rangareddy in #19721
  • fix(utilities): use endOffsets when no offset is greater than the checkpoint timestamp by @wangxianghu in #19658
  • fix(core): resolve rollback storage from the partition path, not the default URI by @vinishjail97 in #19735
  • fix(spark): make partition DDL commands honor slash separated date partitioning by @SEPURI-SAI-KRISHNA in #19703
  • fix: ensure CuratorFramework is always closed in BaseZookeeperBasedLo... by @mailtoboggavarapu-coder in #19741
  • fix: ensure AmazonDynamoDBLockClient is always closed in DynamoDBBasedLockProviderBase.close() by @mailtoboggavarapu-coder in #19742
  • fix(trino): skip predicate pushdown on type-evolved parquet columns by @wombatu-kun in #19467
  • test(io): drive the HFile writer tests through byte arrays instead of a file by @rangareddy in #19618
  • chore(docker): address PR #18520 review comments for Spark 4.0.1 stack by @voonhous in #18524
  • fix(storage): resolve HoodieStorage from a path instead of a default local URI by @yihua in #19737
  • fix(streamer): route configured write table version into sample-writes flow by @lokeshj1703 in #19746
  • fix(common): escape dots in single-level hive-style partition column names by @lokeshj1703 in #19751
  • fix(client): create a new log file version instead of reopening the latest on pre-v8 writes by @lokeshj1703 in #19755
  • fix(timeline-service): support response charset for Timeline Server interaction by @lokeshj1703 in #19753
  • fix(debezium): backfill Postgres TOAST columns on a copy so the merge result survives by @lokeshj1703 in #19749
  • fix(trino): read LSM archived-timeline parquet files through a Trino-... by @voonhous in #19732
  • fix(hive): read the skeleton file when a bootstrap query projects no columns by @rangareddy in #19510
  • fix(streamer): Include start commit in S3/GCS IncrSource incremental query by @yihua in #18949
  • fix(sync): keep each partition's recorded location when cascading Glue schema changes by @niranjan-1408 in #19761
  • fix(sync): drop the duplicate UpdateTable in updateTableSchema by @niranjan-1408 in #19762
  • fix(utilities): close JDBC connection in UtilHelpers.getJDBCSchema to prevent connection leak by @mailtoboggavarapu-coder in #19772
  • fix(lock): name the cause on FAILED_TO_RELEASE in StorageBasedLockProvider by @pkgajulapalli in #19574
  • docs(hudi-notebooks): note S3A works with any S3-compatible object store by @goanpeca in #19423
  • fix(flink): run mapGroupsByKey in dedicated fork join pool by @cshuo in #19819
  • perf(flink): preempt inactive write buckets on memory exhaustion by @fhan688 in #19728
  • feat: Allow disabling the partition stats index independently of column stats by @vinishjail97 in #19111
  • test(spark): add catalog and V2 table DDL coverage by @yihua in #19162
  • fix(common): prevent multi-table commits failing with metrics enabled by @1fanwang in #19787
  • fix(core): record the ordering field when upgrading a table from version 1 by @yihua in #19803
  • fix(spark-sql): resolve MERGE INTO partition columns so records are not mis-partitioned by @linliu-code in #19610
  • fix(build): exclude bundled Avro from the DataHub sync bundle by @yihua in #19814
  • fix(tests): reach TFramedTransport at the package libthrift 0.14 moved it to by @yihua in #19830
  • refactor(config): deprecate hoodie.parquet.outputtimestamptype, a no-op since 1.1.0 by @rangareddy in #19815
  • fix(hive-sync): close the SessionState HiveQL sync starts by @skywalker0618 in #19812
  • fix(trino): keep none() when splitting predicates by @voonhous in #19863
  • fix: close InflaterInputStream in HoodieAvroDataBlock.decompress() to prevent native memory leak by @mailtoboggavarapu-coder in #19861
  • fix(common): keep committed logs visible under an uncommitted base instant by @zhaoyudi-creator in #19785
  • test(spark): reference disjoint blob ranges in Lance out-of-line test by @voonhous in #19916
  • fix(spark): merge identical blob descriptors in the batched read by @voonhous in #19913
  • fix: close the outer file stream of inline reads by @voonhous in #19936
  • fix: close the filesystem's stream on rewrap by @voonhous in #19935
  • fix(spark): keep the embedded Derby metastore out of the RAT check by @voonhous in #19792
  • feat(metadata): support RLI and SI for parquet files written outside Hudi by @vinishjail97 in #19869
  • fix(core): keep plan generator extra metadata when scheduling compaction by @yihua in #19941
  • fix(docker): pull MinIO images from quay.io by @voonhous in #19955
  • fix(trino): satisfy the HOODIE_STORAGE_CLASS constructor contract by @OjashKush in #19882
  • chore(trino): report dependency drift against the plugin by @voonhous in #19959
  • test(trino): build the E2E server image from the pin by @voonhous in #19953
  • fix(build): exclude nested .mvn directories from the RAT check by @wombatu-kun in #19462
  • fix(common): resolve nested Avro records by class built by Hudi by @voonhous in #19956
  • perf(common): cache nested Avro record class lookup by @voonhous in #19972
  • fix(trino): unbind HudiCacheKeyProvider on 1.2.1 by @voonhous in #19985

New Contributors

Full Changelog: release-1.2.0...release-1.2.1