OpenKeel: the sovereign French Cloud solution of the inherent group, with a European reach Discover inherent

Reverse-spec · Services

skyline-console — Async processing

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).

TriggerTypeIntervalPurposeReadsDefined at
list auto refreshsetTimeout chain30 s (dataDurationAuto)keep tables currentthe page's list call (silent)src/containers/List/index.jsx:67, src/containers/List/index.jsx:468
transition refreshsetTimeout chain10 s (dataDurationTransition)follow items in a transition statussame list callsrc/containers/List/index.jsx:66, src/containers/List/index.jsx:457
post-action refreshsetTimeout500 ms after an action endsshow the effect of an actionforced list refreshsrc/components/Tables/Base/ActionButton/index.jsx:228, src/containers/List/index.jsx:596
session restorepage loadonce per full page loadrebuild the sessionGET profile, GET policies, system roles, Neutron extensionssrc/core/index.jsx:65
Prometheus auto refreshsetInterval5 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: status in the page's transitionStatusList, 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), images saving, queued, pending_delete (src/resources/glance/image.jsx:117), floating IPs PENDING (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 silent so 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 same handleRefresh, 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 (hideAutoRefresh follows ableAutoFresh, 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 forceRefreshTopDetailWhenListRefresh is 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 one GET /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 profile and GET policies in parallel, then GET /v3/system/users/{id}/roles and GET /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_expired passes, 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.