Fix error reporting for failed remote connections (bz 787011)

Fix setting window title when VNC mouse is grabbed (bz 788443)
Advertise VDI format in disk details (bz 761300)
Don't let an unavailable host hang the app (bz 766769)
Don't overwrite existing create dialog when reshowing (bz 754152)
Improve tooltip for 'force console shortcuts' (bz 788448)
This commit is contained in:
Cole Robinson 2012-02-13 19:07:57 -05:00
parent 3a8c60db95
commit f830495c36
7 changed files with 340 additions and 1 deletions

View File

@ -0,0 +1,121 @@
commit 13dd371e4840b8dca70508477cfc6820ac5d9a71
Author: Cole Robinson <crobinso@redhat.com>
Date: Wed Feb 8 14:15:15 2012 -0500
Don't let media polling block app if a connection goes down
If we unplug a remote machine we are connected to, doing the media
timeout with a gobject timeout means running it in the main thread,
which if it's blocking on the remote connection will freeze the whole
app.
diff --git a/src/virtManager/connection.py b/src/virtManager/connection.py
index 15c1d5e..d649c44 100644
--- a/src/virtManager/connection.py
+++ b/src/virtManager/connection.py
@@ -1583,6 +1583,9 @@ class vmmConnection(vmmGObject):
"connection doesn't seem to have dropped. "
"Ignoring.")
+ for dev in self.mediadevs.values():
+ dev.tick()
+
if not noStatsUpdate:
self._recalculate_stats(now, updateVMs)
diff --git a/src/virtManager/mediadev.py b/src/virtManager/mediadev.py
index 3731599..a046d9e 100644
--- a/src/virtManager/mediadev.py
+++ b/src/virtManager/mediadev.py
@@ -19,6 +19,7 @@
#
import logging
+import time
import virtinst
@@ -49,7 +50,7 @@ class vmmMediaDevice(vmmGObject):
obj = vmmMediaDevice(path, key, has_media, media_label, media_key,
dev, drvtype)
- obj.enable_poll_for_media()
+ obj.do_poll = True
return obj
@@ -65,7 +66,8 @@ class vmmMediaDevice(vmmGObject):
self.media_type = media_type
self.nodedev_obj = nodedev_obj
- self.poll_signal = None
+ self.do_poll = False
+ self.last_tick = 0
def _cleanup(self):
pass
@@ -130,50 +132,38 @@ class vmmMediaDevice(vmmGObject):
#########################################
# Nodedev API polling for media updates #
#########################################
- def enable_poll_for_media(self):
- if self.poll_signal:
- return
-
- self.poll_signal = self.safe_timeout_add(MEDIA_TIMEOUT * 1000,
- self._poll_for_media)
- self.add_gobject_timeout(self.poll_signal)
-
- def disable_poll_for_media(self):
- self.remove_gobject_timeout(self.poll_signal)
- self.poll_signal = None
-
- def _poll_for_media(self):
- if not self.poll_signal:
- return False
+ def tick(self):
if not self.nodedev_obj:
- return False
+ return
if not self.nodedev_obj.conn.is_active():
- return False
+ return
+
+ if (time.time() - self.last_tick) < MEDIA_TIMEOUT:
+ return
+ self.last_tick = time.time()
try:
self.nodedev_obj.refresh_xml()
xml = self.nodedev_obj.get_xml()
except:
# Assume the device was removed
- return False
+ return
try:
vobj = virtinst.NodeDeviceParser.parse(xml)
has_media = vobj.media_available
except:
logging.exception("Node device CDROM polling failed")
- return False
+ return
+
+ if has_media == self.has_media():
+ return
- if has_media != self.has_media():
- self.set_media(has_media, None, None)
- if has_media:
- self.emit("media-added")
- else:
- self.emit("media-removed")
+ self.set_media(has_media, None, None)
+ self.idle_emit(has_media and "media-added" or "media-removed")
- return True
vmmGObject.type_register(vmmMediaDevice)
vmmMediaDevice.signal_new(vmmMediaDevice, "media-added", [])

View File

@ -0,0 +1,22 @@
diff -rup virt-manager-0.9.1/src/vmm-preferences.glade new/src/vmm-preferences.glade
--- virt-manager-0.9.1/src/vmm-preferences.glade 2012-01-27 09:38:01.000000000 -0500
+++ new/src/vmm-preferences.glade 2012-02-13 19:05:22.890465706 -0500
@@ -398,8 +398,8 @@ Always</property>
<child>
<widget class="GtkLabel" id="label15">
<property name="visible">True</property>
- <property name="tooltip" translatable="yes">Force console menu accelerators while the console is active. Enabling this may overwrite keyboard interaction with the guest.</property>
- <property name="label" translatable="yes">Force console keyboard shortcuts:</property>
+ <property name="tooltip" translatable="yes">When the guest graphical console has keyboard focus, do not disable shortcuts for console window menus (Alt+F -&gt; File, etc.) Normally these are disabled to ensure that typing in the guest does not accidentally perform an operation in virt-manager's console window.</property>
+ <property name="label" translatable="yes">Don't disable console shortcuts:</property>
</widget>
<packing>
<property name="expand">False</property>
@@ -412,6 +412,7 @@ Always</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
+ <property name="tooltip" translatable="yes">When the guest graphical console has keyboard focus, do not disable shortcuts for console window menus (Alt+F -&gt; File, etc.) Normally these are disabled to ensure that typing in the guest does not accidentally perform an operation in virt-manager's console window.</property>
<signal name="toggled" handler="on_prefs_console_accels_toggled"/>
</widget>
<packing>

View File

@ -0,0 +1,24 @@
commit f12f4ea1980e68a12129922f456f9275ee897f65
Author: Cole Robinson <crobinso@redhat.com>
Date: Mon Feb 13 16:19:34 2012 -0500
create: reshow shouldn't overwrite values in visible dialog
diff --git a/src/virtManager/create.py b/src/virtManager/create.py
index 56d4e27..4d02922 100644
--- a/src/virtManager/create.py
+++ b/src/virtManager/create.py
@@ -169,9 +169,11 @@ class vmmCreate(vmmGObjectUI):
def show(self, parent, uri=None):
logging.debug("Showing new vm wizard")
- self.reset_state(uri)
- self.topwin.set_transient_for(parent)
+ if not self.is_visible():
+ self.reset_state(uri)
+ self.topwin.set_transient_for(parent)
+
self.topwin.present()
def close(self, ignore1=None, ignore2=None):

View File

@ -0,0 +1,101 @@
commit 54d007b2875a887b1579604e45b122dde286b9be
Author: Cole Robinson <crobinso@redhat.com>
Date: Thu Feb 2 16:45:18 2012 -0500
manager: Fix error reporting when can't connect remotely
Also rejigger the error building again to be more useful and
less scary in cases where we are pretty confident we know what the
problem is.
diff --git a/src/virtManager/manager.py b/src/virtManager/manager.py
index 2e8a679..a4b2df5 100644
--- a/src/virtManager/manager.py
+++ b/src/virtManager/manager.py
@@ -646,42 +646,55 @@ class vmmManager(vmmGObjectUI):
conn.open()
return True
- def _connect_error(self, conn, shortmsg, tb, warnconsole):
- shortmsg = shortmsg.strip(" \n")
+ def _connect_error(self, conn, errmsg, tb, warnconsole):
+ errmsg = errmsg.strip(" \n")
tb = tb.strip(" \n")
- msg = _("Unable to connect to libvirt:\n\n%s\n\n") % shortmsg
+ hint = ""
+ show_errmsg = True
+
+ if conn.is_remote():
+ logging.debug(conn.get_transport())
+ if re.search(r"nc: .* -- 'U'", tb):
+ hint += _("The remote host requires a version of netcat/nc\n"
+ "which supports the -U option.")
+ show_errmsg = False
+ elif conn.get_transport()[0] == "ssh" and re.search(r"ssh-askpass", tb):
+ hint += _("You need to install openssh-askpass or similar\n"
+ "to connect to this host.")
+ show_errmsg = False
+ else:
+ hint += _("Verify that the 'libvirtd' daemon is running\n"
+ "on the remote host.")
- if conn.is_xen() and not conn.is_remote():
- msg += _("Verify that:\n"
- " - A Xen host kernel was booted\n"
- " - The Xen service has been started\n")
- msg = msg.strip("\n")
- details = "%s\n\n%s" % (msg, tb)
+ elif conn.is_xen():
+ hint += _("Verify that:\n"
+ " - A Xen host kernel was booted\n"
+ " - The Xen service has been started")
else:
- hints = []
- if conn.is_remote() and re.search(r"nc: .* -- 'U'", details):
- hints.append(
- _("\n - The remote netcat understands the '-U' option"))
-
if warnconsole:
- msg += _("Could not detect a local session: if you are \n"
- "running virt-manager over ssh -X or VNC, you \n"
- "may not be able to connect to libvirt as a \n"
- "regular user. Try running as root.\n\n")
- else:
- msg += _("Verify that:\n" +
- " - The 'libvirtd' daemon has been started")
- for hint in hints:
- msg += hint
-
- msg = msg.strip("\n")
- details = (("%s\n\n" % msg) +
- (_("Libvirt URI is: %s\n\n") % conn.get_uri()) +
- tb)
-
- self.err.show_err(msg, details,
- title=_("Virtual Machine Manager Connection Failure"))
+ hint += _("Could not detect a local session: if you are \n"
+ "running virt-manager over ssh -X or VNC, you \n"
+ "may not be able to connect to libvirt as a \n"
+ "regular user. Try running as root.")
+ show_errmsg = False
+ elif re.search(r"libvirt-sock", tb):
+ hint += _("Verify that the 'libvirtd' daemon is running.")
+ show_errmsg = False
+
+ msg = _("Unable to connect to libvirt.")
+ if show_errmsg:
+ msg += "\n\n%s" % errmsg
+ if hint:
+ msg += "\n\n%s" % hint
+
+ msg = msg.strip("\n")
+ details = msg
+ details += "\n\n"
+ details += "Libvirt URI is: %s\n\n" % conn.get_uri()
+ details += tb
+
+ self.err.show_err(msg, details, title=_("Virtual Machine Manager Connection Failure"))
####################################

View File

@ -0,0 +1,22 @@
commit 265e04205e4766f459d4ced516dbd784cf2ca57f
Author: Cole Robinson <crobinso@redhat.com>
Date: Tue Feb 7 17:13:59 2012 -0500
Add VDI to disk format list
People actually distribute images in that format:
https://bugzilla.redhat.com/show_bug.cgi?id=761300
diff --git a/src/virtManager/uihelpers.py b/src/virtManager/uihelpers.py
index c274592..3ba4a71 100644
--- a/src/virtManager/uihelpers.py
+++ b/src/virtManager/uihelpers.py
@@ -397,6 +397,7 @@ def build_storage_format_combo(vm, combo):
formats = ["raw", "qcow2"]
if vm.rhel6_defaults():
formats.append("vmdk")
+ formats.append("vdi")
for m in formats:
dev_model.append([m])

View File

@ -0,0 +1,23 @@
commit c47fc5454039a9e7093f179c1e06ffc576dc1ad3
Author: Cole Robinson <crobinso@redhat.com>
Date: Mon Feb 6 17:57:14 2012 -0500
vnc: Fix accidental recursion we reporting grab keys
diff --git a/src/virtManager/console.py b/src/virtManager/console.py
index 3b39a6c..13fc755 100644
--- a/src/virtManager/console.py
+++ b/src/virtManager/console.py
@@ -387,12 +387,6 @@ class VNCViewer(Viewer):
def open_fd(self, fd):
self.display.open_fd(fd)
- def get_grab_keys(self):
- keystr = self.get_grab_keys()
- if not keystr:
- keystr = "Control_L+Alt_L"
- return keystr
-
def set_credential_username(self, cred):
self.display.set_credential(gtkvnc.CREDENTIAL_USERNAME, cred)

View File

@ -2,7 +2,7 @@
%define _package virt-manager
%define _version 0.9.1
%define _release 1
%define _release 2
%define virtinst_version 0.600.1
%define qemu_user "qemu"
@ -34,6 +34,18 @@ Group: Applications/Emulators
License: GPLv2+
URL: http://virt-manager.org/
Source0: http://virt-manager.org/download/sources/%{name}/%{name}-%{version}.tar.gz
# Fix error reporting for failed remote connections (bz 787011)
Patch1: %{name}-remote-error-reporting.patch
# Fix setting window title when VNC mouse is grabbed (bz 788443)
Patch2: %{name}-vnc-grab-recursion.patch
# Advertise VDI format in disk details (bz 761300)
Patch3: %{name}-vdi-format.patch
# Don't let an unavailable host hang the app (bz 766769)
Patch4: %{name}-conn-hang-app.patch
# Don't overwrite existing create dialog when reshowing (bz 754152)
Patch5: %{name}-create-reshow.patch
# Improve tooltip for 'force console shortcuts' (bz 788448)
Patch6: %{name}-console-shortcut-explanation.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
@ -142,6 +154,12 @@ Common files used by the different Virtual Machine Manager interfaces.
%prep
%setup -q
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%build
%if %{qemu_user}
@ -259,6 +277,14 @@ update-desktop-database -q %{_datadir}/applications
%endif
%changelog
* Mon Feb 13 2012 Cole Robinson <crobinso@redhat.com> - 0.9.1-2
- Fix error reporting for failed remote connections (bz 787011)
- Fix setting window title when VNC mouse is grabbed (bz 788443)
- Advertise VDI format in disk details (bz 761300)
- Don't let an unavailable host hang the app (bz 766769)
- Don't overwrite existing create dialog when reshowing (bz 754152)
- Improve tooltip for 'force console shortcuts' (bz 788448)
* Wed Feb 01 2012 Cole Robinson <crobinso@redhat.com> - 0.9.1-1
- Rebased to version 0.9.1
- Support for adding usb redirection devices (Marc-André Lureau)