-
Notifications
You must be signed in to change notification settings - Fork 93
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Task spawning and invalid cycle points #4514
Comments
Related example that doesn't have an error in the graph: [scheduling]
initial cycle point = next(T06)
runahead limit = P1
[[graph]]
PT6H = "waz"
T06 = "waz[-PT6H] => foo" ^ In Cylc 8, for spawning purposes, we try to spawn |
I've been aware of this behaviour for some time and always felt a bit uneasy about it. I think this matters, particularly for sequences with exclusions (say, you exclude every New Years day on a For the suite generating framework I've written for IMPROVER I avoided this problem by taking a different approach. I've made the cycling frequency into a property of the task itself rather than the graph of tasks. Then, for a dependency like |
Haha, the earliest versions of Cylc did exactly that, before we had a dependency graph to define prerequisites and cycling. |
Presumably if we can detect and fail this sort of graphing error at validation time, you'd be happy? |
Maybe this should be revisited 😉
I don't think it's a major problem in practice, but it would help if the validation could catch it. |
Yes, for the graph window computed by Implemented in #4911 |
^ this fails validation in both 7 and 8 with no cycling sequences defined for foo
But this:
^ at Cylc 7:
foo
)foo.1
andbar.1
run (pre-initial ignore)foo
runs at everyP2
cycle ...bar
s waiting on non-existent off-sequencefoo
s^ at Cylc 8:
foo.1
andbar.1
run (pre-initial ignore)foo
runs at everyP2
cyclebar
s runAt first glance this is the expected result. Cylc 8 doesn't pre-spawn waiting task so we should not expect a stall here.
But on closer inspection...
At Cylc 7 the graph above is interpreted as :
foo
is valid at everyP2
pointbar
at everyP2
point depends onfoo
at non-existent off-sequence pointsAt Cylc 8, the same is true for prerequisite definition, but for spawning purpose (spawn on demand) the second line gets interpreted as:
foo => bar[ P1]
So
bar
doesn't run (at Cylc 8) becausefoo
onP2
points tries to spawnbar
at off-sequence points, which is technically not correct.I don't think that matters in practice, because:
bar
doesn't runAnd
bar
prerequisites are still correct if they get spawned by another another task:^ This correctly stalls at Cylc 8, with
bar
onP2
points waiting on non-existent off-sequencefoo
.Still, it raises some questions:
foo[-P1] => bar
is invalid iffoo
only exists atP2
points, to avoid attempting to interpret it incorrectly asfoo => bar[ P1]
?The text was updated successfully, but these errors were encountered: