[Engine-devel] Mapping between supported display protocols and video devices
by Vitor de Lima
Hi everyone,
Recently the changes #18150, #18677 and #17885 were submitted in order to avoid the selection of display protocols and virtual video cards that are incompatible with the PPC64 architecture and to map the VNC protocol with the standard VGA virtual device, since the Cirrus Logic device is not supported in the PPC64 architecture. I would like some feedback about that.
So far, these changes use an existing parameter in the osinfo (called "spiceSupport") to validate if the selected operating system supports SPICE and hide it in the frontend in case it doesn't. They also change the default virtual video card for each display protocol according to new properties in the osinfo, e.g.:
os.other.spiceSupport.value = true
os.other.devices.vnc.vmDeviceType.value = cirrus os.other.devices.qxl.vmDeviceType.value = qxl
os.other_ppc64.spiceSupport.value = false os.other_ppc64.devices.vnc.vmDeviceType.value = vga
(This maps the qxl protocol into the qxl device and the VNC protocol into the cirrus device in the x86_64 arch, and the VNC protocol into the VGA device in the PPC64)
However, this still has some limitations, such as:
* It doesn't allow the user to choose between the different virtual devices that exist and can be used in the VNC protocol (such as the QXL and VMware VGA)
* The syntax is ugly. As suggested in the code reviews, it could be a list of supported protocols, e.g.:
os.other.displayProtocols = vnc, spice
So, how should the engine be modified to allow multiple video cards for each display protocol? What do you think should be done?
Thanks,
Vitor de Lima
11 years, 3 months
[Engine-devel] ok to sort login domains on backend?
by Greg Sheremeta
------=_Part_3762588_2036386564.1377865608371
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Hi,
I'm working on https://bugzilla.redhat.com/785555 -- "domain selection list in login screen should be sorted alphabetically"
I was going to put the sort logic in the web apps, but it makes sense to just put it in the backend, specifically in GetDomainListQuery. (There is already a sort there, but it needs to be tweaked to put "internal" always last.) This would affect non-webapp clients (REST API), so I want to make sure there are no objections. Unit tests pass and it seems to work fine (screen attached).
Any objections?
Thanks,
Greg
Greg Sheremeta
Red Hat, Inc.
Sr. Software Engineer, RHEV
Cell: 919-807-1086
gshereme(a)redhat.com
------=_Part_3762588_2036386564.1377865608371
Content-Type: image/png; name="login domain selectbox.png"
Content-Disposition: attachment; filename="login domain selectbox.png"
Content-Transfer-Encoding: base64
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
------=_Part_3762588_2036386564.1377865608371--
11 years, 3 months
[Engine-devel] Opimizing Postgres Stored Procedures
by Eli Mesika
Hi
I had merged the following patch
http://gerrit.ovirt.org/#/c/17962/
This patch introduce usage of the IMMUTABLE, STABLE and STRICT keywords in order to boost performance of the Postgres SPs.
Please make sure that your current/and future DB scripts applied that.
Volatility
----------
* A function should be marked as IMMUTABLE if it doesn't change the database, and if it doesn't perform any lookups (even for database configuration values) during its operation.
* A function should be marked STABLE if it doesn't change the database, but might perform lookups (IMMUTABLE is preferable if function meets the requirements).
* A function doesn't need to be marked VOLATILE, because that's the default.
STRICTNESS
----------
A function should be marked STRICT if it should return NULL when it is passed a NULL argument, and then the function won't even be called if it is indeed passed a NULL argument.
I am available for any questions.
Thanks
Eli
11 years, 3 months