goutamadwant opened a new pull request, #12079: URL: https://github.com/apache/seatunnel/pull/12079
### Purpose of this pull request Closes #12077. This PR fixes transform dependency resolution in the Zeta runtime parser and connect dry-run validator. The previous retry queue could loop indefinitely on a dependency cycle. It also considered a multi-input transform ready when only some configured input IDs were available, silently removing unresolved upstream edges from the generated DAG. Reverse-declared valid chains repeatedly retried transforms and performed plugin discovery before readiness was known. The change: * detects transform cycles in linear time and reports a deterministic cycle path; * requires every distinct configured input ID before creating or validating a transform; * resolves dependencies with an indexed ready scheduler in `O((V + E) log V)` time and `O(V + E)` memory; * delays plugin discovery until dependency readiness is established; * preserves the legacy retry queue's evaluation order and generated action indexes for existing valid DAGs; * checks action-index arithmetic before narrowing to the legacy integer API; and * preserves the intentional single-transform and terminal explicit-empty-input fallbacks while rejecting ambiguous unresolved graphs. No public API, configuration option, dependency, or default behavior is added. ### Does this PR introduce _any_ user-facing change? Yes. Previously, a cyclic transform graph could leave submission or `--dry-run connect` running indefinitely. The same resolver could create an out-of-order multi-input transform from only the inputs already available, silently dropping the remaining configured upstreams. After this change, cycles and unresolved dependencies fail promptly with a contextual configuration error. Valid out-of-order DAGs wait for all inputs and retain every upstream action/schema. Correctly ordered jobs, duplicate input IDs, generated action names, result order, and the existing compatibility fallbacks remain unchanged. ### How was this patch tested? The final diff was tested on both supported JDK lines: * Java 8 (`1.8.0_172`): `ConfigParserUtilTest` 9/9, `MultipleTableJobConfigParserTest` 21/21, and `SeaTunnelConfValidateCommandTest` 29/29 passed. * Java 11 (`11.0.19`): the same suites passed 9/9, 21/21, and 29/29. * Java 8 and Java 11 skip-tests verification passed for `seatunnel-engine-core`, `seatunnel-engine-client`, and `seatunnel-starter`, including Spotless, compilation, and packaging. * `git diff --check` passed. Coverage includes two-node and self cycles, partially and wholly unresolved inputs, mixed source/transform inputs, duplicate input IDs, valid reverse-declared chains, runtime and connect dry-run paths, simple and explicit-empty fallback compatibility, terminal sink selection, and action-index boundaries. A wider aggregate reactor attempt was not counted as passing because it stopped before the affected modules in unchanged `seatunnel-config-shade` generated sources with missing `ConfigException`/`ConfigOrigin` symbols. The affected three-module verification above passes on both Java versions. ### Check list * [x] No new Jar binary package or dependency is added; the New License Guide does not apply. * [x] Documentation is not required because this fixes invalid dependency handling without adding or changing configuration. * [x] `incompatible-changes.md` is not required; existing valid DAG ordering, generated names, and compatibility fallbacks are preserved. * [x] The connector checklist is not applicable; this PR changes engine parsing and connect dry-run validation only. -- 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]
