Skip to content

Refs #39253 - perf 4/4 - Fetch permissions only on initial load - #1050

Draft
adamruzicka wants to merge 6 commits into
theforeman:masterfrom
adamruzicka:perf-part4
Draft

Refs #39253 - perf 4/4 - Fetch permissions only on initial load#1050
adamruzicka wants to merge 6 commits into
theforeman:masterfrom
adamruzicka:perf-part4

Conversation

@adamruzicka

@adamruzicka adamruzicka commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Follows #1049

TODOs:

  • make the permission checks task-specific

MariaAga and others added 2 commits July 27, 2026 14:57
The host table previously relied on an accidental refresh cascade:
parent polling updated Redux state, which changed callback identities,
which triggered useEffect, which re-fetched hosts. This adds an
explicit setTimeout-based polling chain (5s interval) that stops
when the job finishes or on API error, and restarts when filters
change.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace withInterval/setInterval polling with recursive setTimeout
chains for job invocation and template invocation detail pages. This
prevents request pileup by waiting for the previous response before
scheduling the next poll.

- Remove updateJob action (stored under unused UPDATE_JOB key)
- Remove getTask action, expose cancellable via task node in RABL
- Add extractErrorMessage helper consolidating duplicated error handling
- Fix sprintf injection in error toast messages
- Stop template invocation polling on finished/error states

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@adamruzicka
adamruzicka force-pushed the perf-part4 branch 4 times, most recently from 7079908 to d9e6b0a Compare July 29, 2026 09:50
adamruzicka and others added 3 commits July 29, 2026 12:19
Adopt the cancel-first pattern from JobInvocationHostTable to prevent
overlapping polls when getJobInvocation is called multiple times.

This ensures that any pending timeout is cancelled before starting a
new polling cycle, preventing race conditions and duplicate API calls.
Merge per-host task and permissions data into the paginated
/api/v2/job_invocations/:id/hosts endpoint, eliminating the
separate list_jobs_hosts action that fetched ALL hosts unpaginated.

The API endpoint now accepts include_permissions parameter to
optionally return task cancellable state and per-host permissions,
replacing the data previously served by the non-API endpoint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Send include_permissions=true only on the first API request for both
the main job invocation and the hosts endpoints. Cache the permissions
from the initial response and merge them into subsequent poll results,
avoiding redundant authorization checks on every 5-second poll tick.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

@adamlazik1 adamlazik1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants