Skip to content
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

Skip Mode #6039

Open
wants to merge 30 commits into
base: master
Choose a base branch
from
Open

Skip Mode #6039

wants to merge 30 commits into from

Conversation

wxtim
Copy link
Member

@wxtim wxtim commented Mar 27, 2024

Closes #5641 (also fixes #5975, and fixes #5820 )

Skip Mode Proposal Doc

This branch includes (marked against skip mode proposal):

  1. A new task run mode called "skip" to sit alongside the existing "live" and "simulation" and "dummy" modes.
  2. Skip mode settings in `[runtime][<namespace>][skip].
  3. Task-level control of the run mode - allowing run mode of tasks to override that of the workflow using [runtime][<namespace>]run mode.
    a. Broadcast can change run mode for future task job submissions.
    b. Cylc Validate and lint will warn about the setting not being live.
  4. cylc set --out skip sets outputs from skip mode.
  5. Tests to ensure that run mode = skip respects is_held flag.
  6. Tests to ensure that force triggering a task will not override the run mode.

Extras
7. Run Mode is available as an task attribute in the UI
8. When tasks are run in skip mode, the prerequisites which correspond to the outputs they generate should be marked as satisfied by skip mode rather than satisfied naturally for provenance reasons. For the purpose of cylc remove logic, satisfied by skip mode should be treated the same as satisfied naturally.

There are two extensions, which I haven't dealt with yet, because I want to ensure that the basic functionality works, and move to the substantial documentation PR which need follow this.

Check List

  • I have read CONTRIBUTING.md and added my name as a Code Contributor.
  • Contains logically grouped changes (else tidy your branch by rebase).
  • Does not contain off-topic changes (use other PRs for other changes).
  • Applied any dependency changes to both setup.cfg (and conda-environment.yml if present).
  • Tests are included (or explain why tests are not needed).
  • CHANGES.md entry included if this is a change that can affect users
  • Cylc-Doc pull request opened if required at cylc/cylc-doc/pull/XXXX.
  • Feature: PR against master

@wxtim wxtim marked this pull request as draft March 27, 2024 12:57
@wxtim wxtim force-pushed the feature.skip_mode branch 2 times, most recently from b43d296 to d26c315 Compare March 28, 2024 09:11
@oliver-sanders oliver-sanders added this to the cylc-8.x milestone Apr 2, 2024
@wxtim wxtim self-assigned this Apr 22, 2024
@wxtim wxtim requested review from oliver-sanders, markgrahamdawson and MetRonnie and removed request for markgrahamdawson April 23, 2024 10:00
@wxtim wxtim marked this pull request as ready for review April 23, 2024 14:26
@MetRonnie MetRonnie modified the milestones: 8.x, 8.4.0 Apr 23, 2024
cylc/flow/cfgspec/workflow.py Outdated Show resolved Hide resolved
cylc/flow/cfgspec/workflow.py Outdated Show resolved Hide resolved
cylc/flow/cfgspec/workflow.py Outdated Show resolved Hide resolved
cylc/flow/cfgspec/workflow.py Outdated Show resolved Hide resolved
@MetRonnie MetRonnie added the config change Involves a change to global or workflow config label Apr 23, 2024
@wxtim wxtim requested a review from MetRonnie April 24, 2024 15:10
@wxtim wxtim force-pushed the feature.skip_mode branch 4 times, most recently from 3d002ee to dd0a9fc Compare April 25, 2024 12:56
cylc/flow/prerequisite.py Outdated Show resolved Hide resolved
cylc/flow/scheduler_cli.py Outdated Show resolved Hide resolved
cylc/flow/task_state.py Outdated Show resolved Hide resolved
cylc/flow/task_state.py Outdated Show resolved Hide resolved
cylc/flow/task_state.py Outdated Show resolved Hide resolved
cylc/flow/scheduler.py Outdated Show resolved Hide resolved
cylc/flow/scheduler.py Outdated Show resolved Hide resolved
cylc/flow/task_pool.py Outdated Show resolved Hide resolved
@wxtim wxtim force-pushed the feature.skip_mode branch 3 times, most recently from 0d42eab to c37ef72 Compare May 8, 2024 12:43
@wxtim wxtim requested a review from MetRonnie May 8, 2024 13:47
@wxtim wxtim force-pushed the feature.skip_mode branch 2 times, most recently from 3839a8a to d7ee653 Compare May 9, 2024 08:50
cylc/flow/network/schema.py Outdated Show resolved Hide resolved
cylc/flow/task_state.py Outdated Show resolved Hide resolved
cylc/flow/unicode_rules.py Outdated Show resolved Hide resolved
cylc/flow/task_proxy.py Outdated Show resolved Hide resolved
cylc/flow/task_pool.py Outdated Show resolved Hide resolved
cylc/flow/run_modes/skip.py Outdated Show resolved Hide resolved
cylc/flow/run_modes/skip.py Outdated Show resolved Hide resolved
cylc/flow/run_modes/nonlive.py Outdated Show resolved Hide resolved
cylc/flow/run_modes/nonlive.py Outdated Show resolved Hide resolved
cylc/flow/cfgspec/workflow.py Outdated Show resolved Hide resolved
Comment on lines 637 to 638
exclude: Exclude one possible required message, allowing
specification of all required outputs if succeeded or failed.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could this be explained better? I am not sure what this means (though judinging from the tests it is not as simple as just excluding the specified output from the return value, which was my first impression)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've had a go.

cylc/flow/task_pool.py Outdated Show resolved Hide resolved
cylc/flow/scheduler_cli.py Outdated Show resolved Hide resolved
cylc/flow/run_modes/simulation.py Outdated Show resolved Hide resolved
Comment on lines +60 to +61
'disable task event handlers':
rtconfig['skip']['disable task event handlers'],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, why add this to the platform dict instead of just accessing it on itask.tdef.rtconfig['simulation']['disable task event handlers']? (Or maybe setting it on itask.mode_settings for shorter access)

(disable task event handlers is not a settable platform configuration in global.cylc so this is slightly confusing)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This rtconfig object may include broadcasts. Broadcasts should apply to jobs submitted by a task, but should not modify the task proxy's definition. Hence this slight bodge.

cylc/flow/prerequisite.py Outdated Show resolved Hide resolved
cylc/flow/prerequisite.py Outdated Show resolved Hide resolved
cylc/flow/config.py Outdated Show resolved Hide resolved
cylc/flow/task_job_mgr.py Outdated Show resolved Hide resolved
cylc/flow/task_job_mgr.py Outdated Show resolved Hide resolved
wxtim and others added 6 commits November 12, 2024 10:33
Co-authored-by: Ronnie Dutta <61982285+MetRonnie@users.noreply.github.com>
* upstream/master:
  Update cylc/flow/rundb.py
  GH Actions shortlog: check out head ref
  Add Paul Armstrong to CONTRIBUTING.md
  Report the error if write attempts fail to the DB
  Functional tests: allow `grep_fail` to accept options (cylc#6463)
  Bump dev version
  Prepare release 8.3.6
  Bump pypa/gh-action-pypi-publish from 1.11.0 to 1.12.2
  Simplify task state deltas
  Refactor task killing
  Bump pypa/gh-action-pypi-publish from 1.10.3 to 1.11.0 (cylc#6455) [skip ci]
  Spawn parentless sequential xtriggered task on set outputs (cylc#6448)
  Delete changes.d/6404.fix.md
  Pass pre-install plugins the value of workflow rundir as options.against source, allowing re-install and validate against source to access previous CLI opts as stored in rose-suite-cylc-install.conf
@wxtim wxtim requested a review from MetRonnie November 12, 2024 11:45
@MetRonnie MetRonnie added the schema change Change to the Cylc GraphQL schema label Nov 12, 2024
"""
if self.get_run_mode() in {RunMode.SIMULATION, RunMode.DUMMY}:
if self.get_run_mode().value in WORKFLOW_ONLY_MODES:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It does not seem clear to me why you would not run event handlers in modes that apply to the workflow only, perhaps clearer to spell out the modes as before?

Suggested change
if self.get_run_mode().value in WORKFLOW_ONLY_MODES:
if self.get_run_mode() in {RunMode.SIMULATION, RunMode.DUMMY}:

Comment on lines +1077 to +1084
if not submit_func:
# Return to nonlive.
nonlive_mode = False
else:
nonlive_mode = submit_func(
self, itask, rtconfig, workflow, now)

if nonlive_mode:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if not submit_func:
# Return to nonlive.
nonlive_mode = False
else:
nonlive_mode = submit_func(
self, itask, rtconfig, workflow, now)
if nonlive_mode:
if submit_func and submit_func(
self, itask, rtconfig, workflow, now
):

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
config change Involves a change to global or workflow config schema change Change to the Cylc GraphQL schema
Projects
None yet
Development

Successfully merging this pull request may close these issues.

allow some real tasks in sim mode? dummy mode: subtract err-script from jobs skip mode
3 participants