1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2026-11-11 12:46:49 +00:00

perf(computes): the create page reads the host's capabilities once

Measured on the create page: 751 ms and 72 libvirt calls, now 123 ms and
13. Its getters parsed the host's capabilities some 60 times, each read
from libvirt. A connection object (one per request) now reads them once,
and the domain capabilities once per emulator, arch, machine and domain
type. The VM page's cached_reads block no longer needs its own copy.
This commit is contained in:
catborise 2026-10-09 15:24:03 +03:00
parent a87fbf739f
commit 9adc808d26
4 changed files with 103 additions and 34 deletions

View file

@ -9,6 +9,7 @@ from urllib.parse import quote
import libvirt
from django.conf import settings
from django.utils.functional import cached_property
from libvirt import libvirtError
from vrtManager import util
from vrtManager.rwlock import ReadWriteLock
@ -397,9 +398,19 @@ class wvmConnect(object):
def is_qemu(self):
return self.wvm.getURI().startswith("qemu")
@cached_property
def capabilities_xml(self):
"""The host's capabilities, read once per object (a request): most getters below parse them"""
return self.wvm.getCapabilities()
@cached_property
def dom_cap_xmls(self):
"""The domain capabilities read so far, by emulator, arch, machine and domain type"""
return {}
def get_cap_xml(self):
"""Return xml capabilities"""
return self.wvm.getCapabilities()
return self.capabilities_xml
def get_dom_cap_xml(self, arch, machine):
""" Return domain capabilities xml"""
@ -409,7 +420,10 @@ class wvmConnect(object):
machine_types = self.get_machine_types(arch)
if not machine or machine not in machine_types:
machine = "pc" if "pc" in machine_types else machine_types[0]
return self.wvm.getDomainCapabilities(emulatorbin, arch, machine, virttype)
key = (emulatorbin, arch, machine, virttype)
if key not in self.dom_cap_xmls:
self.dom_cap_xmls[key] = self.wvm.getDomainCapabilities(*key)
return self.dom_cap_xmls[key]
def get_capabilities(self, arch):
""" Host Capabilities for specified architecture """