programmerloverun opened a new pull request, #12112:
URL: https://github.com/apache/seatunnel/pull/12112
Assign JDBC source splits in batches controlled by `split.assign.batch-size`
and refill via `handleSplitRequest`, so reader pending queues and checkpoints
stay bounded without changing split predicates.
<!--
Thank you for contributing to SeaTunnel! Please make sure that your code
changes
are covered with tests. And in case of new features or big changes
remember to adjust the documentation.
Feel free to ping committers for the review!
## Contribution Checklist
- Make sure that the pull request corresponds to a [GITHUB
issue](https://github.com/apache/seatunnel/issues).
- Name the pull request in the form "[Feature] [component] Title of the
pull request", where *Feature* can be replaced by `Hotfix`, `Bug`, etc.
- Minor fixes should be named following this pattern: `[hotfix] [docs] Fix
typo in README.md doc`.
-->
### Purpose of this pull request
Relates to #12097 (Phase 1: bounded assignment).
When a large JDBC table generates many splits, the enumerator currently
assigns each reader's entire pending list at once. Reader local queues and
checkpoint snapshots can grow without bound, even though split predicates are
unchanged.
This PR keeps existing chunking / predicates / split IDs, and only bounds
**assignment handoff**:
- Add option `split.assign.batch-size` (default `16`)
- `JdbcSourceSplitEnumerator` assigns at most `batch-size` splits per reader
per handoff
- Implement `handleSplitRequest` so remaining pending splits continue to be
delivered
- Signal `NoMoreSplits` only after enumeration is finished **and** that
reader's pending queue is empty
- `JdbcSourceReader` requests more splits when the local queue falls below
`max(1, batchSize / 2)`
Non-goals for this PR (later phases of #12097):
- No change to split generation predicates or `split.size`
- No DB-side `SAMPLE` / index probing
- No hard cap on total generated split count
### Does this PR introduce _any_ user-facing change?
Yes.
- New optional config: `split.assign.batch-size` (default `16`)
- Default behavior changes from "assign all owned pending splits in one
handoff" to "assign up to 16 splits per handoff, then refill via split request"
- Split boundaries / data coverage / predicates are unchanged
- Docs updated: `docs/en/connectors/source/Jdbc.md` and
`docs/zh/connectors/source/Jdbc.md`
Example:
```hocon
source {
Jdbc {
url = "jdbc:mysql://localhost:3306/test"
driver = "com.mysql.cj.jdbc.Driver"
query = "select * from source_table"
# optional; default 16
split.assign.batch-size = 16
}
}
```
### How was this patch tested?
Unit tests:
```bash
./mvnw -pl seatunnel-connectors-v2/connector-jdbc \
-Dtest=JdbcSourceSplitEnumeratorTest,JdbcSourceReaderTest,JdbcSourceConfigTest \
test
```
Coverage includes:
- Batched assignment and `handleSplitRequest` refill
- `NoMoreSplits` only after enumeration finished and reader pending empty
- Reader requests splits when local queue is below watermark
- Default value of `split.assign.batch-size`
### 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/developer/new-license.md)
* [x] 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]