]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Add new flag to daemonCreateClientStream and virNetClientStreamNew
authorMichal Privoznik <mprivozn@redhat.com>
Mon, 11 Apr 2016 14:50:04 +0000 (16:50 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 18 May 2017 05:42:13 +0000 (07:42 +0200)
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@redhat.com>
daemon/remote.c
daemon/stream.c
daemon/stream.h
src/remote/remote_driver.c
src/rpc/gendispatch.pl
src/rpc/virnetclientstream.c
src/rpc/virnetclientstream.h

index 0dbb250ff01819e51b719a8846760869013e93cb..fd854212003c51a390bd88389faf7892ed96def4 100644 (file)
@@ -5323,7 +5323,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,
index 11c0a469d53e288efd2221ca73329c1d06538b8c..6465463ff9eb7025877f65b55e178021c31c22fb 100644 (file)
@@ -52,6 +52,8 @@ struct daemonClientStream {
     virNetMessagePtr rx;
     bool tx;
 
+    bool allowSkip;
+
     daemonClientStreamPtr next;
 };
 
@@ -321,7 +323,8 @@ daemonClientStream *
 daemonCreateClientStream(virNetServerClientPtr client,
                          virStreamPtr st,
                          virNetServerProgramPtr prog,
-                         virNetMessageHeaderPtr header)
+                         virNetMessageHeaderPtr header,
+                         bool allowSkip)
 {
     daemonClientStream *stream;
     daemonClientPrivatePtr priv = virNetServerClientGetPrivateData(client);
@@ -339,6 +342,7 @@ daemonCreateClientStream(virNetServerClientPtr client,
     stream->serial = header->serial;
     stream->filterID = -1;
     stream->st = st;
+    stream->allowSkip = allowSkip;
 
     return stream;
 }
index cf76e717ab373f4917a9939ede98428523f4b751..e1f1067595019dcd39c653363102421e3efd32e2 100644 (file)
@@ -30,7 +30,8 @@ daemonClientStream *
 daemonCreateClientStream(virNetServerClientPtr client,
                          virStreamPtr st,
                          virNetServerProgramPtr prog,
-                         virNetMessageHeaderPtr hdr);
+                         virNetMessageHeaderPtr hdr,
+                         bool allowSkip);
 
 int daemonFreeClientStream(virNetServerClientPtr client,
                            daemonClientStream *stream);
index b152be523d355895e572e4b7a13acbc757c0cf8d..aebdd47c9f3990d30e5e69190f3b94aaf984df1f 100644 (file)
@@ -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) {
index e608812cebcee1e52c57206cce16d6bfc9717c65..98625983a37b30b0c320dc3bf9c45ed88a8d3698 100755 (executable)
@@ -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";
index 9a44304b7c146f64896c5b4e51ee4bba0b434d49..10515895f40c9d3c9315cbd8811696253cae09d7 100644 (file)
@@ -54,6 +54,8 @@ struct _virNetClientStream {
     virNetMessagePtr rx;
     bool incomingEOF;
 
+    bool allowSkip;
+
     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 allowSkip)
 {
     virNetClientStreamPtr st;
 
@@ -152,6 +155,7 @@ virNetClientStreamPtr virNetClientStreamNew(virStreamPtr stream,
     st->prog = virObjectRef(prog);
     st->proc = proc;
     st->serial = serial;
+    st->allowSkip = allowSkip;
 
     return st;
 }
index e278dab85e20fae9de60356f515902d3edd828bc..f3bc0672b4c01fda82eb2d800116fedd9b933d65 100644 (file)
@@ -35,7 +35,8 @@ typedef void (*virNetClientStreamEventCallback)(virNetClientStreamPtr stream,
 virNetClientStreamPtr virNetClientStreamNew(virStreamPtr stream,
                                             virNetClientProgramPtr prog,
                                             int proc,
-                                            unsigned serial);
+                                            unsigned serial,
+                                            bool allowSkip);
 
 bool virNetClientStreamRaiseError(virNetClientStreamPtr st);