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

   ### Search before asking
   
   - [x] I searched existing issues and pull requests for transform dependency 
cycles, unresolved `plugin_input` values, partial multi-input resolution, and 
parser retry loops. I found no issue or pull request implementing this fix.
   
   ### What happened
   
   The Zeta transform resolver has two related correctness failures on the 
current `dev` branch:
   
   1. A cycle between transform outputs never makes progress. The runtime 
parser and `--dry-run connect` repeatedly move the same transform 
configurations to the end of a queue, so submission or validation does not 
return an error.
   2. A valid out-of-order multi-input transform is considered ready when only 
one declared input exists. Missing inputs are filtered out, and the transform 
is created from the remaining inputs. This silently removes an edge from the 
configured DAG.
   
   For example, when `t2` declares `plugin_input = [src, t1]` before `t1` is 
declared, the current parser creates `t2` from `src` alone instead of waiting 
for `t1`. This can change job results without reporting an invalid 
configuration.
   
   Expected behavior:
   
   - Cyclic or otherwise unresolvable transform dependencies should fail 
promptly with a contextual configuration error.
   - A transform should be created only after every distinct declared input ID 
is available.
   - Repeated input IDs should remain compatible with the existing action and 
catalog-table deduplication behavior.
   - Existing simple-graph and explicit empty-input fallback behavior should 
remain compatible.
   - Reverse-declared valid DAGs should not require quadratic retry scans or 
repeated plugin discovery.
   
   ### SeaTunnel Version
   
   `dev` at `9ebb27e8f92059dee76d71029adbfbaa1c099285`.
   
   ### SeaTunnel Config
   
   Cycle reproduction:
   
   ```conf
   env {
     execution.parallelism = 1
     job.mode = BATCH
   }
   
   source {
     FakeSource {
       plugin_output = src
       schema = { fields { name = string } }
     }
   }
   
   transform {
     sql {
       plugin_input = [t2]
       plugin_output = t1
       query = "select 1 from dual"
     }
     sql {
       plugin_input = [t1]
       plugin_output = t2
       query = "select 1 from dual"
     }
   }
   
   sink {
     console { plugin_input = [src] }
   }
   ```
   
   Partial-input reproduction:
   
   ```conf
   env {
     execution.parallelism = 1
     job.mode = BATCH
   }
   
   source {
     FakeSource {
       plugin_output = src
       schema = { fields { name = string } }
     }
   }
   
   transform {
     sql {
       plugin_input = [src, t1]
       plugin_output = t2
       query = "select * from dual"
     }
     sql {
       plugin_input = [src]
       plugin_output = t1
       query = "select * from dual"
     }
   }
   
   sink {
     console { plugin_input = [t2] }
   }
   ```
   
   ### Running Command
   
   ```shell
   ./bin/seatunnel.sh --config /path/to/reproduction.conf -e local
   ```
   
   The same resolver is exercised by `--dry-run connect`.
   
   ### Error Exception
   
   The cycle case produces no exception. The process remains in transform 
parsing until it is externally terminated.
   
   The partial-input case also produces no exception. Inspection of the 
generated action graph shows that `t2` has only the source action as its 
upstream; the declared `t1` upstream is absent.
   
   In deterministic runs on the current `dev` code, the cycle remained active 
until terminated after 50 seconds on Java 8 and 35 seconds on Java 11. The 
partial-input action-graph reproduction also produced the same missing edge on 
both JDKs.
   
   ### Zeta or Flink or Spark Version
   
   Zeta engine from the `dev` revision above.
   
   ### Java or Scala Version
   
   - Java 8: `1.8.0_172`
   - Java 11: `11.0.19`
   
   ### Proposed fix and compatibility contract
   
   - Validate transform-to-transform dependencies with a deterministic graph 
traversal and report a concrete cycle path.
   - Resolve transforms through an indexed ready queue so each dependency edge 
is processed once and plugin discovery begins only after all inputs are ready.
   - Preserve the legacy queue's evaluation order and generated action names 
for existing valid configurations.
   - Retain the intentional single-transform and terminal empty-input 
compatibility fallbacks, while failing ambiguous unresolved graphs.
   - Add runtime parser, graph validation, and connect dry-run coverage for 
cycles, self-cycles, partial inputs, duplicate inputs, reverse-declared chains, 
fallback compatibility, and action-index boundaries.
   
   ### Are you willing to submit a PR?
   
   - [x] Yes, I am willing to submit a PR.
   
   ### Code of Conduct
   
   - [x] I agree to follow this project's [Code of 
Conduct](https://www.apache.org/foundation/policies/conduct).
   


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