提交 3c9ba9c1 编写于 作者: D Daniel P. Berrangé

rpc: refactor way connection object is generated for remote dispatch

Calling a push_privconn method to directly push the connection object
name into the arg list is inconvenient. Refactor so that we acquire
the connection variable name upfront, and push it to the arg list
separately. This allows various hardcoded usage of "priv->conn" to
be parameterized.
Reviewed-by: NJohn Ferlan <jferlan@redhat.com>
Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
上级 c09c3408
...@@ -110,19 +110,13 @@ sub name_to_TypeName { ...@@ -110,19 +110,13 @@ sub name_to_TypeName {
return $typename; return $typename;
} }
sub push_privconn { sub get_conn_arg {
my $args = shift; if ($structprefix eq "admin") {
return "priv->dmn";
if (!@$args) {
if ($structprefix eq "admin") {
push(@$args, "priv->dmn");
} else {
push(@$args, "priv->conn");
}
} }
return "priv->conn";
} }
# Read the input file (usually remote_protocol.x) and form an # Read the input file (usually remote_protocol.x) and form an
# opinion about the name, args and return type of each RPC. # opinion about the name, args and return type of each RPC.
my ($name, $ProcName, $id, $flags, %calls, @calls, %opts); my ($name, $ProcName, $id, $flags, %calls, @calls, %opts);
...@@ -487,6 +481,8 @@ elsif ($mode eq "server") { ...@@ -487,6 +481,8 @@ elsif ($mode eq "server") {
my @free_list = (); my @free_list = ();
my @free_list_on_error = ("virNetMessageSaveError(rerr);"); my @free_list_on_error = ("virNetMessageSaveError(rerr);");
my $conn = get_conn_arg();
# handle arguments to the function # handle arguments to the function
if ($argtype ne "void") { if ($argtype ne "void") {
# node device is special, as it's identified by name # node device is special, as it's identified by name
...@@ -497,7 +493,7 @@ elsif ($mode eq "server") { ...@@ -497,7 +493,7 @@ elsif ($mode eq "server") {
$has_node_device = 1; $has_node_device = 1;
push(@vars_list, "virNodeDevicePtr dev = NULL"); push(@vars_list, "virNodeDevicePtr dev = NULL");
push(@getters_list, push(@getters_list,
" if (!(dev = virNodeDeviceLookupByName(priv->conn, args->name)))\n" . " if (!(dev = virNodeDeviceLookupByName($conn, args->name)))\n" .
" goto cleanup;\n"); " goto cleanup;\n");
push(@args_list, "dev"); push(@args_list, "dev");
push(@free_list, push(@free_list,
...@@ -513,7 +509,7 @@ elsif ($mode eq "server") { ...@@ -513,7 +509,7 @@ elsif ($mode eq "server") {
push(@vars_list, "vir${type_name}Ptr $2 = NULL"); push(@vars_list, "vir${type_name}Ptr $2 = NULL");
push(@getters_list, push(@getters_list,
" if (!($2 = get_nonnull_$1(priv->conn, args->$2)))\n" . " if (!($2 = get_nonnull_$1($conn, args->$2)))\n" .
" goto cleanup;\n"); " goto cleanup;\n");
push(@args_list, "$2"); push(@args_list, "$2");
push(@free_list, push(@free_list,
...@@ -522,7 +518,7 @@ elsif ($mode eq "server") { ...@@ -522,7 +518,7 @@ elsif ($mode eq "server") {
push(@vars_list, "virDomainPtr dom = NULL"); push(@vars_list, "virDomainPtr dom = NULL");
push(@vars_list, "virDomainSnapshotPtr snapshot = NULL"); push(@vars_list, "virDomainSnapshotPtr snapshot = NULL");
push(@getters_list, push(@getters_list,
" if (!(dom = get_nonnull_domain(priv->conn, args->${1}.dom)))\n" . " if (!(dom = get_nonnull_domain($conn, args->${1}.dom)))\n" .
" goto cleanup;\n" . " goto cleanup;\n" .
"\n" . "\n" .
" if (!(snapshot = get_nonnull_domain_snapshot(dom, args->${1})))\n" . " if (!(snapshot = get_nonnull_domain_snapshot(dom, args->${1})))\n" .
...@@ -532,11 +528,11 @@ elsif ($mode eq "server") { ...@@ -532,11 +528,11 @@ elsif ($mode eq "server") {
" virObjectUnref(snapshot);\n" . " virObjectUnref(snapshot);\n" .
" virObjectUnref(dom);"); " virObjectUnref(dom);");
} elsif ($args_member =~ m/^(?:(?:admin|remote)_string|remote_uuid) (\S+)<\S+>;/) { } elsif ($args_member =~ m/^(?:(?:admin|remote)_string|remote_uuid) (\S+)<\S+>;/) {
push_privconn(\@args_list); push(@args_list, $conn) if !@args_list;
push(@args_list, "args->$1.$1_val"); push(@args_list, "args->$1.$1_val");
push(@args_list, "args->$1.$1_len"); push(@args_list, "args->$1.$1_len");
} elsif ($args_member =~ m/^(?:opaque|(?:admin|remote)_nonnull_string) (\S+)<\S+>;(.*)$/) { } elsif ($args_member =~ m/^(?:opaque|(?:admin|remote)_nonnull_string) (\S+)<\S+>;(.*)$/) {
push_privconn(\@args_list); push(@args_list, $conn) if !@args_list;
my $cast = ""; my $cast = "";
my $arg_name = $1; my $arg_name = $1;
...@@ -553,7 +549,7 @@ elsif ($mode eq "server") { ...@@ -553,7 +549,7 @@ elsif ($mode eq "server") {
push(@args_list, "${cast}args->$arg_name.${arg_name}_val"); push(@args_list, "${cast}args->$arg_name.${arg_name}_val");
push(@args_list, "args->$arg_name.${arg_name}_len"); push(@args_list, "args->$arg_name.${arg_name}_len");
} elsif ($args_member =~ m/^(?:unsigned )?int (\S+)<\S+>;/) { } elsif ($args_member =~ m/^(?:unsigned )?int (\S+)<\S+>;/) {
push_privconn(\@args_list); push(@args_list, $conn) if !@args_list;
push(@args_list, "args->$1.$1_val"); push(@args_list, "args->$1.$1_val");
push(@args_list, "args->$1.$1_len"); push(@args_list, "args->$1.$1_len");
...@@ -561,7 +557,7 @@ elsif ($mode eq "server") { ...@@ -561,7 +557,7 @@ elsif ($mode eq "server") {
push(@vars_list, "virTypedParameterPtr $1 = NULL"); push(@vars_list, "virTypedParameterPtr $1 = NULL");
push(@vars_list, "int n$1 = 0"); push(@vars_list, "int n$1 = 0");
if ($call->{ProcName} eq "NodeSetMemoryParameters") { if ($call->{ProcName} eq "NodeSetMemoryParameters") {
push(@args_list, "priv->conn"); push(@args_list, "$conn");
} }
push(@args_list, "$1"); push(@args_list, "$1");
push(@args_list, "n$1"); push(@args_list, "n$1");
...@@ -576,25 +572,25 @@ elsif ($mode eq "server") { ...@@ -576,25 +572,25 @@ elsif ($mode eq "server") {
# just make all other array types fail # just make all other array types fail
die "unhandled type for argument value: $args_member"; die "unhandled type for argument value: $args_member";
} elsif ($args_member =~ m/^remote_uuid (\S+);/) { } elsif ($args_member =~ m/^remote_uuid (\S+);/) {
push_privconn(\@args_list); push(@args_list, $conn) if !@args_list;
push(@args_list, "(unsigned char *) args->$1"); push(@args_list, "(unsigned char *) args->$1");
} elsif ($args_member =~ m/^(?:admin|remote)_string (\S+);/) { } elsif ($args_member =~ m/^(?:admin|remote)_string (\S+);/) {
push_privconn(\@args_list); push(@args_list, $conn) if !@args_list;
push(@vars_list, "char *$1"); push(@vars_list, "char *$1");
push(@optionals_list, "$1"); push(@optionals_list, "$1");
push(@args_list, "$1"); push(@args_list, "$1");
} elsif ($args_member =~ m/^(?:admin|remote)_nonnull_string (\S+);/) { } elsif ($args_member =~ m/^(?:admin|remote)_nonnull_string (\S+);/) {
push_privconn(\@args_list); push(@args_list, $conn) if !@args_list;
push(@args_list, "args->$1"); push(@args_list, "args->$1");
} elsif ($args_member =~ m/^(unsigned )?int (\S+);/) { } elsif ($args_member =~ m/^(unsigned )?int (\S+);/) {
push_privconn(\@args_list); push(@args_list, $conn) if !@args_list;
push(@args_list, "args->$2"); push(@args_list, "args->$2");
} elsif ($args_member =~ m/^(unsigned )?hyper (\S+);/) { } elsif ($args_member =~ m/^(unsigned )?hyper (\S+);/) {
push_privconn(\@args_list); push(@args_list, $conn) if !@args_list;
my $arg_name = $2; my $arg_name = $2;
...@@ -613,7 +609,7 @@ elsif ($mode eq "server") { ...@@ -613,7 +609,7 @@ elsif ($mode eq "server") {
push(@vars_list, "virNet${type_name}Ptr $2 = NULL"); push(@vars_list, "virNet${type_name}Ptr $2 = NULL");
push(@getters_list, push(@getters_list,
" if (!($2 = get_nonnull_$1(priv->dmn, args->$2)))\n" . " if (!($2 = get_nonnull_$1($conn, args->$2)))\n" .
" goto cleanup;\n"); " goto cleanup;\n");
push(@args_list, "$2"); push(@args_list, "$2");
push(@free_list, push(@free_list,
...@@ -624,7 +620,7 @@ elsif ($mode eq "server") { ...@@ -624,7 +620,7 @@ elsif ($mode eq "server") {
push(@vars_list, "virNetServerPtr srv = NULL"); push(@vars_list, "virNetServerPtr srv = NULL");
push(@vars_list, "virNetServer${type_name}Ptr $2 = NULL"); push(@vars_list, "virNetServer${type_name}Ptr $2 = NULL");
push(@getters_list, push(@getters_list,
" if (!(srv = get_nonnull_server(priv->dmn, args->$2.srv)))\n" . " if (!(srv = get_nonnull_server($conn, args->$2.srv)))\n" .
" goto cleanup;\n"); " goto cleanup;\n");
push(@getters_list, push(@getters_list,
" if (!($2 = get_nonnull_$1(srv, args->$2)))\n" . " if (!($2 = get_nonnull_$1(srv, args->$2)))\n" .
...@@ -900,7 +896,7 @@ elsif ($mode eq "server") { ...@@ -900,7 +896,7 @@ elsif ($mode eq "server") {
# select struct type for multi-return-value functions # select struct type for multi-return-value functions
if ($multi_ret) { if ($multi_ret) {
if (defined $call->{ret_offset}) { if (defined $call->{ret_offset}) {
push_privconn(\@args_list); push(@args_list, $conn) if !@args_list;
if ($modern_ret_as_list) { if ($modern_ret_as_list) {
my $struct_name = name_to_TypeName($modern_ret_struct_name); my $struct_name = name_to_TypeName($modern_ret_struct_name);
...@@ -999,12 +995,7 @@ elsif ($mode eq "server") { ...@@ -999,12 +995,7 @@ elsif ($mode eq "server") {
print "\n"; print "\n";
if ($structprefix eq "admin") { print " if (!$conn) {\n";
print " if (!priv->dmn) {\n";
} else {
print " if (!priv->conn) {\n";
}
print " virReportError(VIR_ERR_INTERNAL_ERROR, \"%s\", _(\"connection not open\"));\n"; print " virReportError(VIR_ERR_INTERNAL_ERROR, \"%s\", _(\"connection not open\"));\n";
print " goto cleanup;\n"; print " goto cleanup;\n";
print " }\n"; print " }\n";
...@@ -1034,7 +1025,7 @@ elsif ($mode eq "server") { ...@@ -1034,7 +1025,7 @@ elsif ($mode eq "server") {
} }
if ($call->{streamflag} ne "none") { if ($call->{streamflag} ne "none") {
print " if (!(st = virStreamNew(priv->conn, VIR_STREAM_NONBLOCK)))\n"; print " if (!(st = virStreamNew($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, sparse)))\n"; print " if (!(stream = daemonCreateClientStream(client, st, remoteProgram, &msg->header, sparse)))\n";
...@@ -1051,7 +1042,7 @@ elsif ($mode eq "server") { ...@@ -1051,7 +1042,7 @@ elsif ($mode eq "server") {
} elsif (!$multi_ret) { } elsif (!$multi_ret) {
my $proc_name = $call->{ProcName}; my $proc_name = $call->{ProcName};
push_privconn(\@args_list); push(@args_list, $conn) if !@args_list;
if ($structprefix eq "qemu" && if ($structprefix eq "qemu" &&
$call->{ProcName} =~ /^(Connect)?Domain/) { $call->{ProcName} =~ /^(Connect)?Domain/) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册