Polling and refresh — skyline-console — branch stable/2026.2
Branch
stable/2026.2@806d200392ee— repository https://opendev.org/openstack/skyline-console — analysed on 2026-10-29
The console consumes no message bus and receives no push notification. It follows the asynchronous work of the services only by re-reading lists. Timers run in the browser tab and stop when the page component unmounts (src/containers/List/index.jsx:108).
| Trigger | Type | Interval | Purpose | Reads | Defined at |
|---|---|---|---|---|---|
| list auto refresh | setTimeout chain | 30 s (dataDurationAuto) | keep tables current | the page's list call (silent) | src/containers/List/index.jsx:67, src/containers/List/index.jsx:468 |
| transition refresh | setTimeout chain | 10 s (dataDurationTransition) | follow items in a transition status | same list call | src/containers/List/index.jsx:66, src/containers/List/index.jsx:457 |
| post-action refresh | setTimeout | 500 ms after an action ends | show the effect of an action | forced list refresh | src/components/Tables/Base/ActionButton/index.jsx:228, src/containers/List/index.jsx:596 |
| session restore | page load | once per full page load | rebuild the session | GET profile, GET policies, system roles, Neutron extensions | src/core/index.jsx:65 |
| Prometheus auto refresh | setInterval | 5 s | (dead code on this branch: nothing calls startAutoRefresh) | — | src/resources/prometheus/monitoring.js:312 |
List auto refresh and transition refresh
- Trigger: every time the table data are recomputed (
getDataSource), the page checks whether any visible item is in a transition status (itemInTransitionFunction, default:statusin the page'stransitionStatusList,src/containers/List/index.jsx:347). If so, it arms the 10 s timer, otherwise the 30 s timer (src/containers/List/index.jsx:928). Arming one timer cancels the other. - Transition statuses come from each resource module, e.g. instances (
src/resources/nova/instance.jsx:40), imagessaving,queued,pending_delete(src/resources/glance/image.jsx:117), floating IPsPENDING(src/resources/neutron/floatingip.js:40), firewalls (src/resources/neutron/firewall.js:35). - Data read: the same request as the page's first load, with the current page, filters and sort, flagged
silentso that the table does not blank (src/containers/List/index.jsx:964). - Budget: auto refreshes stop after
autoRefreshTotalTime / dataDurationAuto= 600 / 30 = 20 silent refreshes without user activity (src/containers/List/index.jsx:68,src/containers/List/index.jsx:972). Any action, selection, paging or manual refresh resets the counter (src/containers/List/index.jsx:596). The transition refresh goes through the samehandleRefresh, so a resource stuck in transition is polled every 10 s until the same budget is spent. - Suspension: no refresh while an action dialog is open or rows are selected (
inAction,inSelect), and none while a detail-page action runs (src/containers/List/index.jsx:964). The user can switch auto refresh off in the table toolbar (hideAutoRefreshfollowsableAutoFresh,src/containers/List/index.jsx:388). - Error behaviour: a failed fetch stops auto refresh (
onStopRefreshAutoWhenError,src/containers/List/index.jsx:586) and shows one notification; nothing retries until the user refreshes. - Detail pages: a list embedded in a detail tab refreshes the top detail when
forceRefreshTopDetailWhenListRefreshis set or on forced refresh (src/containers/List/index.jsx:964); detail pages have no timer of their own. - Concurrency: one timer per mounted list; several tabs or windows each poll independently. No de-duplication across tabs.
- Cost: per open list, one request every 30 s (10 s during transitions) for at most 10 minutes of inactivity. For instance, volume, snapshot and port lists, each request is one skyline
extension/*call, which itself makes several calls to Nova, Glance, Cinder and Neutron (see the apiserver reverse-spec, 03 § 2). On administrator lists, add oneGET /v3/projects/{id}per project whose name is not cached (src/stores/base.js:235). A rewritten service sees this as steady read traffic per logged-in user with a list open.
Session restore on page load
- Trigger: every full page load outside
/login(src/core/index.jsx:65); in-app navigation does not repeat it. - Flow:
GET profileandGET policiesin parallel, thenGET /v3/system/users/{id}/rolesandGET /v2.0/extensions(recorded: 4 requests per load). - Error behaviour: any failure of profile or policies → login page with
referer(src/core/index.jsx:73); failures of the last two are swallowed (src/stores/root.js:155,src/stores/root.js:217).
Not present
- No WebSocket or server-sent events for updates (the only WebSocket is the Zun container console).
- No token renewal: when
time_expiredpasses, the user has to log in again (04 § 6). - No offline cache: stores are cleared on project or region switch and on logout (
src/stores/root.js:317).
Source: reverse-spec-skyline-console/05-async-processing_stable-2026.2.md. The _rewrite/ and _inventory/ files are not published on the site.