Skip to content

task/WA-193: Develop a dynamic profile system for dynamic exec system apps#1312

Open
fnets wants to merge 10 commits into
mainfrom
task/WA-193
Open

task/WA-193: Develop a dynamic profile system for dynamic exec system apps#1312
fnets wants to merge 10 commits into
mainfrom
task/WA-193

Conversation

@fnets

@fnets fnets commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Overview

On each HPC system, profile requirements may differ between apps, needing different specialized profiles between the same app across systems. Develop a dynamic system to load a profile depending on the system given an app, using the existing field in notes for dynamicSystems.

Related

Changes

This checks if there is a dynamicExecSystems blob in the notes field in an app's definition. The blob snippet should look like below. Then, it uses that to find the system to find the assigned scheduler profile and insert it into the app's tapis job submission.

"dynamicExecSystems": [
            {
                "systemId": "frontera",
                "profileName": "tacc-apptainer"
            },
            {
                "systemId": "ls6",
                "profileName": "tacc-apptainer"
            }
        ]

Testing

  1. Go to https://cep.test/workbench/applications/hello-world?appVersion=0.0.2
  2. Make sure the app renders.
  3. Make sure that you can submit a job for both Frontera and LS6.
  4. Check job details and make sure that the tacc-apptainer is used as the TACC Scheduler Profile.

UI

Notes

@codecov

codecov Bot commented Jun 8, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 81.25000% with 3 lines in your changes missing coverage. Please review.
✅ Project coverage is 64.11%. Comparing base (a2c9004) to head (d1caacf).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
...nt/src/components/Applications/AppForm/AppForm.jsx 78.57% 3 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #1312      +/-   ##
==========================================
+ Coverage   64.09%   64.11%   +0.01%     
==========================================
  Files         461      461              
  Lines       13793    13808      +15     
  Branches     2750     2752       +2     
==========================================
+ Hits         8841     8853      +12     
- Misses       4603     4606       +3     
  Partials      349      349              
Flag Coverage Δ
javascript 67.13% <78.57%> (+0.02%) ⬆️
unittests 60.92% <100.00%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
...plications/AppForm/fixtures/AppForm.app.fixture.js 100.00% <ø> (ø)
...pForm/fixtures/AppForm.executionsystems.fixture.js 100.00% <ø> (ø)
server/portal/apps/workspace/api/views.py 44.35% <100.00%> (+0.15%) ⬆️
...nt/src/components/Applications/AppForm/AppForm.jsx 80.11% <78.57%> (-0.07%) ⬇️

... and 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@fnets fnets marked this pull request as ready for review June 11, 2026 15:02
Comment thread client/src/components/Applications/AppForm/AppForm.jsx Outdated
Comment on lines +683 to +692
const selectedSystem = app.definition.notes.dynamicExecSystems.find(
(s) => s.systemId === job.execSystemId
);
const profileName = selectedSystem?.profileName;
job.parameterSet.schedulerOptions.push({
name: 'TACC Scheduler Profile',
description: 'Scheduler profile for HPC clusters at TACC',
include: true,
arg: `--tapis-profile ${profileName}`,
});

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

If you find a matching profile for the chosen exec system, do we want to replace the profile that's in the definition? We might need to in the case the default system for jupyter hpc is vista, but has dynamic systems, and the user chooses stampede3 - we'll want to use the stampede3 profile instead of the vista profile

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Now using .filter() to replace the existing scheduler options for --tapis-profile

const selectedSystem = app.definition.notes.dynamicExecSystems.find(
(s) => s.systemId === job.execSystemId
);
const profileName = selectedSystem?.profileName;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

If no profile name is found, we'll want to skip the .push below right?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yep, good catch.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Added a check for profileName

job.parameterSet.schedulerOptions = [];
}
//pick the right profile for the right exec system
const selectedSystem = app.definition.notes.dynamicExecSystems.find(

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

If the dynamicExecSystems field does not correspond to our expectations as an array of objects, we'll need to handle those cases here

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Added a check for isValidDynamicExecSystems

fnets and others added 2 commits June 11, 2026 15:30
Co-authored-by: Sal Tijerina <r.sal.tijerina@gmail.com>
…k to make sure dynamicsystems were written correctly in app definition and provide an error message
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants