Cylc hold wildcards not working as expected?

hi there,

i have several tasks running in some different cycle points and i want to hold all of the active postproc tasks.

from the docs for cylc hold

This command can operate on multiple tasks, globs and selectors may
be used:

    Globs (note: globs should be quoted and only match active tasks):
        # Match any the active task "foo" in all cycles
        '//*/foo'

however, when i type this command…

cylc hold u-db797'//*/postproc'

only the first active cycle point is held…

image

any idea what i’m doing wrong?

thanks,

jonny

The hold command holds individual tasks. If you target tasks in “all cycle points” (via a * glob) as you’ve done, it matches current active tasks in any active cycle point.

As the quoted docs say, globs only match active tasks, i.e. tasks present in the current “active window” of the workflow, not future waiting tasks that have yet to appear in the active window - those can only be held by explicit task ID.

So, if your command only held one instance of the postproc task, then that was the only instance present in the active window. The GUI also shows tasks beyond the active window (by default, one graph edge out from active tasks), but unfortunately it doesn’t yet visually distinguish them as future and past tasks.

To explain this a bit, note that glob-matching future tasks is potentially dangerous in an infinite cylcing workflow.

However, we’re considering how to make matching multiple tasks (to hold etc.) easier in Cylc 8. It actually worked the same way in Cylc 7, but in effect it was easier because the old “task pool” - kind of like the Cylc 8 active window - contained a lot of extra pre-spawned waiting tasks).

thanks hilary,

it doesn’t make sense to me that in this image, the first (rightmost) postproc task can be ‘active’ but the others aren’t since they all have running tasks immediately preceding them?

image

The “running tasks preceding them” are active, the postproc tasks downstream of those are not active yet. They are just future tasks that the graph activity has not reached yet - albeit very close to the activity.

Cylc 8 is much more efficient than Cylc 7 - it doesn’t pre-spawn future tasks into the active window before they are needed. This is mostly a very good thing, but it does mean that holding a lot of tasks at once is a bit more difficult (for the moment).

thanks!

The “running tasks preceding them” are active, the postproc tasks downstream of those are not active yet.

so why does the first one get held then? i’m clearly missing something fundamental here haha!

Haha, no, fair question!

I was just typing this:

BTW I’m actually surprised that even your first postproc task got held, because its only upstream parent in the graph is apparently still running.

That suggests to me that you must have done something else to cause that task to enter the active window. I’d have to see your scheduler log to confirm that though.

1 Like

Did you perhaps click on that individual task and specifically hold it? (Unlike globbing, that works for future tasks - but only one at a time).

1 Like

ah ok yeah i think i did do that! i’m a very learn-by-doing kinda guy so i’ll need to play around with this but i definitely understand it way better now! as you imply, it would’ve been a lot easier to get my head round if none of the tasks has responded to my command line things rather than just one!

thanks again, much appreciated :slight_smile:

2 Likes