nzw921rx opened a new issue, #12949:
URL: https://github.com/apache/seatunnel/issues/12949

   # Apache SeaTunnel 3.1.0 Bugfix Roadmap
   
   Apache SeaTunnel 3.0.0 was released on 2026-09-29. This issue tracks the bug 
fixes that should land in 3.1.0, ordered by user impact. It is a coordination 
tracker, not a release branch.
   
   **Selection criteria**
   
   - Data correctness and data loss first. Silent wrong results are treated as 
the highest priority.
   - Engine correctness: checkpointing, recovery, failover, cancellation, and 
state restore.
   - Hangs, infinite polls, resource leaks, and shutdown gaps that can wedge a 
job.
   - Small and high-value fixes over large refactors: type conversion, 
precision, encoding, SQL generation.
   - Excluded: docs, CI, test-only/E2E-only changes, pure feature work, and 
option-declaration completeness.
   
   **Status**
   
   - Sections 1-6: merged on `dev`, will ship in 3.1.0.
   - Section 7: open PR, needs review and landing.
   - Section 8: open bug without a fix on `dev`, needs an owner.
   
   ## 1. Data correctness (merged on `dev`)
   
   | PR | Fix |
   | --- | --- |
   | #12608 | MySQL-CDC no longer emits `0` instead of `NULL` for nullable 
unique-key columns on tables without a primary key. |
   | #12597 | CDC sources no longer use a nullable unique column as the 
snapshot split column, which silently skipped every row with `NULL`. |
   | #12463 | MySQL-CDC snapshot splitting handles highly non-consecutive 
primary keys without checkpoint expiry. |
   | #12355 | MySQL-CDC keeps the `SET`/`ENUM` value list when rebuilding the 
source type on schema change. |
   | #12836 | Postgres-CDC resolves type-name cache misses using the 
connection's `search_path`. |
   | #12547 | Postgres-CDC applies `ADD COLUMN` on the first RELATION with 
pgjdbc 42.7.5+. |
   | #12588 | Postgres catalog and Postgres-CDC support enum columns 
(previously failed with COMMON-21). |
   | #12803 | JDBC sink no longer collapses all rows whose key contains `NULL` 
into a single buffered row. |
   | #11730 | JDBC MERGE omits an empty `UPDATE SET` clause for tables where 
every column is a key. |
   | #12840 | ClickHouse sink keeps rows with incomplete keys as separate 
entries instead of reducing them to the last row. |
   | #11562 | Doris 2PC reports the checkpoint as committed only after the 
stream-load label reaches `VISIBLE`. |
   | #12692 | StarRocks verifies the label state on Publish Timeout before 
releasing the batch (fail closed). |
   | #12848 | Databend CDC runs the final `MERGE` when the writer closes, so 
the last batch is not dropped. |
   | #12605 | `CAST(... AS INT)` fails on out-of-range numeric input instead of 
silently wrapping. |
   | #12335 | Transform SQL no longer consumes the caller's input `ByteBuffer` 
during evaluation. |
   | #12364 | `ARRAY_MAX`/`ARRAY_MIN` use exact numeric comparison, avoiding 
precision loss. |
   | #12320 | DataValidator `LENGTH` counts array elements instead of comparing 
a Java identity string. |
   | #12801 | XML file sink honors `date_format`, `time_format`, and 
`datetime_format`. |
   | #12768 | Excel source fixes column mapping and `read_columns` projection. |
   | #12826 | Parquet INT96 timestamps use a locale-independent calendar (Thai 
locale shifted years). |
   | #12527 | `SeaTunnelRowType` copies the arrays passed to its constructor, 
so later mutation cannot corrupt the type definition. |
   | #11524 | Iceberg to Doris TIMESTAMP_TZ keeps the wall-clock value instead 
of shifting it to UTC. |
   
   ## 2. Engine and job lifecycle (merged on `dev`)
   
   | PR | Fix |
   | --- | --- |
   | #12454 | Zeta task startup/recovery no longer hangs, and PostgreSQL CDC 
rows are preserved when resuming at a shared commit/row LSN. |
   | #11677 | Zeta reassigns restored splits to waiting readers after 
checkpoint recovery (the job could stay `RUNNING` and produce no data). |
   | #11781 | Zeta restores legacy job-status WAL entries after the job status 
classes moved modules. |
   | #12420 | Zeta/JDBC cancellation now cancels in-flight JDBC statements and 
closes their resources. |
   | #11103 | File sink checkpoint no longer closes an output file while a row 
is still being written. |
   | #12412 | HTTP source releases the checkpoint lock while waiting 
`poll_interval_millis`, so streaming checkpoints complete. |
   | #11929 | Arrow-to-row reader closes resources in the correct order, fixing 
a memory leak. |
   
   ## 3. Resource leaks, hangs, and stuck jobs (merged on `dev`)
   
   | PR | Fix |
   | --- | --- |
   | #12326 | Iceberg sink closes the table loader even when record-writer 
close fails. |
   | #12600 | MongoDB committer guards a null session during close. |
   | #12099 | RocketMQ source closes the consumer before interrupting its 
executor. |
   | #12718 | Doris source closes the previous split's value reader before 
replacing it. |
   | #12324 | ClickHouse streaming source reports a failed stream read instead 
of silently ending the split. |
   | #12727 | ClickHouse streaming source fails on interrupt instead of polling 
for batches forever. |
   | #12325 | Doris async Arrow reader stops polling forever when a backend 
fetch fails and fails the job. |
   | #12689 | SFTP sink handles concurrent directory creation by multiple 
writers. |
   | #12480 | Kudu client deadlock on JDK 11 in the Flink JobManager. |
   | #12738 | Lance sink writes one fragment per flush instead of one fragment 
per buffered row. |
   | #12698 | ActiveMQ sink no longer leaks a Session/MessageProducer on every 
`write()` call. |
   | #11516 | Parquet source no longer throws NPE on Spark when `tableId` is 
missing. |
   
   ## 4. Type, precision, and schema correctness (merged on `dev`)
   
   | PR | Fix |
   | --- | --- |
   | #12541 | DuckDB `TIME` preserves microseconds. |
   | #12593 | DuckDB unknown `BIT`/`ENUM` lengths are preserved instead of 
being replaced with 1/255. |
   | #12582, #12576 | DuckDB type-name matching and SQL digit generation are 
locale independent. |
   | #12503 | DuckDB catalog metadata literals are escaped (names with quotes). 
|
   | #12529 | JDBC named-parameter SQL supports column names containing spaces. 
|
   | #12526 | ClickHouse sink supports special characters in column names. |
   | #12596 | SQL Server `DROP TABLE` quotes the table path correctly. |
   | #11686 | YashanDB `VARCHAR2`/`NVARCHAR2` type conversion. |
   | #11684, #12791 | Dameng `NVARCHAR2`, `TIMESTAMP WITH LOCAL TIME ZONE`, and 
interval types. |
   | #12333, #10453 | MySQL `UNSIGNED` is derived only for numeric columns, and 
`SET` columns containing the word "unsigned" are readable. |
   | #12429 | Cassandra preserves all configured bootstrap contact points. |
   | #12786 | Tablestore sink no longer throws ClassCastException for numeric 
columns. |
   | #12770 | Hudi catalog converts MAP and ARRAY columns correctly. |
   | #12761 | Doris source supports IPV4 and IPV6 columns. |
   | #12792 | PostgreSQL `numeric` NaN/Infinity values can be mapped to null 
instead of aborting the job. |
   
   ## 5. Security (merged on `dev`)
   
   | PR | Fix |
   | --- | --- |
   | #12040 | HTTP connector validates credential scheme and removes the token 
from `toString()`. |
   | #12595 | Zeta basic-auth comparison no longer leaks timing information. |
   | #12633 | CLI redacts credentials from conversation summaries and stored 
history. |
   
   ## 6. Small high-value core/API/CLI fixes (merged on `dev`)
   
   | PR | Fix |
   | --- | --- |
   | #12568 | `multi_table_sink_replica` below 1 is rejected during validation 
with a diagnosable error. |
   | #12775 | Zeta Web UI restores routes when the URL fragment is 
percent-encoded. |
   | #12536 | Config validation treats an exported empty value as a resolved 
placeholder. |
   | #12634, #12632 | CLI clears pending clarification on session changes and 
resumes the most recently active session. |
   | #12722 | CLI defaults the engine REST base URL to the Jetty HTTP port. |
   | #12938 | Restores deserialization of the archived LLM factory wrapper 
after the `serialVersionUID` change. |
   
   ## 7. High-value fixes still in review
   
   These PRs are open as of 2026-10-22. They are the highest-impact items not 
yet on `dev`.
   
   | PR | Fix | Issue | Status |
   | --- | --- | --- | --- |
   | #12387 | Zeta restores a job from its own latest checkpoint on master 
failover. | #12385 | In review |
   | #12511 | Zeta waits for the in-flight checkpoint outside the coordinator 
lock when starting a savepoint. | #12441 | In review |
   | #12626 | Zeta releases MongoDB/Hadoop references to job classloaders 
(Metaspace OOM). | #12456 | Draft |
   | #12218 | Zeta rolls back the task-execution context after a post-publish 
deploy failure. | #12164 | In review |
   | #12377 | Zeta preserves `CANCELED` when a worker fails during 
cancellation. | #12353 | In review |
   | #11564 | Zeta offloads report-metrics operations, fixing batch jobs that 
hang in `RUNNING`. | #10997 | Approved |
   | #11727 | Zeta releases the start latch when a blocking worker cannot 
start. | #11679 | In review |
   | #12625 | JDBC sink fails instead of committing when uncommitted batches 
were lost. | #12624 | In review |
   | #12853 | JDBC preserves MySQL `DECIMAL` precision above 38. | #12841 | In 
review |
   | #12899 | Transform fails `CAST(... AS BIGINT)` on out-of-range numeric 
input. | #12612 | In review |
   
   ## 8. Open bugs that need an owner
   
   | Issue | Impact |
   | --- | --- |
   | #12382 | Postgres-CDC loses change events after restore when the source 
commits offsets past its LSN. |
   | #12212 | MySQL-CDC rows-event deserialization EOF fails the job and can 
lose records after recovery. |
   | #8815 | TiDB-CDC loses CDC events. |
   | #12934 | CSV import converts whitespace to NULL. |
   | #12243 | Paimon DELETE records can remain when multiple Flink sink writers 
write to the same bucket. |
   | #12753 | Doris `LARGEINT` is declared as `DECIMAL(20,0)`, so non-Doris 
sinks fail on large values. |
   | #12752 | Dameng `NVARCHAR`/`NVARCHAR2` length is reported as twice the 
declared length. |
   | #11632 | JSON deserialization ignores schema `defaultValue`, leaving 
fields null. |
   | #10440 | SQL Server `datetimeoffset` is mapped to `LocalDateTime` instead 
of `OffsetDateTime`. |
   | #12601 | Postgres-CDC `ADD COLUMN` with a user-defined type fails when the 
type name is not schema-qualified. |
   | #11752 | Flink schema-change events do not refresh all parallel sink 
writers. |
   | #10512 | Oracle-CDC does not sync updates to `CLOB` columns. |
   
   ## Notes
   
   - This list is curated. Fixes that only touch docs, CI, or test 
infrastructure are intentionally omitted.
   - Backporting to `3.0.0-release` should be decided case by case; data-loss 
fixes in sections 1-3 are the first candidates.
   - Please keep one PR per fix and link it back to this issue.
   - If you want to take an item from section 8, comment below to claim it.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to