]> git.proxmox.com Git - proxmox-widget-toolkit.git/commit
fix #4421: ui: guard setProxy against races of slow vs fast requests
authorFriedrich Weber <f.weber@proxmox.com>
Mon, 6 Mar 2023 14:03:14 +0000 (15:03 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 8 Mar 2023 06:42:11 +0000 (07:42 +0100)
commit51083ee54aa98af5a711622e4ed240840dcbbabe
tree14844e2048b1ec15c071cb6bccd541edc513eb65
parentc16785f66a5dc9da799fa6c6b0aad267508cc820
fix #4421: ui: guard setProxy against races of slow vs fast requests

Some UI components use `Ext.data.Store.setProxy` to change their
associated API endpoint URL in reaction to user input. One example is
`BackupView`, which calls `setProxy` when the user switches from
listing backups on storage A to listing backups on storage B. However,
if A is slow, the UI may receive the response for A *after* the
response for B. It will then display the contents of A as if they were
the contents of B, resulting in a UI inconsistency.

The reason is that `Ext.data.Store` still processes the slow response
for A, even though it is obsolete. This patch overrides the
responsible callback of `Ext.data.Store` to only process responses
belonging to the currently active proxy object. This should rule out
similar race conditions in all components that use the `setProxy` API.
In the above example, the patch results in the response for A being
ignored.

Ignored responses are logged to the browser console.

Note that this patch only concerns components that use `setProxy` for
changing API endpoints. Other components (e.g. those using
`proxy.setURL` for the same purpose) may be open to similar race
conditions.

Link: https://lists.proxmox.com/pipermail/pve-devel/2023-March/056062.html
Signed-off-by: Friedrich Weber <f.weber@proxmox.com>
src/Utils.js