[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [RFC PATCH v2 00/17] Add support for qemu-xen runnning in a Linux-based stubdomain.



On Thu, Nov 01, 2018 at 06:32:07PM +0100, Marek Marczykowski-Górecki wrote:
> On Thu, Nov 01, 2018 at 04:57:18PM +0000, Ian Jackson wrote:
> > Marek Marczykowski-Górecki writes ("Re: [RFC PATCH v2 00/17] Add support 
> > for qemu-xen runnning in a Linux-based stubdomain."):
> > > 2. pv console
> > >   pros:
> > >    - no qemu modifications
> > >    - same read()/write() on libxl side
> > >   cons:
> > >    - no out of band reset, needs libxl handling for that (skipping
> > >      negotiation)
> > 
> > Doesn't this potentially mean that the qmp console connection can
> > become irrecoverably desynchronised ?  I don't know how you would
> > recover from the situation where another libxl process had got halfway
> > through some qmp stuff and been terminated (for whatever reason; maybe
> > the calling toolstack crashed).
> 
> That's right, it could result in irrecoverably desynchronised
> connection. So, we need out of band reset.

Actually, it looks like we can recover that situation without out of
band reset. It's even in the spec[1]:

  2.7 QGA Synchronization
  -----------------------

  When a client connects to QGA over a transport lacking proper
  connection semantics such as virtio-serial, QGA may have read partial
  input from a previous client.  The client needs to force QGA's parser
  into known-good state using the previous section's technique.
  Moreover, the client may receive output a previous client didn't read.
  To help with skipping that output, QGA provides the
  'guest-sync-delimited' command.  Refer to its documentation for
  details.

previous section:
  2.6 Forcing the JSON parser into known-good state
  -------------------------------------------------

  Incomplete or invalid input can leave the server's JSON parser in a
  state where it can't parse additional commands.  To get it back into
  known-good state, the client should provoke a lexical error.

  The cleanest way to do that is sending an ASCII control character
  other than '\t' (horizontal tab), '\r' (carriage return), or '\n' (new
  line).

  Sadly, older versions of QEMU can fail to flag this as an error.  If a
  client needs to deal with them, it should send a 0xFF byte.

[1] 
https://git.qemu.org/?p=qemu.git;a=blob;f=docs/interop/qmp-spec.txt;h=8f7da0245d51447be7df2b3d4b105bad9fbec0b3;hb=HEAD#l231

-- 
Anthony PERARD

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.