At Tue, 1 Oct 2013 17:19:56 +0100,
Daniel P. Berrange wrote:
On Tue, Oct 01, 2013 at 06:13:10PM +0200, Viktor Mihajlovski wrote:
> On 10/01/2013 03:02 PM, Daniel P. Berrange wrote:
> >On Mon, Sep 30, 2013 at 04:24:49PM +0100, Daniel P. Berrange wrote:
> >>On Mon, Sep 30, 2013 at 05:23:33PM +0200, Michal Privoznik wrote:
> >>>On 30.09.2013 17:02, Claudio Bley wrote:
> >>>>Hi.
> >>>>
> >>>>When trying to do a screenshot of a remote domain connected via
> >>>>qemu+tcp (for testing purposes only), I receive this error:
> >>>>
>
>>>>----------------------------------------------------------------------
> >>>>virsh -c qemu+tcp://dev/system
> >>>>Welcome to virsh, the virtualization interactive terminal.
> >>>>
> >>>>Type: 'help' for help with commands
> >>>> 'quit' to quit
> >>>>
> >>>>virsh # version
> >>>>Compiled against library: libvir 0.9.8
> >>>>Using library: libvir 0.9.8
> >>>>Using API: QEMU 0.9.8
> >>>>Running hypervisor: QEMU 1.5.1
> >>>>
> >>>>virsh # screenshot 2 /tmp/screendump
> >>>>error: could not receive data from domain 2
> >>>>error: packet 1048600 bytes received from server too large, want
262144
> >>>>
> >>>>virsh # 2013-09-30 14:47:05.158+0000: 21646: info : libvirt version:
0.9.8
> >>>>2013-09-30 14:47:05.158+0000: 21646: warning :
virNetClientIncomingEvent:1660 : Something went wrong during async message processing
>
>>>>----------------------------------------------------------------------
> >>>>
> >>>>I'm using Ubuntu LTS 12.04.3, latest version in the repo which
is
> >>>>0.9.8-2ubuntu17.13.
> >>>
> >This problem was fixed in
> >
> >commit 27e81517a876dcb738dd8a9bb2e0e68d71c3b7e3
> >Author: Daniel P. Berrange <berrange(a)redhat.com>
> >Date: Mon Sep 30 17:27:51 2013 +0100
> >
> > Fix max stream packet size for old clients
> >
> > The libvirtd server pushes data out to clients. It does not
> > know what protocol version the client might have, so must be
> > conservative and use the old payload limits. ie send no more
> > than 256kb of data per packet.
> >
> >
> >And backported to stable branches.
> >
> I tried libvirt 1.1.3 containing the commit on the server and
> Ubuntu libvirt 0.9.8 as the client and still have the issue
> if the message is greater than 256KB. The problem is that
> the old client checks the message size during decode (which is
> greater than the client's max message size).
>
> Not sure how to get out of this ...
What were you doing to get a message greater than 256KB ? This
patch did not attempt to fix all possible combinations. If a
API call such as virConnectListAllDomains has so much data that
it requires > 256KB to encode, this fix won't solve that. There
is nothing we can do for API calls which have a genuine need to
exceed the old size limit.
I was only addressing the case of virStreamPtr data which was
mistakenly hardcoded in the server to try sending 16 MB of data
at once. I switched it to only try to send 256 KB of data per
stream packet.
I've also tested your patch, and it seems 256 KB of data is still a
bit too large:
virsh # screenshot 2 /tmp/test
error: could not receive data from domain 2
error: packet 262168 bytes received from server too large, want 262144
The max payload size is computed as:
VIR_NET_MESSAGE_MAX = 16777216
VIR_NET_MESSAGE_HEADER_MAX = 24
VIR_NET_MESSAGE_PAYLOAD_MAX = (VIR_NET_MESSAGE_MAX - VIR_NET_MESSAGE_HEADER_MAX) =
16777192
So, it seems the legacy max payload size is actually 262120; I tested
it and it works.
------------------- 8< ------ >8 ---------------------------
Subject: [PATCH] Adjust legacy max payload size to account for header
information
Organization: AV-Test GmbH, Germany
Commit 27e81517a87 set the payload size to 256 KB, which is
actually the max packet size, including the size of the header.
Reduce this by VIR_NET_MESSAGE_HEADER_MAX (24) and set
VIR_NET_MESSAGE_LEGACY_PAYLOAD_MAX to 262120.
Signed-off-by: Claudio Bley <cbley(a)av-test.de>
---
src/rpc/virnetprotocol.x | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/rpc/virnetprotocol.x b/src/rpc/virnetprotocol.x
index 1eae7cb..7b6f753 100644
--- a/src/rpc/virnetprotocol.x
+++ b/src/rpc/virnetprotocol.x
@@ -55,7 +55,7 @@ const VIR_NET_MESSAGE_INITIAL = 65536;
* payload size. We need to remember this for compat with
* old clients.
*/
-const VIR_NET_MESSAGE_LEGACY_PAYLOAD_MAX = 262144;
+const VIR_NET_MESSAGE_LEGACY_PAYLOAD_MAX = 262120;
/* Maximum total message size (serialised). */
const VIR_NET_MESSAGE_MAX = 16777216;
------------------- 8< ------ >8 ---------------------------
--
AV-Test GmbH, Henricistraße 20, 04155 Leipzig, Germany
Phone: +49 341 265 310 19
Web:<http://www.av-test.org>
Eingetragen am / Registered at: Amtsgericht Stendal (HRB 114076)
Geschaeftsfuehrer (CEO): Andreas Marx, Guido Habicht, Maik Morgenstern