[libvirt] [PATCH v2 18/38] Track if stream is skippable

John Ferlan jferlan at redhat.com
Thu May 4 22:02:43 UTC 2017


$subj:

Add new flag to daemonCreateClientStream and virNetClientStreamNew


FWIW:

Kind of a big hit, but neither skippable nor skipable passes muster with
spell check. How about using "allowSkip" for the name.

On 04/20/2017 06:01 AM, Michal Privoznik wrote:
> Even though there's no way to make stream skippable right now,
> it is going to be soon. We need to track this info so that we
> don't send virStreamSkip to a client that did not want it or vice
> versa.
> 

Consider:

Add a new argument to daemonCreateClientStream in order to allow for
future expansion to mark that a specific stream can be used to skip
data, such as the case with sparsely populated files. The new flag will
be the eventual decision point between client/server to decide whether
both ends can support and want to use sparse streams.

A new bool 'allowSkip' is added to both _virNetClientStream and
daemonClientStream in order to perform the tracking.


> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  daemon/remote.c              | 2 +-
>  daemon/stream.c              | 6 +++++-
>  daemon/stream.h              | 3 ++-
>  src/remote/remote_driver.c   | 6 ++++--
>  src/rpc/gendispatch.pl       | 4 ++--
>  src/rpc/virnetclientstream.c | 6 +++++-
>  src/rpc/virnetclientstream.h | 3 ++-
>  7 files changed, 21 insertions(+), 9 deletions(-)
> 
> diff --git a/daemon/remote.c b/daemon/remote.c
> index 1610fea..fbd5ba2 100644
> --- a/daemon/remote.c
> +++ b/daemon/remote.c
> @@ -5373,7 +5373,7 @@ remoteDispatchDomainMigratePrepareTunnel3Params(virNetServerPtr server ATTRIBUTE
>  
>      if (!(st = virStreamNew(priv->conn, VIR_STREAM_NONBLOCK)) ||
>          !(stream = daemonCreateClientStream(client, st, remoteProgram,
> -                                            &msg->header)))
> +                                            &msg->header, false)))
>          goto cleanup;
>  
>      if (virDomainMigratePrepareTunnel3Params(priv->conn, st, params, nparams,
> diff --git a/daemon/stream.c b/daemon/stream.c
> index 11c0a46..624a626 100644
> --- a/daemon/stream.c
> +++ b/daemon/stream.c
> @@ -52,6 +52,8 @@ struct daemonClientStream {
>      virNetMessagePtr rx;
>      bool tx;
>  
> +    bool skippable;

s/skippable/allowSkip

> +
>      daemonClientStreamPtr next;
>  };
>  
> @@ -321,7 +323,8 @@ daemonClientStream *
>  daemonCreateClientStream(virNetServerClientPtr client,
>                           virStreamPtr st,
>                           virNetServerProgramPtr prog,
> -                         virNetMessageHeaderPtr header)
> +                         virNetMessageHeaderPtr header,
> +                         bool skippable)

name change

>  {
>      daemonClientStream *stream;
>      daemonClientPrivatePtr priv = virNetServerClientGetPrivateData(client);
> @@ -339,6 +342,7 @@ daemonCreateClientStream(virNetServerClientPtr client,
>      stream->serial = header->serial;
>      stream->filterID = -1;
>      stream->st = st;
> +    stream->skippable = skippable;
>  
>      return stream;
>  }
> diff --git a/daemon/stream.h b/daemon/stream.h
> index cf76e71..bf5dc24 100644
> --- a/daemon/stream.h
> +++ b/daemon/stream.h
> @@ -30,7 +30,8 @@ daemonClientStream *
>  daemonCreateClientStream(virNetServerClientPtr client,
>                           virStreamPtr st,
>                           virNetServerProgramPtr prog,
> -                         virNetMessageHeaderPtr hdr);
> +                         virNetMessageHeaderPtr hdr,
> +                         bool seekable);

seekable!  name change anyway.

>  
>  int daemonFreeClientStream(virNetServerClientPtr client,
>                             daemonClientStream *stream);
> diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
> index 7024464..6a2c6f6 100644
> --- a/src/remote/remote_driver.c
> +++ b/src/remote/remote_driver.c
> @@ -6173,7 +6173,8 @@ remoteDomainMigratePrepareTunnel3(virConnectPtr dconn,
>      if (!(netst = virNetClientStreamNew(st,
>                                          priv->remoteProgram,
>                                          REMOTE_PROC_DOMAIN_MIGRATE_PREPARE_TUNNEL3,
> -                                        priv->counter)))
> +                                        priv->counter,
> +                                        false)))
>          goto done;
>  
>      if (virNetClientAddStream(priv->client, netst) < 0) {
> @@ -7098,7 +7099,8 @@ remoteDomainMigratePrepareTunnel3Params(virConnectPtr dconn,
>      if (!(netst = virNetClientStreamNew(st,
>                                          priv->remoteProgram,
>                                          REMOTE_PROC_DOMAIN_MIGRATE_PREPARE_TUNNEL3_PARAMS,
> -                                        priv->counter)))
> +                                        priv->counter,
> +                                        false)))
>          goto cleanup;
>  
>      if (virNetClientAddStream(priv->client, netst) < 0) {
> diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
> index e608812..9862598 100755
> --- a/src/rpc/gendispatch.pl
> +++ b/src/rpc/gendispatch.pl
> @@ -1024,7 +1024,7 @@ elsif ($mode eq "server") {
>              print "    if (!(st = virStreamNew(priv->conn, VIR_STREAM_NONBLOCK)))\n";
>              print "        goto cleanup;\n";
>              print "\n";
> -            print "    if (!(stream = daemonCreateClientStream(client, st, remoteProgram, &msg->header)))\n";
> +            print "    if (!(stream = daemonCreateClientStream(client, st, remoteProgram, &msg->header, false)))\n";
>              print "        goto cleanup;\n";
>              print "\n";
>          }
> @@ -1738,7 +1738,7 @@ elsif ($mode eq "client") {
>  
>          if ($call->{streamflag} ne "none") {
>              print "\n";
> -            print "    if (!(netst = virNetClientStreamNew(st, priv->remoteProgram, $call->{constname}, priv->counter)))\n";
> +            print "    if (!(netst = virNetClientStreamNew(st, priv->remoteProgram, $call->{constname}, priv->counter, false)))\n";
>              print "        goto done;\n";
>              print "\n";
>              print "    if (virNetClientAddStream(priv->client, netst) < 0) {\n";
> diff --git a/src/rpc/virnetclientstream.c b/src/rpc/virnetclientstream.c
> index 01761cf..42619bf 100644
> --- a/src/rpc/virnetclientstream.c
> +++ b/src/rpc/virnetclientstream.c
> @@ -54,6 +54,8 @@ struct _virNetClientStream {
>      virNetMessagePtr rx;
>      bool incomingEOF;
>  
> +    bool skippable; /* User requested skippable stream */
> +

s/skippable/allowSkip

Not sure comment is necessary...  It wasn't added to the other structure.

>      virNetClientStreamEventCallback cb;
>      void *cbOpaque;
>      virFreeCallback cbFree;
> @@ -138,7 +140,8 @@ virNetClientStreamEventTimer(int timer ATTRIBUTE_UNUSED, void *opaque)
>  virNetClientStreamPtr virNetClientStreamNew(virStreamPtr stream,
>                                              virNetClientProgramPtr prog,
>                                              int proc,
> -                                            unsigned serial)
> +                                            unsigned serial,
> +                                            bool skippable)

name change

>  {
>      virNetClientStreamPtr st;
>  
> @@ -152,6 +155,7 @@ virNetClientStreamPtr virNetClientStreamNew(virStreamPtr stream,
>      st->prog = virObjectRef(prog);
>      st->proc = proc;
>      st->serial = serial;
> +    st->skippable = skippable;
>  
>      return st;
>  }
> diff --git a/src/rpc/virnetclientstream.h b/src/rpc/virnetclientstream.h
> index e278dab..0a5aafd 100644
> --- a/src/rpc/virnetclientstream.h
> +++ b/src/rpc/virnetclientstream.h
> @@ -35,7 +35,8 @@ typedef void (*virNetClientStreamEventCallback)(virNetClientStreamPtr stream,
>  virNetClientStreamPtr virNetClientStreamNew(virStreamPtr stream,
>                                              virNetClientProgramPtr prog,
>                                              int proc,
> -                                            unsigned serial);
> +                                            unsigned serial,
> +                                            bool seekable);

"seekable"?  !!


ACK w/ name adjustment. This too seems separable.

John


>  
>  bool virNetClientStreamRaiseError(virNetClientStreamPtr st);
>  
> 




More information about the libvir-list mailing list