On Mon, Apr 7, 2014 at 3:37 PM, Apollon Oikonomopoulos <[email protected]>wrote:
> Store the set of supported QMP commands in > QmpConnection.supported_commands. This allows selective error handling > to give the caller a change to downgrade to HMP when unsupported > s/change/chance/ > commands are encountered. > > The `query-commands` QMP command used to implement this, appeared in > QEMU 0.14.0 together with QMP itself, so it is supported by all > instances featuring a QMP monitor. > > Signed-off-by: Apollon Oikonomopoulos <[email protected]> > --- > lib/hypervisor/hv_kvm/monitor.py | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/lib/hypervisor/hv_kvm/monitor.py > b/lib/hypervisor/hv_kvm/monitor.py > index 6a7ff3a..fc6fac9 100644 > --- a/lib/hypervisor/hv_kvm/monitor.py > +++ b/lib/hypervisor/hv_kvm/monitor.py > @@ -183,11 +183,13 @@ class QmpConnection(MonitorSocket): > _EXECUTE_KEY = "execute" > _ARGUMENTS_KEY = "arguments" > _CAPABILITIES_COMMAND = "qmp_capabilities" > + _QUERY_COMMANDS = "query-commands" > _MESSAGE_END_TOKEN = "\r\n" > > def __init__(self, monitor_filename): > super(QmpConnection, self).__init__(monitor_filename) > self._buf = "" > + self.supported_commands = frozenset() > > def __enter__(self): > self.connect() > @@ -222,6 +224,7 @@ class QmpConnection(MonitorSocket): > # command, or else no command will be executable. > # (As per the QEMU Protocol Specification 0.1 - section 4) > self.Execute(self._CAPABILITIES_COMMAND) > + self.supported_commands = self._GetSupportedCommands() > > def _ParseMessage(self, buf): > """Extract and parse a QMP message from the given buffer. > @@ -306,6 +309,13 @@ class QmpConnection(MonitorSocket): > raise errors.HypervisorError("Unable to send data from KVM using > the" > " QMP protocol: %s" % err) > > + def _GetSupportedCommands(self): > + """Update the list of supported commands. > + > + """ > + result = self.Execute(self._QUERY_COMMANDS) > + return frozenset(com["name"] for com in result[self._RETURN_KEY]) > + > def Execute(self, command, arguments=None): > """Executes a QMP command and returns the response of the server. > > -- > 1.9.1 > > Rest LGTM, I'll fix the type while submiting. Thanks, Thomas -- Thomas Thrainer | Software Engineer | [email protected] | Google Germany GmbH Dienerstr. 12 80331 München Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg Geschäftsführer: Graham Law, Christine Elizabeth Flores
