I use cylc 7.8.1. Per cycle point all my tasks lead to a housekeep task, which uses rose_prune to tidy up logs/work/share etc. So without the housekeep task being triggered the suite will eventually fail to advance.
In this example I have tasks that copy data which doesn’t exist when the suite gets too far behind wall-clock time. I think I got this right by writing:
[[[T12]]]
graph = """
copy | copy:expired => housekeep
"""
This is the simplest case. Could I write this in a shorter way as copy:finish => housekeep ? Does :finish include :succeeded and :expired?
In a more complex case I create a plot from this copied data and other local model output which is polled for by a polling task (succeeds if local file exists, typically fails a couple of times before eventually succeeding, but may expire). The plotting shouldn’t happen if the polled data has expired, neither should it plot when the copied data has expired. But if poll and copy expire (and plot never happened), the housekeeping should still run. The thing with the polling task is that I can reasonably trust for this local data to eventually turn up (but I still want to handle expiry as there is no use in plotting data from weeks ago). The copy task on the other hand is less robust and data may never turn up. So the copy task should be allowed to fail without holding up the rest of the suite.
This is what I came up with to achieve this behaviour, and I am wondering whether it is complete:
[[[T12]]]
graph = """
poll & copy => plot
poll:expired => !plot
copy:expired => !plot
copy:fail => !plot
poll:expired | copy:expired | copy:fail | plot => housekeep
"""
Thanks for any comments and hints!
Fred