Add new flag to daemonCreateClientStream and virNetClientStreamNew
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>
This commit is contained in:
parent
8b6ffe4077
commit
5f4f9d87a9
@ -5323,7 +5323,7 @@ remoteDispatchDomainMigratePrepareTunnel3Params(virNetServerPtr server ATTRIBUTE
|
|||||||
|
|
||||||
if (!(st = virStreamNew(priv->conn, VIR_STREAM_NONBLOCK)) ||
|
if (!(st = virStreamNew(priv->conn, VIR_STREAM_NONBLOCK)) ||
|
||||||
!(stream = daemonCreateClientStream(client, st, remoteProgram,
|
!(stream = daemonCreateClientStream(client, st, remoteProgram,
|
||||||
&msg->header)))
|
&msg->header, false)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (virDomainMigratePrepareTunnel3Params(priv->conn, st, params, nparams,
|
if (virDomainMigratePrepareTunnel3Params(priv->conn, st, params, nparams,
|
||||||
|
@ -52,6 +52,8 @@ struct daemonClientStream {
|
|||||||
virNetMessagePtr rx;
|
virNetMessagePtr rx;
|
||||||
bool tx;
|
bool tx;
|
||||||
|
|
||||||
|
bool allowSkip;
|
||||||
|
|
||||||
daemonClientStreamPtr next;
|
daemonClientStreamPtr next;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -321,7 +323,8 @@ daemonClientStream *
|
|||||||
daemonCreateClientStream(virNetServerClientPtr client,
|
daemonCreateClientStream(virNetServerClientPtr client,
|
||||||
virStreamPtr st,
|
virStreamPtr st,
|
||||||
virNetServerProgramPtr prog,
|
virNetServerProgramPtr prog,
|
||||||
virNetMessageHeaderPtr header)
|
virNetMessageHeaderPtr header,
|
||||||
|
bool allowSkip)
|
||||||
{
|
{
|
||||||
daemonClientStream *stream;
|
daemonClientStream *stream;
|
||||||
daemonClientPrivatePtr priv = virNetServerClientGetPrivateData(client);
|
daemonClientPrivatePtr priv = virNetServerClientGetPrivateData(client);
|
||||||
@ -339,6 +342,7 @@ daemonCreateClientStream(virNetServerClientPtr client,
|
|||||||
stream->serial = header->serial;
|
stream->serial = header->serial;
|
||||||
stream->filterID = -1;
|
stream->filterID = -1;
|
||||||
stream->st = st;
|
stream->st = st;
|
||||||
|
stream->allowSkip = allowSkip;
|
||||||
|
|
||||||
return stream;
|
return stream;
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,8 @@ daemonClientStream *
|
|||||||
daemonCreateClientStream(virNetServerClientPtr client,
|
daemonCreateClientStream(virNetServerClientPtr client,
|
||||||
virStreamPtr st,
|
virStreamPtr st,
|
||||||
virNetServerProgramPtr prog,
|
virNetServerProgramPtr prog,
|
||||||
virNetMessageHeaderPtr hdr);
|
virNetMessageHeaderPtr hdr,
|
||||||
|
bool allowSkip);
|
||||||
|
|
||||||
int daemonFreeClientStream(virNetServerClientPtr client,
|
int daemonFreeClientStream(virNetServerClientPtr client,
|
||||||
daemonClientStream *stream);
|
daemonClientStream *stream);
|
||||||
|
@ -6173,7 +6173,8 @@ remoteDomainMigratePrepareTunnel3(virConnectPtr dconn,
|
|||||||
if (!(netst = virNetClientStreamNew(st,
|
if (!(netst = virNetClientStreamNew(st,
|
||||||
priv->remoteProgram,
|
priv->remoteProgram,
|
||||||
REMOTE_PROC_DOMAIN_MIGRATE_PREPARE_TUNNEL3,
|
REMOTE_PROC_DOMAIN_MIGRATE_PREPARE_TUNNEL3,
|
||||||
priv->counter)))
|
priv->counter,
|
||||||
|
false)))
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
if (virNetClientAddStream(priv->client, netst) < 0) {
|
if (virNetClientAddStream(priv->client, netst) < 0) {
|
||||||
@ -7098,7 +7099,8 @@ remoteDomainMigratePrepareTunnel3Params(virConnectPtr dconn,
|
|||||||
if (!(netst = virNetClientStreamNew(st,
|
if (!(netst = virNetClientStreamNew(st,
|
||||||
priv->remoteProgram,
|
priv->remoteProgram,
|
||||||
REMOTE_PROC_DOMAIN_MIGRATE_PREPARE_TUNNEL3_PARAMS,
|
REMOTE_PROC_DOMAIN_MIGRATE_PREPARE_TUNNEL3_PARAMS,
|
||||||
priv->counter)))
|
priv->counter,
|
||||||
|
false)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (virNetClientAddStream(priv->client, netst) < 0) {
|
if (virNetClientAddStream(priv->client, netst) < 0) {
|
||||||
|
@ -1024,7 +1024,7 @@ elsif ($mode eq "server") {
|
|||||||
print " if (!(st = virStreamNew(priv->conn, VIR_STREAM_NONBLOCK)))\n";
|
print " if (!(st = virStreamNew(priv->conn, VIR_STREAM_NONBLOCK)))\n";
|
||||||
print " goto cleanup;\n";
|
print " goto cleanup;\n";
|
||||||
print "\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 " goto cleanup;\n";
|
||||||
print "\n";
|
print "\n";
|
||||||
}
|
}
|
||||||
@ -1738,7 +1738,7 @@ elsif ($mode eq "client") {
|
|||||||
|
|
||||||
if ($call->{streamflag} ne "none") {
|
if ($call->{streamflag} ne "none") {
|
||||||
print "\n";
|
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 " goto done;\n";
|
||||||
print "\n";
|
print "\n";
|
||||||
print " if (virNetClientAddStream(priv->client, netst) < 0) {\n";
|
print " if (virNetClientAddStream(priv->client, netst) < 0) {\n";
|
||||||
|
@ -54,6 +54,8 @@ struct _virNetClientStream {
|
|||||||
virNetMessagePtr rx;
|
virNetMessagePtr rx;
|
||||||
bool incomingEOF;
|
bool incomingEOF;
|
||||||
|
|
||||||
|
bool allowSkip;
|
||||||
|
|
||||||
virNetClientStreamEventCallback cb;
|
virNetClientStreamEventCallback cb;
|
||||||
void *cbOpaque;
|
void *cbOpaque;
|
||||||
virFreeCallback cbFree;
|
virFreeCallback cbFree;
|
||||||
@ -138,7 +140,8 @@ virNetClientStreamEventTimer(int timer ATTRIBUTE_UNUSED, void *opaque)
|
|||||||
virNetClientStreamPtr virNetClientStreamNew(virStreamPtr stream,
|
virNetClientStreamPtr virNetClientStreamNew(virStreamPtr stream,
|
||||||
virNetClientProgramPtr prog,
|
virNetClientProgramPtr prog,
|
||||||
int proc,
|
int proc,
|
||||||
unsigned serial)
|
unsigned serial,
|
||||||
|
bool allowSkip)
|
||||||
{
|
{
|
||||||
virNetClientStreamPtr st;
|
virNetClientStreamPtr st;
|
||||||
|
|
||||||
@ -152,6 +155,7 @@ virNetClientStreamPtr virNetClientStreamNew(virStreamPtr stream,
|
|||||||
st->prog = virObjectRef(prog);
|
st->prog = virObjectRef(prog);
|
||||||
st->proc = proc;
|
st->proc = proc;
|
||||||
st->serial = serial;
|
st->serial = serial;
|
||||||
|
st->allowSkip = allowSkip;
|
||||||
|
|
||||||
return st;
|
return st;
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,8 @@ typedef void (*virNetClientStreamEventCallback)(virNetClientStreamPtr stream,
|
|||||||
virNetClientStreamPtr virNetClientStreamNew(virStreamPtr stream,
|
virNetClientStreamPtr virNetClientStreamNew(virStreamPtr stream,
|
||||||
virNetClientProgramPtr prog,
|
virNetClientProgramPtr prog,
|
||||||
int proc,
|
int proc,
|
||||||
unsigned serial);
|
unsigned serial,
|
||||||
|
bool allowSkip);
|
||||||
|
|
||||||
bool virNetClientStreamRaiseError(virNetClientStreamPtr st);
|
bool virNetClientStreamRaiseError(virNetClientStreamPtr st);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user