* 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>
* feat: use prime logo when server-flavor is prime
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: expose server-flavor setting
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: copilot review
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: add k3k addon UI
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: add rancher-k3k addon UI
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: copilot review
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: copilot review
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: remove k3k edit page
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: k3k addon description
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@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>
* deps: update rancher/shell to 3.0.12-rc.7
Signed-off-by: Andy Lee <andy.lee@suse.com>
* fix: move filter labels/schedule buttons position
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: improve serial console
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat(serial-console): add terminal search toolbar and highlight tuning
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: clear searach result after close
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: fine tune serial console
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: add customized migration plan delete model
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: copilot review
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: copilot review
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* fix: hide Virtul machine migration tabs if forklift addon is not enabled
Signed-off-by: Andy Lee <andy.lee@suse.com>
* fix: rename advanced to configurations
Signed-off-by: Andy Lee <andy.lee@suse.com>
* fix: fixed column width
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: review comment
Signed-off-by: Andy Lee <andy.lee@suse.com>
* revert: power on background color
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 support for volume expansion in storage configuration
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: update volume expansion wording
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: hide checkbox if feature flag is not enabled
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: revert unneeded change
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: vGPU / USB enable/disable actions needs to be hidden for read only users
Signed-off-by: Andy Lee <andy.lee@suse.com>
* style: add scoped styles for group actions in DeviceList component
Signed-off-by: Andy Lee <andy.lee@suse.com>
* style: remove width property from group actions in DeviceList components
Signed-off-by: Andy Lee <andy.lee@suse.com>
* fix: update logging type in init function and improve SideNav visibility handling
Signed-off-by: Andy Lee <andy.lee@suse.com>
* fix: ensure canManageGroup only returns true for non-empty rows with updatable permissions
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>
* fix: change auth/V3user to auth/user
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: extract to utils/auth.js
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: add nvidia driver toolkit dialog
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: add disable button guard
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: support advance option and creation from DataVolume
- advance option would let user change the accessMode/volumeMode
- creation from DataVolume could supports various scenario with
3rd-party storage
Signed-off-by: Vicente Cheng <freeze.bilsted@gmail.com>
* feat: add data migration action on volume page
Signed-off-by: Vicente Cheng <freeze.bilsted@gmail.com>
* refactor: use show advanced options link instead of checkbox
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: add feature flag
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: add feature flag for dataMigration action
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Vicente Cheng <freeze.bilsted@gmail.com>
Signed-off-by: Andy Lee <andy.lee@suse.com>
Co-authored-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: add another filter button
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: add feature falg to hide vGPU enable/disable actions in PCIDevices page
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: update with conditionally rendering
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: add Insecure Skip TLS Verify checkbox
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: set insecureSkipTLSVerify default to false
Signed-off-by: Andy Lee <andy.lee@suse.com>
* fix: conflict
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: remove unneeded change
Signed-off-by: Andy Lee <andy.lee@suse.com>
* fix: get the feature flag in data()
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: make data logic simpler
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: put tip in info banner
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@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>
* feat: add wanring message when disabling a device that haven not been detached in the backend
Signed-off-by: Jack Yu <jack.yu@suse.com>
* fix: remove unused en-us key
Signed-off-by: Jack Yu <jack.yu@suse.com>
---------
Signed-off-by: Jack Yu <jack.yu@suse.com>
* refactor: display addon name from addon.harvesterhci.io/displayName label
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: add descheduler description
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: add vGPU MIGConfiguration page
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: add detail page
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: add banner
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: allow editConfig when status is empty
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: remove unneeded code
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: only show disable action if MIGConfig is enabled
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: some UI flow changes
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: show configured profile in table
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: show configured profiles with requested count
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: based on review
Signed-off-by: Andy Lee <andy.lee@suse.com>
---------
Signed-off-by: Andy Lee <andy.lee@suse.com>
* feat: add l2VlanTrunkMode feature
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: remove unneeded code
Signed-off-by: Andy Lee <andy.lee@suse.com>
* refactor: fix edit l2vlan trunk mode edit page
Signed-off-by: Andy Lee <andy.lee@suse.com>
* fix: hide Route tab when trunk mode
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>