mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 14:45:24 +00:00
gendispatch: Introduce @sparseflag for our calls
Now, not all APIs are going to support sparse streams. To some it makes no sense at all, e.g. virDomainOpenConsole() or virDomainOpenChannel(). To others, we will need a special flag to indicate that client wants to enable sparse streams. Instead of having to write RPC dispatchers by hand we can just annotate in our .x files that a certain flag to certain RPC call enables this feature. For instance: /** * @generate: both * @readstream: 1 * @sparseflag: VIR_SPARSE_STREAM * @acl: storage_vol:data_read */ REMOTE_PROC_DOMAIN_SOME_API = XXX, Therefore, whenever client calls virDomainSomeAPI(.., VIR_SPARSE_STREAM); daemon will mark that down and send stream skips when possible. Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
895479647b
commit
8f08f28f74
@ -281,6 +281,13 @@ while (<PROTOCOL>) {
|
||||
$calls{$name}->{streamflag} = "none";
|
||||
}
|
||||
|
||||
if (exists $opts{sparseflag}) {
|
||||
die "\@sparseflag requires stream" unless $calls{$name}->{streamflag} ne "none";
|
||||
$calls{$name}->{sparseflag} = $opts{sparseflag};
|
||||
} else {
|
||||
$calls{$name}->{sparseflag} = "none";
|
||||
}
|
||||
|
||||
$calls{$name}->{acl} = $opts{acl};
|
||||
$calls{$name}->{aclfilter} = $opts{aclfilter};
|
||||
|
||||
@ -982,6 +989,11 @@ elsif ($mode eq "server") {
|
||||
if ($call->{streamflag} ne "none") {
|
||||
print " virStreamPtr st = NULL;\n";
|
||||
print " daemonClientStreamPtr stream = NULL;\n";
|
||||
if ($call->{sparseflag} ne "none") {
|
||||
print " const bool sparse = args->flags & $call->{sparseflag};\n"
|
||||
} else {
|
||||
print " const bool sparse = false;\n";
|
||||
}
|
||||
}
|
||||
|
||||
print "\n";
|
||||
@ -1024,7 +1036,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, false)))\n";
|
||||
print " if (!(stream = daemonCreateClientStream(client, st, remoteProgram, &msg->header, sparse)))\n";
|
||||
print " goto cleanup;\n";
|
||||
print "\n";
|
||||
}
|
||||
@ -1727,6 +1739,11 @@ elsif ($mode eq "client") {
|
||||
|
||||
if ($call->{streamflag} ne "none") {
|
||||
print " virNetClientStreamPtr netst = NULL;\n";
|
||||
if ($call->{sparseflag} ne "none") {
|
||||
print " const bool sparse = flags & $call->{sparseflag};\n"
|
||||
} else {
|
||||
print " const bool sparse = false;\n";
|
||||
}
|
||||
}
|
||||
|
||||
print "\n";
|
||||
@ -1738,7 +1755,7 @@ elsif ($mode eq "client") {
|
||||
|
||||
if ($call->{streamflag} ne "none") {
|
||||
print "\n";
|
||||
print " if (!(netst = virNetClientStreamNew(st, priv->remoteProgram, $call->{constname}, priv->counter, false)))\n";
|
||||
print " if (!(netst = virNetClientStreamNew(st, priv->remoteProgram, $call->{constname}, priv->counter, sparse)))\n";
|
||||
print " goto done;\n";
|
||||
print "\n";
|
||||
print " if (virNetClientAddStream(priv->client, netst) < 0) {\n";
|
||||
|
Loading…
Reference in New Issue
Block a user