On Thu, Jun 10, 2010 at 11:16:14AM -0600, Eric Blake wrote: > * src/remote/remote_driver.c (remoteDomainCreate): Rewrite to take > 1 RPC instead of 2 when talking to newer server, at expense of 3 > RPC instead of 2 for older server. > --- > > I had already started coding this, but then Daniel Berrange > reminded me off-list that changing existing API just for a > minor optimization in the number of RPC calls is not a good > idea: clients (like virsh) are already free to do the optimization > themselves, and libvirt RPC calls tend not to be the critical > path in the system in the first place. > > So, I'm posting this to have it archived, before nuking the > commit from my repo. > > src/remote/remote_driver.c | 20 ++++++++++++++++++++ > 1 files changed, 20 insertions(+), 0 deletions(-) > > diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c > index 7052bf1..a613ead 100644 > --- a/src/remote/remote_driver.c > +++ b/src/remote/remote_driver.c > @@ -3001,6 +3001,8 @@ static int > remoteDomainCreate (virDomainPtr domain) > { > int rv = -1; > + remote_domain_create_with_flags_args args0; > + remote_domain_create_with_flags_ret ret0; > remote_domain_create_args args; > remote_domain_lookup_by_uuid_args args2; > remote_domain_lookup_by_uuid_ret ret2; > @@ -3008,6 +3010,24 @@ remoteDomainCreate (virDomainPtr domain) > > remoteDriverLock(priv); > > + /* First, try the newer API, for fewer call()s. */ > + make_nonnull_domain (&args0.dom, domain); > + args0.flags = 0; > + > + memset (&ret0, 0, sizeof ret0); > + if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_CREATE_WITH_FLAGS, > + (xdrproc_t) xdr_remote_domain_create_with_flags_args, > + (char *) &args0, > + (xdrproc_t) xdr_remote_domain_create_with_flags_ret, > + (char *) &ret0) == 0) { > + domain->id = ret0.dom.id; > + xdr_free ((xdrproc_t) &xdr_remote_domain_create_with_flags_ret, > + (char *) &ret0); > + rv = 0; > + goto done; > + } > + > + /* Fall back to the older 2-call sequence. */ > make_nonnull_domain (&args.dom, domain); > > if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_CREATE, NACK, this is not required. The existing method is guarenteed to always exist, so there is no benefit to calling the new method & it adds an extra RPC call when talking to old servers Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list