* perf: speed up the VM list with many VMs
The VM list scanned whole store lists for every row and re-evaluated the same values per row on every render and sort. With several hundred VMs this blocked the browser on sorting and on every VM update.
Performance:
- look up launcher pods and migrations through shared indexes (namespace/name -> resource) instead of scanning per row; the indexes are computed per store list, so they stay in sync with in-place store updates
- use the same migration lookup (getLatestMigration) in the VM model and on the VM detail page
- look up PVCs, PVs, VMIs and restore backups by id
- merge VMs and VMIs with a Set
- evaluate the VM state once when sorting by state
- check the unschedulable condition before the pod based state checks
- cache feature flag results and per-schema/per-setting values that are the same for every row
Bug fixes:
- the launcher pod map was never rebuilt, because the store keeps the same array
- pods, volumes and migrations of a VM with the same name in another namespace could be picked up
The order of the volumes of a VM (vm.volumes) now follows the VM spec instead of the store order. Nothing depends on it.
Measured in a synthetic setup, 100 rows per page, sorting by state (Chrome, dev build):
- ~490 VMs, ~500 PVCs/PVs: 1.9 s -> 1.0 s
- ~490 VMs, 600 PVs, 200 migrations: 6.0 s -> 0.7 s, main thread blocked during VM updates 78% -> 32%
With few volumes the gain is much smaller (8-20%).
Related to: https://github.com/harvester/harvester/issues/9513
Signed-off-by: Volker Theile <vtheile@suse.com>
* fix: read VM data from the store of the resource instead of a fixed one
The migrations of a VMI and the migration badge of the state column were read from the hardcoded `harvester` store. In the Rancher explorer (embedded and standalone) the data is loaded into the `cluster` store, so a running migration was shown neither in the VM state nor as badge.
The VM model remembered the store of the current product in a module variable on first use and never updated it. The same model is used in the Harvester product (`harvester` store) and in the Rancher explorer (`cluster` store), and Rancher keeps the page loaded when going from the explorer of a Harvester cluster to Virtualization Management and into the Harvester product. The VM list then read the VMIs, launcher pods, volumes and restores from the wrong store, and running VMs were shown as Starting until the page was reloaded.
Read the data from the store the resource lives in (`this.$getters`, in the formatter the store of the current product). In the Harvester product this is still the `harvester` store, so nothing changes there.
Not covered: volume details like the lock icon of encrypted volumes. The explorer uses the generic Rancher PVC model, which does not know them, and settings based checks (feature flags, backup target) are not loaded there either.
Related to: https://github.com/harvester/harvester/issues/11882
Signed-off-by: Volker Theile <vtheile@suse.com>
---------
Signed-off-by: Volker Theile <vtheile@suse.com>
* fix: vGPU doesn't display in edit VM page
Signed-off-by: Andy Lee <andy.lee@suse.com>
* fix: align PCI passthrough action buttons height
Match the enable/disable passthrough and Actions dropdown buttons to 40px and move the selected-count label below them.
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: clear selected VM rows after click bulk action
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: await altStopVM action
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: multiple VM start actions
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: modify altRestartVM()
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: add VM display name annotation support in edit and list views
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: add display name checkbox and input field
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* fix: add alternative action for VM restart and soft reboot
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: fix alignment
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: enhance VM migration functionality and localization
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: add allVmsOnTargetNode method and update migration titles in localization
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: enhance migration error handling and update localization for migration dialog
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* fix: some actions limited for virt-viewer
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: based on schema collectionMethods
Signed-off-by: Andy Lee <andy.lee@suse.com>
* fix: conditionally add migrate action to available actions
* fix: update collectionMethods check to use find for case-insensitive matching
* fix: update canEditClusterMembers method to use schema for collectionMethods
* fix: update canCreateImage check to use case-insensitive matching
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* fix: remove unneeded persistentvolumeclaim type label translation key
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: improve lockIconTooltipMessage call twice
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: avoid watch allVMs
Signed-off-by: Andy Lee <andy.lee@suse.com>
* perf: improve the some functions with pre-created map
Signed-off-by: Andy Lee <andy.lee@suse.com>
* perf: improve the vm list page
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: AI comment
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: based on feedback
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: ensure the state is pending when perform cloning the efi
Signed-off-by: pohanhuang <pohan.huang@suse.com>
* feat: define harvesterhci.io/clone-backend-storage-status in labels-annotations.js
Signed-off-by: pohanhuang <pohan.huang@suse.com>
---------
Signed-off-by: pohanhuang <pohan.huang@suse.com>
* feat: show notification if there is VM pending restart
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: update based on comments
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: calculate count from vm names
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* fix: hide VM take backup action if backup target is not available
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: use extracted func
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* fix: reboot button in VNC console
Signed-off-by: Andy Lee <andy.lee@suse.com>
* style: hide the arrow in VNC console
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* fix: isStopping state condition
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: remove unused variable
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: add maxCPU and maxMemory
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: add hotplug dialog
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: add restart message
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: let VM template support cpuMemoryHotplug
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: add feature flag
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: add max-hotplug-ratio setting
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>