diff mbox series

[v2] qapi/qmp-dispatch: Fix error class for reporting disabled commands

Message ID faeb030e6a1044f0fd88208edfdb1c5fafe5def9.1567171655.git.mprivozn@redhat.com (mailing list archive)
State New, archived
Headers show
Series [v2] qapi/qmp-dispatch: Fix error class for reporting disabled commands | expand

Commit Message

Michal Prívozník Aug. 30, 2019, 1:29 p.m. UTC
If a command is disabled an error is reported. But due to usage
of error_setg() the class of the error is GenericError which does
not help callers in distinguishing this case from a case where a
qmp command fails regularly due to other reasons. Use
CommandNotFound error class which is much closer to the actual
root cause.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
---

This is a v2 of:

https://lists.nongnu.org/archive/html/qemu-devel/2019-08/msg06327.html

Comments

Eric Blake Aug. 30, 2019, 1:49 p.m. UTC | #1
On 8/30/19 8:29 AM, Michal Privoznik wrote:
> If a command is disabled an error is reported. But due to usage
> of error_setg() the class of the error is GenericError which does
> not help callers in distinguishing this case from a case where a
> qmp command fails regularly due to other reasons. Use
> CommandNotFound error class which is much closer to the actual
> root cause.
> 
> Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
> ---
> 
> This is a v2 of:
> 
> https://lists.nongnu.org/archive/html/qemu-devel/2019-08/msg06327.html
> 
> diff to v1:
> - Don't introduce new error class (CommandDisabled)
> - Use CommandNotFound error class
> 

Reviewed-by: Eric Blake <eblake@redhat.com>
Markus Armbruster Sept. 13, 2019, 12:52 p.m. UTC | #2
Michal Privoznik <mprivozn@redhat.com> writes:

> If a command is disabled an error is reported. But due to usage
> of error_setg() the class of the error is GenericError which does
> not help callers in distinguishing this case from a case where a
> qmp command fails regularly due to other reasons. Use
> CommandNotFound error class which is much closer to the actual
> root cause.
>
> Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
> ---

I'd like to tweak the commit message a bit:

  qmp-dispatch: Use CommandNotFound error for disabled commands

  If a command is disabled an error is reported.  But due to usage of
  error_setg() the class of the error is GenericError which does not
  help callers in distinguishing this case from a case where a qmp
  command fails regularly due to other reasons.

  We used to use class CommandDisabled until the great error
  simplification (commit de253f1491 for QMP and commit 93b91c59db for
  qemu-ga, both v1.2.0).

  Use CommandNotFound error class, which is close enough.

Objections?
Michal Prívozník Sept. 13, 2019, 1:52 p.m. UTC | #3
On 9/13/19 2:52 PM, Markus Armbruster wrote:
> Michal Privoznik <mprivozn@redhat.com> writes:
> 
>> If a command is disabled an error is reported. But due to usage
>> of error_setg() the class of the error is GenericError which does
>> not help callers in distinguishing this case from a case where a
>> qmp command fails regularly due to other reasons. Use
>> CommandNotFound error class which is much closer to the actual
>> root cause.
>>
>> Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
>> ---
> 
> I'd like to tweak the commit message a bit:
> 
>    qmp-dispatch: Use CommandNotFound error for disabled commands
> 
>    If a command is disabled an error is reported.  But due to usage of
>    error_setg() the class of the error is GenericError which does not
>    help callers in distinguishing this case from a case where a qmp
>    command fails regularly due to other reasons.
> 
>    We used to use class CommandDisabled until the great error
>    simplification (commit de253f1491 for QMP and commit 93b91c59db for
>    qemu-ga, both v1.2.0).
> 
>    Use CommandNotFound error class, which is close enough.
> 
> Objections?
> 

None, thanks for taking care of this.

Michal
Markus Armbruster Sept. 13, 2019, 6:41 p.m. UTC | #4
Michal Privoznik <mprivozn@redhat.com> writes:

> On 9/13/19 2:52 PM, Markus Armbruster wrote:
>> Michal Privoznik <mprivozn@redhat.com> writes:
>>
>>> If a command is disabled an error is reported. But due to usage
>>> of error_setg() the class of the error is GenericError which does
>>> not help callers in distinguishing this case from a case where a
>>> qmp command fails regularly due to other reasons. Use
>>> CommandNotFound error class which is much closer to the actual
>>> root cause.
>>>
>>> Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
>>> ---
>>
>> I'd like to tweak the commit message a bit:
>>
>>    qmp-dispatch: Use CommandNotFound error for disabled commands
>>
>>    If a command is disabled an error is reported.  But due to usage of
>>    error_setg() the class of the error is GenericError which does not
>>    help callers in distinguishing this case from a case where a qmp
>>    command fails regularly due to other reasons.
>>
>>    We used to use class CommandDisabled until the great error
>>    simplification (commit de253f1491 for QMP and commit 93b91c59db for
>>    qemu-ga, both v1.2.0).
>>
>>    Use CommandNotFound error class, which is close enough.
>>
>> Objections?
>>
>
> None, thanks for taking care of this.

Need to squash in:

diff --git a/tests/test-qga.c b/tests/test-qga.c
index 891aa3d322..1ca49bbced 100644
--- a/tests/test-qga.c
+++ b/tests/test-qga.c
@@ -668,7 +668,7 @@ static void test_qga_blacklist(gconstpointer data)
     error = qdict_get_qdict(ret, "error");
     class = qdict_get_try_str(error, "class");
     desc = qdict_get_try_str(error, "desc");
-    g_assert_cmpstr(class, ==, "GenericError");
+    g_assert_cmpstr(class, ==, "CommandNotFound");
     g_assert_nonnull(g_strstr_len(desc, -1, "has been disabled"));
     qobject_unref(ret);
 
@@ -677,7 +677,7 @@ static void test_qga_blacklist(gconstpointer data)
     error = qdict_get_qdict(ret, "error");
     class = qdict_get_try_str(error, "class");
     desc = qdict_get_try_str(error, "desc");
-    g_assert_cmpstr(class, ==, "GenericError");
+    g_assert_cmpstr(class, ==, "CommandNotFound");
     g_assert_nonnull(g_strstr_len(desc, -1, "has been disabled"));
     qobject_unref(ret);
Markus Armbruster Sept. 24, 2019, 12:33 p.m. UTC | #5
Markus Armbruster <armbru@redhat.com> writes:

> Michal Privoznik <mprivozn@redhat.com> writes:
>
>> On 9/13/19 2:52 PM, Markus Armbruster wrote:
>>> Michal Privoznik <mprivozn@redhat.com> writes:
>>>
>>>> If a command is disabled an error is reported. But due to usage
>>>> of error_setg() the class of the error is GenericError which does
>>>> not help callers in distinguishing this case from a case where a
>>>> qmp command fails regularly due to other reasons. Use
>>>> CommandNotFound error class which is much closer to the actual
>>>> root cause.
>>>>
>>>> Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
>>>> ---
>>>
>>> I'd like to tweak the commit message a bit:
>>>
>>>    qmp-dispatch: Use CommandNotFound error for disabled commands
>>>
>>>    If a command is disabled an error is reported.  But due to usage of
>>>    error_setg() the class of the error is GenericError which does not
>>>    help callers in distinguishing this case from a case where a qmp
>>>    command fails regularly due to other reasons.
>>>
>>>    We used to use class CommandDisabled until the great error
>>>    simplification (commit de253f1491 for QMP and commit 93b91c59db for
>>>    qemu-ga, both v1.2.0).
>>>
>>>    Use CommandNotFound error class, which is close enough.
>>>
>>> Objections?
>>>
>>
>> None, thanks for taking care of this.
>
> Need to squash in:
>
> diff --git a/tests/test-qga.c b/tests/test-qga.c
> index 891aa3d322..1ca49bbced 100644
> --- a/tests/test-qga.c
> +++ b/tests/test-qga.c
> @@ -668,7 +668,7 @@ static void test_qga_blacklist(gconstpointer data)
>      error = qdict_get_qdict(ret, "error");
>      class = qdict_get_try_str(error, "class");
>      desc = qdict_get_try_str(error, "desc");
> -    g_assert_cmpstr(class, ==, "GenericError");
> +    g_assert_cmpstr(class, ==, "CommandNotFound");
>      g_assert_nonnull(g_strstr_len(desc, -1, "has been disabled"));
>      qobject_unref(ret);
>  
> @@ -677,7 +677,7 @@ static void test_qga_blacklist(gconstpointer data)
>      error = qdict_get_qdict(ret, "error");
>      class = qdict_get_try_str(error, "class");
>      desc = qdict_get_try_str(error, "desc");
> -    g_assert_cmpstr(class, ==, "GenericError");
> +    g_assert_cmpstr(class, ==, "CommandNotFound");
>      g_assert_nonnull(g_strstr_len(desc, -1, "has been disabled"));
>      qobject_unref(ret);
>  

I tried to include the amended patch in today's pull request, but
observed "make check" hangs with it.
Markus Armbruster Sept. 24, 2019, 2:45 p.m. UTC | #6
Markus Armbruster <armbru@redhat.com> writes:

> I tried to include the amended patch in today's pull request, but
> observed "make check" hangs with it.

False alarm: I just got a hang on master.  I intend to include this
patch in my next pull request.  Sorry for the delay.
diff mbox series

Patch

diff to v1:
- Don't introduce new error class (CommandDisabled)
- Use CommandNotFound error class

 qapi/qmp-dispatch.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/qapi/qmp-dispatch.c b/qapi/qmp-dispatch.c
index 3037d353a4..bc264b3c9b 100644
--- a/qapi/qmp-dispatch.c
+++ b/qapi/qmp-dispatch.c
@@ -104,8 +104,9 @@  static QObject *do_qmp_dispatch(QmpCommandList *cmds, QObject *request,
         return NULL;
     }
     if (!cmd->enabled) {
-        error_setg(errp, "The command %s has been disabled for this instance",
-                   command);
+        error_set(errp, ERROR_CLASS_COMMAND_NOT_FOUND,
+                  "The command %s has been disabled for this instance",
+                  command);
         return NULL;
     }
     if (oob && !(cmd->options & QCO_ALLOW_OOB)) {