corgy-w opened a new pull request, #10851:
URL: https://github.com/apache/seatunnel/pull/10851

   ### Purpose of this pull request
   
   This pull request fixes the Iceberg sink `DROP_DATA` save mode 
implementation.
   
   Today `DROP_DATA` is mapped to `truncateTable()`, and the Iceberg 
`truncateTable()` path uses `deleteFromRowFilter(alwaysTrue())`. That is 
effectively a full-table `DELETE WHERE TRUE`, not a lightweight truncate. For 
large Iceberg tables, this forces Iceberg to load table metadata, snapshots, 
manifest lists, and manifests before the job starts so it can rewrite table 
state for the delete commit. In practice this can make SeaTunnel OOM on the 
sink side before any source records are processed.
   
   This patch keeps the existing `DROP_DATA` behavior, but changes the 
implementation strategy so it rebuilds the table with `dropTableWithoutPurge + 
createTable` instead of expressing the operation as a full-table delete commit.
   
   ### Does this PR introduce _any_ user-facing change?
   
   Yes.
   
   For Iceberg sink users, `DROP_DATA` still clears the target table before 
writing, but it no longer does so through Iceberg's full-table delete commit 
path. This changes the internal execution path and avoids the startup-time 
metadata scan that can trigger `GC overhead limit exceeded` on large Iceberg 
tables.
   
   ### How was this patch tested?
   
   - Added targeted unit coverage in `IcebergSaveModeHandlerTest`
   - Tried to run:
     - `./mvnw -pl seatunnel-connectors-v2/connector-iceberg 
-Dtest=IcebergSaveModeHandlerTest test`
   - In this local environment the build could not complete because Maven 
dependency resolution is configured through 
`http://192.168.0.129:8081/repository/maven-public/`, and resolving 
`org.apache.seatunnel:connector-common:3.0.0-SNAPSHOT` failed with `502 Bad 
Gateway`
   - The code change itself was kept narrowly scoped to the Iceberg sink save 
mode path and mirrors the same fix already applied and validated on the 
internal branches
   
   ### Check list
   
   * [ ] If any new Jar binary package adding in your PR, please add License 
Notice according
     [New License 
Guide](https://github.com/apache/seatunnel/blob/dev/docs/en/contribution/new-license.md)
   * [ ] If necessary, please update the documentation to describe the new 
feature. https://github.com/apache/seatunnel/tree/dev/docs
   * [ ] If necessary, please update `incompatible-changes.md` to describe the 
incompatibility caused by this PR.
   * [ ] If you are contributing the connector code, please check that the 
following files are updated:
     1. Update 
[plugin-mapping.properties](https://github.com/apache/seatunnel/blob/dev/plugin-mapping.properties)
 and add new connector information in it
     2. Update the pom file of 
[seatunnel-dist](https://github.com/apache/seatunnel/blob/dev/seatunnel-dist/pom.xml)
     3. Add ci label in 
[label-scope-conf](https://github.com/apache/seatunnel/blob/dev/.github/workflows/labeler/label-scope-conf.yml)
     4. Add e2e testcase in 
[seatunnel-e2e](https://github.com/apache/seatunnel/tree/dev/seatunnel-e2e/seatunnel-connector-v2-e2e/)
     5. Update connector 
[plugin_config](https://github.com/apache/seatunnel/blob/dev/config/plugin_config)
   


-- 
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