If we exceed a fixed limit in RPC code we get a horrible message
like this, if the parameter type is a 'string', because we forgot
to initialize the error message type field:
$ virsh snapshot-list ostack1
error: too many remote undefineds: 1329 > 1024
It would also be useful to know which RPC call and field was
exceeded. So this patch makes us report:
$ virsh snapshot-list ostack1
error: too many remote undefineds: 1329 > 1024,
in parameter 'names' for 'virDomainSnapshotListNames'
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
src/rpc/gendispatch.pl | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
index 173189c..0c5e4ba 100755
--- a/src/rpc/gendispatch.pl
+++ b/src/rpc/gendispatch.pl
@@ -1501,6 +1501,7 @@ elsif ($mode eq "client") {
$single_ret_list_name = $1;
$single_ret_list_max_var = "max$1";
$single_ret_list_max_define = $2;
+ $single_ret_list_error_msg_type = "string";
} elsif ($ret_member =~ m/^(admin|remote)_nonnull_string
(\S+)<\S+>;/) {
# error out on unannotated arrays
die "$1_nonnull_string array without insert@<offset>
annotation: $ret_member";
@@ -1773,7 +1774,8 @@ elsif ($mode eq "client") {
print "\n";
print " if ($single_ret_list_max_var >
$single_ret_list_max_define) {\n";
print " virReportError(VIR_ERR_RPC,\n";
- print " _(\"too many remote
${single_ret_list_error_msg_type}s: %d > %d\"),\n";
+ print " _(\"too many remote
${single_ret_list_error_msg_type}s: %d > %d,\"\n";
+ print " \"in parameter
'$single_ret_list_name' for 'vir$call->{ProcName}'\"),\n";
print " $single_ret_list_max_var,
$single_ret_list_max_define);\n";
print " goto done;\n";
print " }\n";
@@ -1839,7 +1841,8 @@ elsif ($mode eq "client") {
$modern_ret_as_list) {
print " if (ret.$single_ret_list_name.${single_ret_list_name}_len
> $single_ret_list_max_var) {\n";
print " virReportError(VIR_ERR_RPC,\n";
- print " _(\"too many remote
${single_ret_list_error_msg_type}s: %d > %d\"),\n";
+ print " _(\"too many remote
${single_ret_list_error_msg_type}s: %d > %d,\"\n";
+ print " \"in parameter
'$single_ret_list_name' for 'vir$call->{ProcName}'\"),\n";
print "
ret.$single_ret_list_name.${single_ret_list_name}_len,
$single_ret_list_max_var);\n";
print " goto cleanup;\n";
print " }\n";
--
2.9.3