Repository navigation
Description
Hello everyone,
Thank you for your active participation in the discussion on stability fixes after the Apache SeaTunnel 3.0.0 release.
This is a draft roadmap for 3.1.0 stability fixes, compiled from the fixes submitted by the community since the 3.0.0 release and the currently open pull requests.
It is only a discussion summary, not a final decision. You are welcome to suggest changes, add missing items, or claim any item you are interested in.
Priorities for this round: data correctness and data loss; Zeta recovery, checkpoint, and cancellation; hangs and leaks; type precision; well-scoped changes.
Release-blocking = must be merged before 3.1.0; non-blocking = may ship with 3.1.0 or in a later 3.1.x release.
Roadmap for Apache SeaTunnel 3.1.0:
P0 (Release-blocking)
- CDC
- [1] [Fix][CDC] Fix MongoDB CDC snapshot stuck in non-exactly-once mode [Fix][Connector-V2] Fix MongoDB CDC snapshot stuck in non-exactly-once mode #11896 @zhang-arvin [Backup] [Fix][Connector-V2] Fix MongoDB CDC non-exactly-once snapshot deadlock #13018
- [2] [Fix][CDC] Fix Arrow microsecond timestamp with timezone conversion [Fix][Connector-V2] Fix Arrow microsecond timestamp with timezone conversion #12616 @nankeChen75
- [3] [Fix][CDC] Keep per-table restored offsets when tables are added across a savepoint- [Fix][CDC] Keep per-table restored offsets when tables are added across a savepoint #13006 @goutamadwant
- JDBC
- [3] [Fix][JDBC] Write the net effect of each key when reducing the sink batch [Fix][Connector-V2][Jdbc] Write the net effect of each key when reducing the sink batch #12808 @ricky2129
- [4] [Fix][JDBC] Forward restoreCommit to each table in MultiTableSinkAggregatedCommitter [Fix][API] Forward restoreCommit to each table in MultiTableSinkAggregatedCommitter #12807 @ricky2129
- [5] [Fix][JDBC] Truncate the database specified by the table path [Fix][Connector-V2] Truncate the table path database #12877 @hutiefang76
- [6] [Fix][JDBC] Preserve MySQL DATETIME values across time zones [Fix][Connector-V2] Preserve MySQL DATETIME values across time zones #13025 @goutamadwant
- [7] [Fix][JDBC] Preserve numeric JDBC partition bounds [Bug][Connector-V2] Numeric JDBC fixed splits lose rows or exceed bounds #12583 @hutiefang76
- [8] [Fix][JDBC] Prevent checkpoint success after losing uncommitted batches [Fix][Connector-V2][JDBC] Prevent checkpoint success after losing uncommitted batches #13054 @nzw921rx
- Transform
- [6] [Fix][Transform] Preserve exact numeric comparisons in SQL predicates [Fix][Transform-V2] Preserve exact numeric comparisons in SQL predicates #12318 @goutamadwant
- [7] [Fix][Transform] Rebuild chained transform routing after deserialization [Fix][Transform-V2] Rebuild chained transform routing after deserialization #12990 @JeremyXin
- Zeta
- [8] [Fix][Zeta] Preserve idle reader state after master switch [Fix][Zeta] Preserve idle reader state after master switch #12042 @DanielLeens
- [9] [Fix][Zeta] Preserve cancellation after worker failure [Fix][Zeta] Preserve cancellation after worker failure #12377 @zhangshenghang
- [10] [Fix][Zeta] Fix lite member (worker) cannot join cluster when started before master [Fix][Zeta] Fix lite member (worker) cannot join cluster when started before master #12755 @WXPNG
Non-blocking
Prioritized for 3.1.0 (non-blocking)
- CDC
- [11] [Fix][CDC] Preserve unchanged CDC before-image fields [Fix][Format] Preserve unchanged CDC before-image fields #12867 @hutiefang76
- [12] [Fix][CDC] Preserve explicit NULL in COMPATIBLE_DEBEZIUM_JSON instead of schema default [Fix][Format] Preserve explicit NULL in COMPATIBLE_DEBEZIUM_JSON instead of schema default #12064 @corgy-w
- [13] [Fix][CDC] Harden Postgres CDC WAL streaming against connection resets [Fix][Connector-V2] Harden Postgres CDC WAL streaming against connection resets #12912 @LeonYoah
- JDBC
- [14] [Fix][JDBC] Bind PostgreSQL JSON and UUID with native types [Fix][Connector-V2][Jdbc] Bind PostgreSQL JSON and UUID with native types #11892 @JacobZheng0927
- [15] [Fix][JDBC] Preserve MySQL DECIMAL precision and scale [Fix][Connector-V2][JDBC] Preserve MySQL DECIMAL precision and scale #12853 @Eymenonar
- [16] [Fix][JDBC] Report the declared length of Dameng NVARCHAR and NVARCHAR2 [Fix][Connector-V2][JDBC] Report the declared length of Dameng NVARCHAR and NVARCHAR2 #12882 @zhengxiang378928908-code
- [17] [Fix][JDBC] Handle empty sink primary keys [Fix][Connector-V2][Jdbc] Handle empty sink primary keys #11893 @JacobZheng0927
- Transform / Format
- [18] [Fix][Transform] Preserve JSON decimal precision inside arrays [Fix][Format] Preserve JSON decimal precision inside arrays #12871 @hutiefang76
- [19] [Fix][Transform] Round CAST to DECIMAL half away from zero [Fix][Transform-V2] Round CAST to DECIMAL half away from zero #12920 @fatmanverse
- Zeta
- [20] [Fix][Zeta] Exec the JVM in seatunnel-cluster.sh so SIGTERM reaches it [Fix][Zeta] Exec the JVM in seatunnel-cluster.sh so SIGTERM reaches it #12710 @ricky2129
- [21] [Fix][Zeta] Fix JobHistoryService IMap listener leak across master-role switches [Fix][Zeta] Fix JobHistoryService IMap listener leak across master-role switches #11900 @zhang-arvin
- [22] [Fix][Zeta] Restore checkpoint retention after coordinator recreation [Fix][Zeta] Restore checkpoint retention after coordinator recreation #12096 @DanielLeens
- [23] [Fix][Zeta] Wait for the in-flight checkpoint outside the coordinator lock when starting a savepoint [Fix][Zeta] Wait for the in-flight checkpoint outside the coordinator lock when starting a savepoint #12511 @Vivek1106-04
- Core / Security / CLI
- [24] [Fix][Core] Redact complete credential assignment values [Fix][CLI] Redact complete credential assignment values #12635 @hutiefang76
- [25] [Fix][Core] Preserve literal config keys across REST and file loading [Fix][Core] Preserve literal config keys across REST and file loading #12443 @hutiefang76
- [26] [Fix][Core] Invalidate row byte size cache after field updates [Fix][API] Invalidate row byte size cache after field updates #12578 @hutiefang76
Pending reassessment (not release-blocking)
- CDC
- [27] [Fix][CDC] Backfill PostgreSQL WAL during CDC snapshots [Fix][Connector-V2] Backfill PostgreSQL WAL during CDC snapshots #11556 @davidzollo
- Zeta
- [28] [Fix][Zeta] Hand the source checkpoint lock to barrier injectors instead of racing them [Fix][Zeta] Hand the source checkpoint lock to barrier injectors instead of racing them #12316 @DanielLeens
- [29] [Fix][Zeta] Harden slot allocation recovery state [Fix][Zeta] Harden slot allocation recovery state #12948 @DanielLeens
- [30] [Fix][Zeta] Offload report metrics operations [Fix][Zeta] Offload report metrics operations #11564 @nielifeng
- [31] [Fix][Zeta] Release MongoDB and Hadoop references to job classloaders ([Bug] [enigne] Caused by: java.lang.OutOfMemoryError: Metaspace #12456) [Fix][Zeta] Release MongoDB and Hadoop references to job classloaders (#12456) #12626 @DanielLeens
Can follow in 3.1.x
- CDC
- [32] [Fix][CDC] Exclude columns not published by pgoutput from the Postgres-CDC schema [Fix][Connector-V2] Exclude columns not published by pgoutput from the Postgres-CDC schema #12561 @goutamadwant
- [33] [Fix][CDC] Do not replay a GTID lineage the checkpoint does not track [Bug][Connector-V2][CDC-MySQL] Do not replay a GTID lineage the checkpoint does not track #12555 @ricky2129
- JDBC
- [34] [Fix][JDBC] Fail instead of committing when JDBC sink loses uncommitted batches [Fix][Connector-V2] Fail instead of committing when JDBC sink loses uncommitted batches #12625 @xinnyuli [backup] [Fix][Connector-V2][JDBC] Prevent checkpoint success after losing uncommitted batches #13054
- [35] [Fix][JDBC] Read PostgreSQL binary numeric Infinity as null [Fix][Connector-V2][Jdbc] Read PostgreSQL binary numeric Infinity as null #12919 @fatmanverse
- [36] [Fix][JDBC] Fix MySQL sink connection leak and stale statement errors [Fix][Connector-V2] Fix MySQL sink connection leak and stale statement errors #11883 @zhang-arvin
- Transform / Format
- [37] [Fix][Transform] Keep DOUBLE and DECIMAL precision in Excel files [Fix][Connector-V2] Keep DOUBLE and DECIMAL precision in Excel files #12802 @fatmanverse
- [38] [Fix][Transform] Apply configured CSV defaults to null and missing fields [Fix][Format] Apply configured CSV defaults to null and missing fields #12837 @goutamadwant
- [39] [Fix][Transform] Read every arrow record batch, not only the first [Fix][Connector-V2] Read every arrow record batch, not only the first #12650 @SEPURI-SAI-KRISHNA
- [40] [Fix][Transform] Fail CAST to BIGINT on out-of-range numeric input [Fix][Transform-V2] Fail CAST to BIGINT on out-of-range numeric input #12899 @SEPURI-SAI-KRISHNA
- [41] [Fix][Transform] Widen vector operands before arithmetic [Fix][Transform-V2] Widen vector operands before arithmetic #12337 @goutamadwant
- [42] [Fix][Transform] Apply column defaultValue when JSON field is null or missing ([Bug][Connector-JSON] Schema defaultValue is ignored during JSON deserialization (fields remain null) #11632) [Fix][Format-JSON] Apply column defaultValue when JSON field is null or missing (#11632) #11634 @waterWang
- Zeta
- [43] [Fix][Zeta] Redrive dropped savepoint after master failover during shutdown ([Bug][Zeta] Job stuck permanently after master failover, unable to complete (affects BATCH / bounded source / job shutdown phase) #10834) [Fix][Zeta] Redrive dropped savepoint after master failover during shutdown (apache/seatunnel#10834) #12134 @DanielLeens
- [44] [Fix][Zeta] Release the start latch when a blocking worker cannot start ([Bug] [Zeta] A job cancelled by a downstream privilege check leaves the seatunnel.sh client blocked forever #11679) [Fix][Zeta] Release the start latch when a blocking worker cannot start (#11679) #11727 @abdessalems
- [45] [Fix][Zeta] Resolve a CANCELING vertex to CANCELED, not FAILED, when its worker is lost [Fix][Zeta] Resolve a CANCELING vertex to CANCELED, not FAILED, when its worker is lost #12311 @DanielLeens
- Core / Security / CLI
- [46] [Fix][Core] Resolve allowed environment variables in REST HOCON [Fix][Zeta] Resolve allowed environment variables in REST HOCON #11568 @danielnadean
Next steps:
- Complete the remaining release-blocking items.
- Reassess the following items based on current-version evidence and implementation risk before deciding whether to promote them to release-blocking:
- [Fix][Connector-V2] Backfill PostgreSQL WAL during CDC snapshots #11556
- [Fix][Zeta] Hand the source checkpoint lock to barrier injectors instead of racing them #12316
- [Fix][Zeta] Harden slot allocation recovery state #12948
- [Fix][Zeta] Offload report metrics operations #11564
- [Fix][Zeta] Release MongoDB and Hadoop references to job classloaders (#12456) #12626
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsDoing
Activity
[-][Roadmap] Apache SeaTunnel 3.1.0 Bugfix Roadmap[/-][+][Roadmap] Apache SeaTunnel 3.1.0 Roadmap[/+]ricky2129 commentedon Oct 22, 2026
@nzw921rx how abt including #12710 as well?
SEZ9 commentedon Oct 23, 2026
Thanks for putting this roadmap together. The split between release-blocking and non-blocking items looks reasonable to me, and the stated priorities (data correctness, Zeta recovery/checkpoint/cancellation, hangs and leaks, type precision) line up well with the P0 list.
Regarding the suggestion to include #12710: could you share a short summary of what that fix addresses and which priority bucket you think it belongs in? That would help decide whether it fits this round.
On the next-step questions, it would be useful if anyone proposing to upgrade a non-blocking item to P0 (or downgrade a P0 item) states the reasoning in terms of the listed priorities, so the final list stays well-scoped.
nzw921rx commentedon Oct 23, 2026
Have you tested local compilation in non Docker mode? If you would like to be included in 3.1.0, please synchronize it in the email. Thank you
mailing list thread: https://lists.apache.org/thread.html/mzo0o851k85qsgfw72n2k2lgwp217tt5
ricky2129 commentedon Oct 23, 2026
@nzw921rx yes, tested without Docker. I built the PR natively (
./mvnw install -pl seatunnel-dist -am, Temurin 11, macOS, bash 3.2) and ran the dist scripts on the host:bin/seatunnel-cluster.sh: the script process becomes the JVM, a FakeSource→Console job runs 32/32, and SIGTERM to that PID exits 143 within 1s with the shutdown hook run;-ddaemon mode is unchanged; the job runs andstop-seatunnel-cluster.shstops it;@SEZ9 summary:
seatunnel-cluster.shstarts the JVM as a child of bash withoutexec, and the chart runs it undersh -c. SIGTERM never reaches the JVM, so every pod stop or rolling update ends in SIGKILL after the grace period: no shutdown hook, no clean Hazelcast leave, jobs replay from the last checkpoint. The fix isexec javain the script plus the exec-form command andterminationGracePeriodSecondsin the chart. I'd put it under Zeta recovery/checkpoint (every planned restart currently behaves like a crash), and it is a small, well-scoped change.I'll reply on the dev@ thread for 3.1.0.
SEZ9 commentedon Oct 24, 2026
@ricky2129 Thanks for the detailed native test report — building with
./mvnw install -pl seatunnel-dist -amon Temurin 11 / macOS / bash 3.2 and verifying both foregroundbin/seatunnel-cluster.sh(SIGTERM → exit 143 with the shutdown hook run) and the unchanged-ddaemon path withstop-seatunnel-cluster.shis exactly what I was asking about. That answers my non-Docker question.I agree the scope is small and well-defined (
exec javain the script plus the exec-form command andterminationGracePeriodSecondsin the chart), and placing it under Zeta recovery/checkpoint makes sense given that a planned restart currently behaves like a crash and forces a replay from the last checkpoint.Remaining asks before I add #12710 to the 3.1.0 list:
JeremyXin commentedon Oct 26, 2026
I’d like to propose adding these three PRs to the 3.1.0 roadmap:
P0 / release-blocking: [Fix][Transform-V2] Rebuild chained transform routing after deserialization #12990 — This fixes ChainedMapTransform deserialization and preserves the serialVersionUID used by streams written before [Fix][Transform-V2] Accept table_transform-only configurations #12804. Since this affects restoring serialized state across upgrades, I think it should be merged before 3.1.0.
Non-blocking: [Fix][CI] Isolate Hazelcast test port ranges in additional E2E tests #12778 and [Fix][Zeta] Align Hazelcast join port try count with port range #11868 — These address Hazelcast port allocation and join-range mismatches in E2E/engine tests, which can cause flaky CI failures. They are test-focused stability improvements and do not appear to change runtime behavior for users.
Would this prioritization fit the 3.1.0 scope?
nzw921rx commentedon Oct 26, 2026
#12990 Please explain in the email, thank you.
#11868 #12778 merged🔥
JeremyXin commentedon Oct 27, 2026
SEZ9 commentedon Oct 27, 2026
Thanks @JeremyXin for the explanation. The fix for ChainedMapTransform deserialization is already listed under the P0 / Transform section of the roadmap in the issue description.
As @nzw921rx asked, please make sure the same explanation goes to the dev mailing list so the release discussion has it on record there as well. If you have already sent it, a link to the mail thread here would be helpful.
nzw921rx commentedon Oct 27, 2026
merged🚀
SEZ9 commentedon Oct 28, 2026
Thanks @JeremyXin for raising #12990 here. As @nzw921rx noted above, #12990 is now merged, so the ChainedMapTransform deserialization / serialVersionUID fix should land in 3.1.0 — no further action needed on the P0 request.
One small ask: since the motivation was restoring serialized state across upgrades, could you confirm whether a restore from state written before #12804 has been verified against the merged code? If that's already covered by the tests in the PR, a quick note here is enough. Thanks again!