All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pavel Hrdina <phrdina@redhat.com>
To: Luiz Capitulino <lcapitulino@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 35/35] docs: writing-qmp-commands.txt: update error section
Date: Wed, 08 Aug 2012 14:35:23 +0200	[thread overview]
Message-ID: <50225D0B.6060206@redhat.com> (raw)
In-Reply-To: <1344354826-10375-36-git-send-email-lcapitulino@redhat.com>

On 08/07/2012 05:53 PM, Luiz Capitulino wrote:
> Add information about the new error format and improve the text a bit.
>
> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
> ---
>   docs/writing-qmp-commands.txt | 47 +++++++++++++++++++++++++------------------
>   1 file changed, 27 insertions(+), 20 deletions(-)
>
> diff --git a/docs/writing-qmp-commands.txt b/docs/writing-qmp-commands.txt
> index 0ad51aa..10ecd97 100644
> --- a/docs/writing-qmp-commands.txt
> +++ b/docs/writing-qmp-commands.txt
> @@ -210,19 +210,17 @@ if you don't see these strings, then something went wrong.
>   === Errors ===
>   
>   QMP commands should use the error interface exported by the error.h header
> -file. The basic function used to set an error is the error_set() one.
> +file. Basically, errors are set by calling the error_set() function.
>   
>   Let's say we don't accept the string "message" to contain the word "love". If
> -it does contain it, we want the "hello-world" command to the return the
> -InvalidParameter error.
> -
> -Only one change is required, and it's in the C implementation:
> +it does contain it, we want the "hello-world" command to return an error:
>   
>   void qmp_hello_world(bool has_message, const char *message, Error **errp)
>   {
>       if (has_message) {
>           if (strstr(message, "love")) {
> -            error_set(errp, QERR_INVALID_PARAMETER, "message");
> +            error_set(errp, ERROR_CLASS_GENERIC_ERROR,
> +                      "the word 'love' is not allowed");
>               return;
>           }
>           printf("%s\n", message);
> @@ -231,30 +229,40 @@ void qmp_hello_world(bool has_message, const char *message, Error **errp)
>       }
>   }
>   
> -Let's test it. Build qemu, run it as defined in the "Testing" section, and
> -then issue the following command:
> +The first argument to the error_set() function is the Error pointer to pointer,
> +which is passed to all QMP functions. The second argument is a ErrorClass
> +value, which should be ERROR_CLASS_GENERIC_ERROR most of the time (more
> +details about error classes are given below). The third argument is a human
> +description of the error, this is a free-form printf-like string.
> +
> +Let's test the example above. Build qemu, run it as defined in the "Testing"
> +section, and then issue the following command:
>   
> -{ "execute": "hello-world", "arguments": { "message": "we love qemu" } }
> +{ "execute": "hello-world", "arguments": { "message": "all you need is love" } }
>   
>   The QMP server's response should be:
>   
>   {
>       "error": {
> -        "class": "InvalidParameter",
> -        "desc": "Invalid parameter 'message'",
> -        "data": {
> -            "name": "message"
> -        }
> +        "class": "GenericError",

you have here trailing white-space  ^

> +        "desc": "the word 'love' is not allowed"
>       }
>   }
>   
> -Which is the InvalidParameter error.
> +As a general rule, all QMP errors should use ERROR_CLASS_GENERIC_ERROR. There
> +are two exceptions to this rule:
> +
> + 1. A non-generic ErrorClass value exists* for the failure you want to report
> +    (eg. DeviceNotFound)
> +
> + 2. Management applications have to take special action on the failure you
> +    want to report, hence you have to add a new ErrorClass value so that they
> +    can check for it
>   
> -When you have to return an error but you're unsure what error to return or
> -which arguments an error takes, you should look at the qerror.h file. Note
> -that you might be required to add new errors if needed.
> +If the failure you want to report doesn't fall in one of the two cases above,
> +just report ERROR_CLASS_GENERIC_ERROR.
>   
> -FIXME: describe better the error API and how to add new errors.
> + * All existing ErrorClass values are defined in the qapi-schema.json file
>   
>   === Command Documentation ===
>   
> @@ -275,7 +283,6 @@ here goes "hello-world"'s new entry for the qapi-schema.json file:
>   # @message: #optional string to be printed
>   #
>   # Returns: Nothing on success.
> -#          If @message contains "love", InvalidParameter
>   #
>   # Notes: if @message is not provided, the "Hello, world" string will
>   #        be printed instead

  reply	other threads:[~2012-08-08 12:35 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-07 15:53 [Qemu-devel] [PATCH v2 00/35]: add new error format Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 01/35] monitor: drop unused monitor debug code Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 02/35] qerror: QERR_AMBIGUOUS_PATH: drop %(object) from human msg Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 03/35] qerror: QERR_DEVICE_ENCRYPTED: change error message Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 04/35] qerror: reduce public exposure Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 05/35] qerror: drop qerror_abort() Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 06/35] qerror: avoid passing qerr pointer Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 07/35] qerror: QError: drop file, linenr, func Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 08/35] qerror: qerror_format(): return an allocated string Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 09/35] qerror: don't delay error message construction Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 10/35] error: " Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 11/35] qmp: query-block: add 'valid_encryption_key' field Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 12/35] hmp: hmp_cont(): don't rely on QERR_DEVICE_ENCRYPTED Luiz Capitulino
2012-08-10  8:43   ` Markus Armbruster
2012-08-07 15:53 ` [Qemu-devel] [PATCH 13/35] hmp_change(): don't access DeviceEncrypted's data Luiz Capitulino
2012-08-10  9:02   ` Markus Armbruster
2012-08-10 14:36     ` Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 14/35] net: inet_connect(), inet_connect_opts(): add in_progress argument Luiz Capitulino
2012-08-10  9:07   ` Markus Armbruster
2012-08-10 14:47     ` Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 15/35] migration: don't rely on any QERR_SOCKET_* Luiz Capitulino
2012-08-10  9:13   ` Markus Armbruster
2012-08-10 14:49     ` Luiz Capitulino
2012-08-14 11:19     ` Juan Quintela
2012-08-14 11:35       ` Markus Armbruster
2012-08-14 13:06         ` Luiz Capitulino
2012-08-14 13:09         ` Juan Quintela
2012-08-07 15:53 ` [Qemu-devel] [PATCH 16/35] qerror: drop QERR_SOCKET_CONNECT_IN_PROGRESS Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 17/35] block: block_int: include qerror.h Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 18/35] hmp: hmp.h: include qdict.h Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 19/35] qapi: qapi-types.h: don't include qapi/qapi-types-core.h Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 20/35] qapi: generate correct enum names for camel case enums Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 21/35] qapi: don't convert enum strings to lowercase Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 22/35] qapi-schema: add ErrorClass enum Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 23/35] qerror: qerror_table: don't use C99 struct initializers Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 24/35] error, qerror: add ErrorClass argument to error functions Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 25/35] qerror: add proper ErrorClass value for QERR_ macros Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 26/35] error: add error_get_class() Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 27/35] hmp: hmp_change(): use error_get_class() Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 28/35] error: drop unused functions Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 29/35] qmp: switch to the new error format on the wire Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 30/35] qemu-ga: " Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 31/35] error: drop error_get_qobject()/error_set_qobject() Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 32/35] error, qerror: pass desc string to error calls Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 33/35] qerror: drop qerror_table and qerror_format() Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 34/35] error, qerror: drop QDict member Luiz Capitulino
2012-08-07 15:53 ` [Qemu-devel] [PATCH 35/35] docs: writing-qmp-commands.txt: update error section Luiz Capitulino
2012-08-08 12:35   ` Pavel Hrdina [this message]
2012-08-08 13:26     ` Luiz Capitulino
  -- strict thread matches above, loose matches on Subject: below --
2012-08-10 17:43 [Qemu-devel] [PATCH v3 00/35]: add new error format Luiz Capitulino
2012-08-10 17:44 ` [Qemu-devel] [PATCH 35/35] docs: writing-qmp-commands.txt: update error section Luiz Capitulino

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50225D0B.6060206@redhat.com \
    --to=phrdina@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.