From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:52785) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TYYkx-0005a9-Fr for qemu-devel@nongnu.org; Wed, 14 Nov 2012 03:55:38 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TYYku-0000gv-DG for qemu-devel@nongnu.org; Wed, 14 Nov 2012 03:55:35 -0500 Received: from mail-ea0-f173.google.com ([209.85.215.173]:40621) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TYYku-0000gq-6u for qemu-devel@nongnu.org; Wed, 14 Nov 2012 03:55:32 -0500 Received: by mail-ea0-f173.google.com with SMTP id i13so82478eaa.4 for ; Wed, 14 Nov 2012 00:55:31 -0800 (PST) Sender: Paolo Bonzini Message-ID: <50A35C81.2020602@redhat.com> Date: Wed, 14 Nov 2012 09:55:29 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <50A313A5.8030500@linux.vnet.ibm.com> <50A314EE.6080801@linux.vnet.ibm.com> In-Reply-To: <50A314EE.6080801@linux.vnet.ibm.com> Content-Type: text/plain; charset=GB2312 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RFC] libqblock OOM issue List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Wenchao Xia Cc: Kevin Wolf , Stefan Hajnoczi , Anthony Liguori , qemu-devel , Blue Swirl Il 14/11/2012 04:50, Wenchao Xia ha scritto: > There are some different way to implement, not sure which would be > better: > 1 keep client as thin as possible, client stores opaque pointer used > in server side, for eg, QBlockContext *ctx, client only get a pointer > pointing to the address where server stores really the object. This > have risk when server/client crash and reconnect. > 2 client and server maintains index for QBlockContext and QBlockState. > 3 thick client and server layer, expose all structure details in .x > file, each API have a correspond rpc call. .x file may be complex. > 4 define a custom protocol on XDR, like libvirt, this may need many > code in server/client side. > > also with method 1-3, Consider wrapping following API: > int qb_context_new(QBlockContext **context); What is the return value of qb_context_new? Can it simply return QBlockContext*? > The parameter context is a pointer that will be modified, it seems > sunrpc does not transfer back modified parameter by server to client, so > I need to define a structure as > struct qb_context_new_ret { > int ret; > int opaque_len; > char *opaque_val; > } > and use that as rpc call's return structure. In this way each API > wrapped need a new defined internal structure make things complicate. > so I am wondering if there is a better way to do it. Surely not all of the APIs return structs this way, however... Paolo