All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [RFC v3 0/3]  Implement a warning_report function
@ 2017-07-05 17:36 Alistair Francis
  2017-07-05 17:36 ` [Qemu-devel] [RFC v3 1/3] util/qemu-error: Rename error_print_loc() to be more generic Alistair Francis
                   ` (2 more replies)
  0 siblings, 3 replies; 16+ messages in thread
From: Alistair Francis @ 2017-07-05 17:36 UTC (permalink / raw)
  To: qemu-devel; +Cc: alistair.francis, alistair23, philippe, berrange, armbru

QEMU currently has a standard method to report errors with
error_repot(). This ensure a sane and standard format when printing
errors. This series is attempting to extend this functionality for
warnings and information as well.

At the moment only one error is being converted, I wanted to get the
implementation nailed down a little bit before I started converting
others.

This patch renames error_print_loc() function to be more clear, but I
didn't bother renaming the others. It seems silly to change
error_printf() to error_warning_printf() and printf is already taken so
I just left it as is.

I also didn't change the current error output as that would probably
break backwards compatibilty for anyone who is parsing logs.

RFCv3:
 - Use more detailed enum and function names
 - Add wrapper functions for the info and warning reporting
RFCv2:
 - Use enums for ERROR, WARN and INFO with a generic report() function
   instead of adding new functions

Alistair Francis (3):
  util/qemu-error: Rename error_print_loc() to be more generic
  qemu-error: Implement a more generic error reporting
  char-socket: Report TCP socket waiting as information

 chardev/char-socket.c       |  4 +--
 include/qemu/error-report.h | 16 +++++++++
 scripts/checkpatch.pl       |  8 ++++-
 util/qemu-error.c           | 84 ++++++++++++++++++++++++++++++++++++++++++---
 4 files changed, 104 insertions(+), 8 deletions(-)

-- 
2.11.0

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Qemu-devel] [RFC v3 1/3] util/qemu-error: Rename error_print_loc() to be more generic
  2017-07-05 17:36 [Qemu-devel] [RFC v3 0/3] Implement a warning_report function Alistair Francis
@ 2017-07-05 17:36 ` Alistair Francis
  2017-07-06  2:36   ` Thomas Huth
  2017-07-05 17:36 ` [Qemu-devel] [RFC v3 2/3] qemu-error: Implement a more generic error reporting Alistair Francis
  2017-07-05 17:36 ` [Qemu-devel] [RFC v3 3/3] char-socket: Report TCP socket waiting as information Alistair Francis
  2 siblings, 1 reply; 16+ messages in thread
From: Alistair Francis @ 2017-07-05 17:36 UTC (permalink / raw)
  To: qemu-devel; +Cc: alistair.francis, alistair23, philippe, berrange, armbru

Rename the error_print_loc() function in preparation for using it to
print warnings as well.

Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---

 util/qemu-error.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/util/qemu-error.c b/util/qemu-error.c
index b331f8f4a4..1c5e35ecdb 100644
--- a/util/qemu-error.c
+++ b/util/qemu-error.c
@@ -146,7 +146,7 @@ const char *error_get_progname(void)
 /*
  * Print current location to current monitor if we have one, else to stderr.
  */
-static void error_print_loc(void)
+static void print_loc(void)
 {
     const char *sep = "";
     int i;
@@ -197,7 +197,7 @@ void error_vreport(const char *fmt, va_list ap)
         g_free(timestr);
     }
 
-    error_print_loc();
+    print_loc();
     error_vprintf(fmt, ap);
     error_printf("\n");
 }
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [RFC v3 2/3] qemu-error: Implement a more generic error reporting
  2017-07-05 17:36 [Qemu-devel] [RFC v3 0/3] Implement a warning_report function Alistair Francis
  2017-07-05 17:36 ` [Qemu-devel] [RFC v3 1/3] util/qemu-error: Rename error_print_loc() to be more generic Alistair Francis
@ 2017-07-05 17:36 ` Alistair Francis
  2017-07-06  2:42   ` Thomas Huth
  2017-07-06  6:15   ` Markus Armbruster
  2017-07-05 17:36 ` [Qemu-devel] [RFC v3 3/3] char-socket: Report TCP socket waiting as information Alistair Francis
  2 siblings, 2 replies; 16+ messages in thread
From: Alistair Francis @ 2017-07-05 17:36 UTC (permalink / raw)
  To: qemu-devel; +Cc: alistair.francis, alistair23, philippe, berrange, armbru

This patch converts the existing error_vreport() function into a generic
qmesg_vreport() function that takes an enum describing the
information to be reported.

As part of this change a new qmesg_report() function is added as well with the
same capability.

To maintain full compatibility the original error_report() function is
maintained and no changes to the way errors are printed have been made.
To improve access to the new informaiton and warning options wrapper functions
similar to error_report() have been added for warnings and information
printing.

Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
---
RFC V3:
 - Change the function and enum names to be more descriptive
 - Add wrapper functions for *_report() and *_vreport()

 include/qemu/error-report.h | 16 +++++++++
 scripts/checkpatch.pl       |  8 ++++-
 util/qemu-error.c           | 80 +++++++++++++++++++++++++++++++++++++++++++--
 3 files changed, 100 insertions(+), 4 deletions(-)

diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h
index 3001865896..62fc167ace 100644
--- a/include/qemu/error-report.h
+++ b/include/qemu/error-report.h
@@ -21,6 +21,12 @@ typedef struct Location {
     struct Location *prev;
 } Location;
 
+typedef enum {
+    REPORT_TYPE_ERROR,
+    REPORT_TYPE_WARNING,
+    REPORT_TYPE_INFO,
+} report_type;
+
 Location *loc_push_restore(Location *loc);
 Location *loc_push_none(Location *loc);
 Location *loc_pop(Location *loc);
@@ -30,13 +36,23 @@ void loc_set_none(void);
 void loc_set_cmdline(char **argv, int idx, int cnt);
 void loc_set_file(const char *fname, int lno);
 
+void qmsg_vreport(report_type type, const char *fmt, va_list ap) GCC_FMT_ATTR(2, 0);
+void qmsg_report(report_type type, const char *fmt, ...)  GCC_FMT_ATTR(2, 3);
+
 void error_vprintf(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
 void error_printf(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
 void error_vprintf_unless_qmp(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
 void error_printf_unless_qmp(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
 void error_set_progname(const char *argv0);
+
 void error_vreport(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
+void warn_vreport(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
+void info_vreport(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
+
 void error_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
+void warn_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
+void info_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
+
 const char *error_get_progname(void);
 extern bool enable_timestamp_msg;
 
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 45027b9281..8b02621739 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -2530,8 +2530,14 @@ sub process {
 				error_set|
 				error_prepend|
 				error_reportf_err|
+				qmsg_vreport|
 				error_vreport|
-				error_report}x;
+				warn_vreport|
+				info_vreport|
+				qmsg_report|
+				error_report|
+				warn_report|
+				info_report}x;
 
 	if ($rawline =~ /\b(?:$qemu_error_funcs)\s*\(.*\".*\\n/) {
 		ERROR("Error messages should not contain newlines\n" . $herecurr);
diff --git a/util/qemu-error.c b/util/qemu-error.c
index 1c5e35ecdb..63fdc0e174 100644
--- a/util/qemu-error.c
+++ b/util/qemu-error.c
@@ -179,17 +179,29 @@ static void print_loc(void)
 
 bool enable_timestamp_msg;
 /*
- * Print an error message to current monitor if we have one, else to stderr.
+ * Print a message to current monitor if we have one, else to stderr.
  * Format arguments like vsprintf().  The resulting message should be
  * a single phrase, with no newline or trailing punctuation.
  * Prepend the current location and append a newline.
  * It's wrong to call this in a QMP monitor.  Use error_setg() there.
  */
-void error_vreport(const char *fmt, va_list ap)
+void qmsg_vreport(report_type type, const char *fmt, va_list ap)
 {
     GTimeVal tv;
     gchar *timestr;
 
+    switch (type) {
+    case REPORT_TYPE_ERROR:
+        /* To maintain compatibility we don't add anything here */
+        break;
+    case REPORT_TYPE_WARNING:
+        error_printf("warning: ");
+        break;
+    case REPORT_TYPE_INFO:
+        error_printf("info: ");
+        break;
+    }
+
     if (enable_timestamp_msg && !cur_mon) {
         g_get_current_time(&tv);
         timestr = g_time_val_to_iso8601(&tv);
@@ -204,16 +216,78 @@ void error_vreport(const char *fmt, va_list ap)
 
 /*
  * Print an error message to current monitor if we have one, else to stderr.
+ */
+void error_vreport(const char *fmt, va_list ap)
+{
+    qmsg_vreport(REPORT_TYPE_ERROR, fmt, ap);
+}
+
+/*
+ * Print a warning message to current monitor if we have one, else to stderr.
+ */
+void warn_vreport(const char *fmt, va_list ap)
+{
+    qmsg_vreport(REPORT_TYPE_WARNING, fmt, ap);
+}
+
+/*
+ * Print an information message to current monitor if we have one, else to
+ * stderr.
+ */
+void info_vreport(const char *fmt, va_list ap)
+{
+    qmsg_vreport(REPORT_TYPE_INFO, fmt, ap);
+}
+
+/*
+ * Print a message to current monitor if we have one, else to stderr.
  * Format arguments like sprintf().  The resulting message should be a
  * single phrase, with no newline or trailing punctuation.
  * Prepend the current location and append a newline.
  * It's wrong to call this in a QMP monitor.  Use error_setg() there.
  */
+void qmsg_report(report_type type, const char *fmt, ...)
+{
+    va_list ap;
+
+    va_start(ap, fmt);
+    qmsg_vreport(type, fmt, ap);
+    va_end(ap);
+}
+
+/*
+ * Print an error message to current monitor if we have one, else to stderr.
+ */
 void error_report(const char *fmt, ...)
 {
     va_list ap;
 
     va_start(ap, fmt);
-    error_vreport(fmt, ap);
+    qmsg_vreport(REPORT_TYPE_ERROR, fmt, ap);
+    va_end(ap);
+}
+
+/*
+ * Print a warning message to current monitor if we have one, else to stderr.
+ */
+void warn_report(const char *fmt, ...)
+{
+    va_list ap;
+
+    va_start(ap, fmt);
+    qmsg_vreport(REPORT_TYPE_WARNING, fmt, ap);
+    va_end(ap);
+}
+
+/*
+ * Print an information message to current monitor if we have one, else to
+ * stderr.
+ */
+void info_report(const char *fmt, ...)
+{
+    va_list ap;
+
+    va_start(ap, fmt);
+    qmsg_vreport(REPORT_TYPE_INFO, fmt, ap);
     va_end(ap);
 }
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [RFC v3 3/3] char-socket: Report TCP socket waiting as information
  2017-07-05 17:36 [Qemu-devel] [RFC v3 0/3] Implement a warning_report function Alistair Francis
  2017-07-05 17:36 ` [Qemu-devel] [RFC v3 1/3] util/qemu-error: Rename error_print_loc() to be more generic Alistair Francis
  2017-07-05 17:36 ` [Qemu-devel] [RFC v3 2/3] qemu-error: Implement a more generic error reporting Alistair Francis
@ 2017-07-05 17:36 ` Alistair Francis
  2017-07-06  2:46   ` Thomas Huth
  2 siblings, 1 reply; 16+ messages in thread
From: Alistair Francis @ 2017-07-05 17:36 UTC (permalink / raw)
  To: qemu-devel; +Cc: alistair.francis, alistair23, philippe, berrange, armbru

When QEMU is waiting for a TCP socket connection it reports that message as
an error. This isn't an error it is just information so let's change the
report to use info_report() instead.

Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
---

 chardev/char-socket.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/chardev/char-socket.c b/chardev/char-socket.c
index ccc499cfa1..a050a686ea 100644
--- a/chardev/char-socket.c
+++ b/chardev/char-socket.c
@@ -765,8 +765,8 @@ static int tcp_chr_wait_connected(Chardev *chr, Error **errp)
      * in TLS and telnet cases, only wait for an accepted socket */
     while (!s->ioc) {
         if (s->is_listen) {
-            error_report("QEMU waiting for connection on: %s",
-                         chr->filename);
+            info_report("QEMU waiting for connection on: %s",
+                        chr->filename);
             qio_channel_set_blocking(QIO_CHANNEL(s->listen_ioc), true, NULL);
             tcp_chr_accept(QIO_CHANNEL(s->listen_ioc), G_IO_IN, chr);
             qio_channel_set_blocking(QIO_CHANNEL(s->listen_ioc), false, NULL);
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [RFC v3 1/3] util/qemu-error: Rename error_print_loc() to be more generic
  2017-07-05 17:36 ` [Qemu-devel] [RFC v3 1/3] util/qemu-error: Rename error_print_loc() to be more generic Alistair Francis
@ 2017-07-06  2:36   ` Thomas Huth
  0 siblings, 0 replies; 16+ messages in thread
From: Thomas Huth @ 2017-07-06  2:36 UTC (permalink / raw)
  To: Alistair Francis, qemu-devel; +Cc: alistair23, philippe, armbru

On 05.07.2017 19:36, Alistair Francis wrote:
> Rename the error_print_loc() function in preparation for using it to
> print warnings as well.
> 
> Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> 
>  util/qemu-error.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/util/qemu-error.c b/util/qemu-error.c
> index b331f8f4a4..1c5e35ecdb 100644
> --- a/util/qemu-error.c
> +++ b/util/qemu-error.c
> @@ -146,7 +146,7 @@ const char *error_get_progname(void)
>  /*
>   * Print current location to current monitor if we have one, else to stderr.
>   */
> -static void error_print_loc(void)
> +static void print_loc(void)
>  {
>      const char *sep = "";
>      int i;
> @@ -197,7 +197,7 @@ void error_vreport(const char *fmt, va_list ap)
>          g_free(timestr);
>      }
>  
> -    error_print_loc();
> +    print_loc();
>      error_vprintf(fmt, ap);
>      error_printf("\n");
>  }

Reviewed-by: Thomas Huth <thuth@redhat.com>

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [RFC v3 2/3] qemu-error: Implement a more generic error reporting
  2017-07-05 17:36 ` [Qemu-devel] [RFC v3 2/3] qemu-error: Implement a more generic error reporting Alistair Francis
@ 2017-07-06  2:42   ` Thomas Huth
  2017-07-06  6:15   ` Markus Armbruster
  1 sibling, 0 replies; 16+ messages in thread
From: Thomas Huth @ 2017-07-06  2:42 UTC (permalink / raw)
  To: Alistair Francis, qemu-devel; +Cc: alistair23, philippe, armbru

On 05.07.2017 19:36, Alistair Francis wrote:
> This patch converts the existing error_vreport() function into a generic
> qmesg_vreport() function that takes an enum describing the

s/qmesg/qmsg/

> information to be reported.
> 
> As part of this change a new qmesg_report() function is added as well with the

s/qmesg/qmsg/

> same capability.
> 
> To maintain full compatibility the original error_report() function is
> maintained and no changes to the way errors are printed have been made.
> To improve access to the new informaiton and warning options wrapper functions

s/informaition/information/

> similar to error_report() have been added for warnings and information
> printing.
> 
> Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
> ---
> RFC V3:
>  - Change the function and enum names to be more descriptive
>  - Add wrapper functions for *_report() and *_vreport()
> 
>  include/qemu/error-report.h | 16 +++++++++
>  scripts/checkpatch.pl       |  8 ++++-
>  util/qemu-error.c           | 80 +++++++++++++++++++++++++++++++++++++++++++--
>  3 files changed, 100 insertions(+), 4 deletions(-)

With the typos fixed:

Reviewed-by: Thomas Huth <thuth@redhat.com>

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [RFC v3 3/3] char-socket: Report TCP socket waiting as information
  2017-07-05 17:36 ` [Qemu-devel] [RFC v3 3/3] char-socket: Report TCP socket waiting as information Alistair Francis
@ 2017-07-06  2:46   ` Thomas Huth
  2017-07-06  6:18     ` Markus Armbruster
  0 siblings, 1 reply; 16+ messages in thread
From: Thomas Huth @ 2017-07-06  2:46 UTC (permalink / raw)
  To: Alistair Francis, qemu-devel; +Cc: alistair23, philippe, armbru

On 05.07.2017 19:36, Alistair Francis wrote:
> When QEMU is waiting for a TCP socket connection it reports that message as
> an error. This isn't an error it is just information so let's change the
> report to use info_report() instead.
> 
> Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
> ---
> 
>  chardev/char-socket.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/chardev/char-socket.c b/chardev/char-socket.c
> index ccc499cfa1..a050a686ea 100644
> --- a/chardev/char-socket.c
> +++ b/chardev/char-socket.c
> @@ -765,8 +765,8 @@ static int tcp_chr_wait_connected(Chardev *chr, Error **errp)
>       * in TLS and telnet cases, only wait for an accepted socket */
>      while (!s->ioc) {
>          if (s->is_listen) {
> -            error_report("QEMU waiting for connection on: %s",
> -                         chr->filename);
> +            info_report("QEMU waiting for connection on: %s",
> +                        chr->filename);
>              qio_channel_set_blocking(QIO_CHANNEL(s->listen_ioc), true, NULL);
>              tcp_chr_accept(QIO_CHANNEL(s->listen_ioc), G_IO_IN, chr);
>              qio_channel_set_blocking(QIO_CHANNEL(s->listen_ioc), false, NULL);
> 

Reviewed-by: Thomas Huth <thuth@redhat.com>

And in case you also want to add some warn_reports, I suggest to do a

grep -r "error_report.*[Ww]arning:" *

in the sources - there seem to be quite a lot of error_reports that are
rather a warning instead.

 Thomas

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [RFC v3 2/3] qemu-error: Implement a more generic error reporting
  2017-07-05 17:36 ` [Qemu-devel] [RFC v3 2/3] qemu-error: Implement a more generic error reporting Alistair Francis
  2017-07-06  2:42   ` Thomas Huth
@ 2017-07-06  6:15   ` Markus Armbruster
  2017-07-06  8:07     ` Daniel P. Berrange
  1 sibling, 1 reply; 16+ messages in thread
From: Markus Armbruster @ 2017-07-06  6:15 UTC (permalink / raw)
  To: Alistair Francis; +Cc: qemu-devel, alistair23, philippe

Alistair Francis <alistair.francis@xilinx.com> writes:

> This patch converts the existing error_vreport() function into a generic
> qmesg_vreport() function that takes an enum describing the
> information to be reported.
>
> As part of this change a new qmesg_report() function is added as well with the
> same capability.
>
> To maintain full compatibility the original error_report() function is
> maintained and no changes to the way errors are printed have been made.
> To improve access to the new informaiton and warning options wrapper functions
> similar to error_report() have been added for warnings and information
> printing.
>
> Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>

In addition to the typos Thomas pointed out, please wrap your lines at
column 70 or so.

> ---
> RFC V3:
>  - Change the function and enum names to be more descriptive
>  - Add wrapper functions for *_report() and *_vreport()
>
>  include/qemu/error-report.h | 16 +++++++++
>  scripts/checkpatch.pl       |  8 ++++-
>  util/qemu-error.c           | 80 +++++++++++++++++++++++++++++++++++++++++++--
>  3 files changed, 100 insertions(+), 4 deletions(-)
>
> diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h
> index 3001865896..62fc167ace 100644
> --- a/include/qemu/error-report.h
> +++ b/include/qemu/error-report.h
> @@ -21,6 +21,12 @@ typedef struct Location {
>      struct Location *prev;
>  } Location;
>  
> +typedef enum {
> +    REPORT_TYPE_ERROR,
> +    REPORT_TYPE_WARNING,
> +    REPORT_TYPE_INFO,
> +} report_type;
> +
>  Location *loc_push_restore(Location *loc);
>  Location *loc_push_none(Location *loc);
>  Location *loc_pop(Location *loc);
> @@ -30,13 +36,23 @@ void loc_set_none(void);
>  void loc_set_cmdline(char **argv, int idx, int cnt);
>  void loc_set_file(const char *fname, int lno);
>  
> +void qmsg_vreport(report_type type, const char *fmt, va_list ap) GCC_FMT_ATTR(2, 0);
> +void qmsg_report(report_type type, const char *fmt, ...)  GCC_FMT_ATTR(2, 3);
> +

Let's keep these hidden in qemu-error.c until we have users outside of
qemu-error.c.  @report_type, too.  No need for qmsg_report() then.  Not
sure we need the qmsg_ prefix; I find it ugly.  I'd prefer vreport(),
msg_vreport() or maybe do_vreport().

Suggest to update the commit message to put less emphasis on the
(static) generic functions, and more on the functions we're actually
going to use, starting with your PATCH 3, perhaps like this:

    error: Functions to report warnings and informational messages

    Add warn_report(), warn_vreport() for reporting warnings, and
    info_report(), info_vreport() for informational messages.

    Implement them with a helper function factored out of
    error_vreport(), suitably generalized.  Take care not to change the
    way error messages are printed.


>  void error_vprintf(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
>  void error_printf(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
>  void error_vprintf_unless_qmp(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
>  void error_printf_unless_qmp(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
>  void error_set_progname(const char *argv0);
> +
>  void error_vreport(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
> +void warn_vreport(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
> +void info_vreport(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
> +
>  void error_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
> +void warn_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
> +void info_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
> +
>  const char *error_get_progname(void);
>  extern bool enable_timestamp_msg;
>  
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> index 45027b9281..8b02621739 100755
> --- a/scripts/checkpatch.pl
> +++ b/scripts/checkpatch.pl
> @@ -2530,8 +2530,14 @@ sub process {
>  				error_set|
>  				error_prepend|
>  				error_reportf_err|
> +				qmsg_vreport|
>  				error_vreport|
> -				error_report}x;
> +				warn_vreport|
> +				info_vreport|
> +				qmsg_report|
> +				error_report|
> +				warn_report|
> +				info_report}x;
>  
>  	if ($rawline =~ /\b(?:$qemu_error_funcs)\s*\(.*\".*\\n/) {
>  		ERROR("Error messages should not contain newlines\n" . $herecurr);

Extra points for updating checkpatch.pl :)

> diff --git a/util/qemu-error.c b/util/qemu-error.c
> index 1c5e35ecdb..63fdc0e174 100644
> --- a/util/qemu-error.c
> +++ b/util/qemu-error.c
> @@ -179,17 +179,29 @@ static void print_loc(void)
>  
>  bool enable_timestamp_msg;
>  /*
> - * Print an error message to current monitor if we have one, else to stderr.
> + * Print a message to current monitor if we have one, else to stderr.
>   * Format arguments like vsprintf().  The resulting message should be
>   * a single phrase, with no newline or trailing punctuation.
>   * Prepend the current location and append a newline.
>   * It's wrong to call this in a QMP monitor.  Use error_setg() there.
>   */
> -void error_vreport(const char *fmt, va_list ap)
> +void qmsg_vreport(report_type type, const char *fmt, va_list ap)
>  {
>      GTimeVal tv;
>      gchar *timestr;
>  
> +    switch (type) {
> +    case REPORT_TYPE_ERROR:
> +        /* To maintain compatibility we don't add anything here */

I feel the comment isn't going to be useful in the future.  Let's drop
it.

> +        break;
> +    case REPORT_TYPE_WARNING:
> +        error_printf("warning: ");
> +        break;
> +    case REPORT_TYPE_INFO:
> +        error_printf("info: ");
> +        break;

       default:
           assert(0);

> +    }
> +
>      if (enable_timestamp_msg && !cur_mon) {
>          g_get_current_time(&tv);
>          timestr = g_time_val_to_iso8601(&tv);
> @@ -204,16 +216,78 @@ void error_vreport(const char *fmt, va_list ap)
>  
>  /*
>   * Print an error message to current monitor if we have one, else to stderr.
> + */
> +void error_vreport(const char *fmt, va_list ap)
> +{
> +    qmsg_vreport(REPORT_TYPE_ERROR, fmt, ap);
> +}
> +
> +/*
> + * Print a warning message to current monitor if we have one, else to stderr.
> + */
> +void warn_vreport(const char *fmt, va_list ap)
> +{
> +    qmsg_vreport(REPORT_TYPE_WARNING, fmt, ap);
> +}
> +
> +/*
> + * Print an information message to current monitor if we have one, else to
> + * stderr.
> + */
> +void info_vreport(const char *fmt, va_list ap)
> +{
> +    qmsg_vreport(REPORT_TYPE_INFO, fmt, ap);
> +}
> +
> +/*
> + * Print a message to current monitor if we have one, else to stderr.
>   * Format arguments like sprintf().  The resulting message should be a
>   * single phrase, with no newline or trailing punctuation.
>   * Prepend the current location and append a newline.
>   * It's wrong to call this in a QMP monitor.  Use error_setg() there.
>   */
> +void qmsg_report(report_type type, const char *fmt, ...)
> +{
> +    va_list ap;
> +
> +    va_start(ap, fmt);
> +    qmsg_vreport(type, fmt, ap);
> +    va_end(ap);
> +}
> +
> +/*
> + * Print an error message to current monitor if we have one, else to stderr.
> + */
>  void error_report(const char *fmt, ...)
>  {
>      va_list ap;
>  
>      va_start(ap, fmt);
> -    error_vreport(fmt, ap);
> +    qmsg_vreport(REPORT_TYPE_ERROR, fmt, ap);
> +    va_end(ap);
> +}
> +
> +/*
> + * Print a warning message to current monitor if we have one, else to stderr.
> + */
> +void warn_report(const char *fmt, ...)
> +{
> +    va_list ap;
> +
> +    va_start(ap, fmt);
> +    qmsg_vreport(REPORT_TYPE_WARNING, fmt, ap);
> +    va_end(ap);
> +}
> +
> +/*
> + * Print an information message to current monitor if we have one, else to
> + * stderr.
> + */
> +void info_report(const char *fmt, ...)
> +{
> +    va_list ap;
> +
> +    va_start(ap, fmt);
> +    qmsg_vreport(REPORT_TYPE_INFO, fmt, ap);
>      va_end(ap);
>  }

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [RFC v3 3/3] char-socket: Report TCP socket waiting as information
  2017-07-06  2:46   ` Thomas Huth
@ 2017-07-06  6:18     ` Markus Armbruster
  0 siblings, 0 replies; 16+ messages in thread
From: Markus Armbruster @ 2017-07-06  6:18 UTC (permalink / raw)
  To: Thomas Huth; +Cc: Alistair Francis, qemu-devel, alistair23, philippe

Thomas Huth <thuth@redhat.com> writes:

> On 05.07.2017 19:36, Alistair Francis wrote:
>> When QEMU is waiting for a TCP socket connection it reports that message as
>> an error. This isn't an error it is just information so let's change the
>> report to use info_report() instead.
>> 
>> Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
>> ---
>> 
>>  chardev/char-socket.c | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>> 
>> diff --git a/chardev/char-socket.c b/chardev/char-socket.c
>> index ccc499cfa1..a050a686ea 100644
>> --- a/chardev/char-socket.c
>> +++ b/chardev/char-socket.c
>> @@ -765,8 +765,8 @@ static int tcp_chr_wait_connected(Chardev *chr, Error **errp)
>>       * in TLS and telnet cases, only wait for an accepted socket */
>>      while (!s->ioc) {
>>          if (s->is_listen) {
>> -            error_report("QEMU waiting for connection on: %s",
>> -                         chr->filename);
>> +            info_report("QEMU waiting for connection on: %s",
>> +                        chr->filename);
>>              qio_channel_set_blocking(QIO_CHANNEL(s->listen_ioc), true, NULL);
>>              tcp_chr_accept(QIO_CHANNEL(s->listen_ioc), G_IO_IN, chr);
>>              qio_channel_set_blocking(QIO_CHANNEL(s->listen_ioc), false, NULL);
>> 
>
> Reviewed-by: Thomas Huth <thuth@redhat.com>
>
> And in case you also want to add some warn_reports, I suggest to do a
>
> grep -r "error_report.*[Ww]arning:" *
>
> in the sources - there seem to be quite a lot of error_reports that are
> rather a warning instead.

Replace "in case you also want to" by "please do" --- I dislike adding
infrastructure without users, and I dislike adding new ways to do things
without getting rid of the old ways even more.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [RFC v3 2/3] qemu-error: Implement a more generic error reporting
  2017-07-06  6:15   ` Markus Armbruster
@ 2017-07-06  8:07     ` Daniel P. Berrange
  2017-07-06 11:27       ` Markus Armbruster
  0 siblings, 1 reply; 16+ messages in thread
From: Daniel P. Berrange @ 2017-07-06  8:07 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: Alistair Francis, alistair23, qemu-devel, philippe

On Thu, Jul 06, 2017 at 08:15:54AM +0200, Markus Armbruster wrote:
> Alistair Francis <alistair.francis@xilinx.com> writes:
> 
> > This patch converts the existing error_vreport() function into a generic
> > qmesg_vreport() function that takes an enum describing the
> > information to be reported.
> >
> > As part of this change a new qmesg_report() function is added as well with the
> > same capability.
> >
> > To maintain full compatibility the original error_report() function is
> > maintained and no changes to the way errors are printed have been made.
> > To improve access to the new informaiton and warning options wrapper functions
> > similar to error_report() have been added for warnings and information
> > printing.
> >
> > Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>

> > diff --git a/util/qemu-error.c b/util/qemu-error.c
> > index 1c5e35ecdb..63fdc0e174 100644
> > --- a/util/qemu-error.c
> > +++ b/util/qemu-error.c
> > @@ -179,17 +179,29 @@ static void print_loc(void)
> >  
> >  bool enable_timestamp_msg;
> >  /*
> > - * Print an error message to current monitor if we have one, else to stderr.
> > + * Print a message to current monitor if we have one, else to stderr.
> >   * Format arguments like vsprintf().  The resulting message should be
> >   * a single phrase, with no newline or trailing punctuation.
> >   * Prepend the current location and append a newline.
> >   * It's wrong to call this in a QMP monitor.  Use error_setg() there.
> >   */
> > -void error_vreport(const char *fmt, va_list ap)
> > +void qmsg_vreport(report_type type, const char *fmt, va_list ap)
> >  {
> >      GTimeVal tv;
> >      gchar *timestr;
> >  
> > +    switch (type) {
> > +    case REPORT_TYPE_ERROR:
> > +        /* To maintain compatibility we don't add anything here */
> 
> I feel the comment isn't going to be useful in the future.  Let's drop
> it.

Do we really need to care about compatibility of the precise way we output
error messages. It has never been something we call a "stable API", as we
don't guarantee error message text will remain the same across releases. So
anyone relying on scraping QEMU stderr to match some error message has always
been liable to break.

IOW, just add an "error: " prefix to the text

> 
> > +        break;
> > +    case REPORT_TYPE_WARNING:
> > +        error_printf("warning: ");
> > +        break;
> > +    case REPORT_TYPE_INFO:
> > +        error_printf("info: ");
> > +        break;
> 
>        default:
>            assert(0);
> 
> > +    }
> > +
> >      if (enable_timestamp_msg && !cur_mon) {
> >          g_get_current_time(&tv);
> >          timestr = g_time_val_to_iso8601(&tv);

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [RFC v3 2/3] qemu-error: Implement a more generic error reporting
  2017-07-06  8:07     ` Daniel P. Berrange
@ 2017-07-06 11:27       ` Markus Armbruster
  2017-07-06 11:45         ` Daniel P. Berrange
  0 siblings, 1 reply; 16+ messages in thread
From: Markus Armbruster @ 2017-07-06 11:27 UTC (permalink / raw)
  To: Daniel P. Berrange; +Cc: alistair23, philippe, qemu-devel, Alistair Francis

"Daniel P. Berrange" <berrange@redhat.com> writes:

> On Thu, Jul 06, 2017 at 08:15:54AM +0200, Markus Armbruster wrote:
>> Alistair Francis <alistair.francis@xilinx.com> writes:
>> 
>> > This patch converts the existing error_vreport() function into a generic
>> > qmesg_vreport() function that takes an enum describing the
>> > information to be reported.
>> >
>> > As part of this change a new qmesg_report() function is added as well with the
>> > same capability.
>> >
>> > To maintain full compatibility the original error_report() function is
>> > maintained and no changes to the way errors are printed have been made.
>> > To improve access to the new informaiton and warning options wrapper functions
>> > similar to error_report() have been added for warnings and information
>> > printing.
>> >
>> > Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
>
>> > diff --git a/util/qemu-error.c b/util/qemu-error.c
>> > index 1c5e35ecdb..63fdc0e174 100644
>> > --- a/util/qemu-error.c
>> > +++ b/util/qemu-error.c
>> > @@ -179,17 +179,29 @@ static void print_loc(void)
>> >  
>> >  bool enable_timestamp_msg;
>> >  /*
>> > - * Print an error message to current monitor if we have one, else to stderr.
>> > + * Print a message to current monitor if we have one, else to stderr.
>> >   * Format arguments like vsprintf().  The resulting message should be
>> >   * a single phrase, with no newline or trailing punctuation.
>> >   * Prepend the current location and append a newline.
>> >   * It's wrong to call this in a QMP monitor.  Use error_setg() there.
>> >   */
>> > -void error_vreport(const char *fmt, va_list ap)
>> > +void qmsg_vreport(report_type type, const char *fmt, va_list ap)
>> >  {
>> >      GTimeVal tv;
>> >      gchar *timestr;
>> >  
>> > +    switch (type) {
>> > +    case REPORT_TYPE_ERROR:
>> > +        /* To maintain compatibility we don't add anything here */
>> 
>> I feel the comment isn't going to be useful in the future.  Let's drop
>> it.
>
> Do we really need to care about compatibility of the precise way we output
> error messages. It has never been something we call a "stable API", as we
> don't guarantee error message text will remain the same across releases. So
> anyone relying on scraping QEMU stderr to match some error message has always
> been liable to break.
>
> IOW, just add an "error: " prefix to the text

I agree the error message format isn't ABI.

But what would adding "error: " buy us?

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [RFC v3 2/3] qemu-error: Implement a more generic error reporting
  2017-07-06 11:27       ` Markus Armbruster
@ 2017-07-06 11:45         ` Daniel P. Berrange
  2017-07-06 12:20           ` Markus Armbruster
  0 siblings, 1 reply; 16+ messages in thread
From: Daniel P. Berrange @ 2017-07-06 11:45 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: alistair23, philippe, qemu-devel, Alistair Francis

On Thu, Jul 06, 2017 at 01:27:15PM +0200, Markus Armbruster wrote:
> "Daniel P. Berrange" <berrange@redhat.com> writes:
> 
> > On Thu, Jul 06, 2017 at 08:15:54AM +0200, Markus Armbruster wrote:
> >> Alistair Francis <alistair.francis@xilinx.com> writes:
> >> 
> >> > This patch converts the existing error_vreport() function into a generic
> >> > qmesg_vreport() function that takes an enum describing the
> >> > information to be reported.
> >> >
> >> > As part of this change a new qmesg_report() function is added as well with the
> >> > same capability.
> >> >
> >> > To maintain full compatibility the original error_report() function is
> >> > maintained and no changes to the way errors are printed have been made.
> >> > To improve access to the new informaiton and warning options wrapper functions
> >> > similar to error_report() have been added for warnings and information
> >> > printing.
> >> >
> >> > Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
> >
> >> > diff --git a/util/qemu-error.c b/util/qemu-error.c
> >> > index 1c5e35ecdb..63fdc0e174 100644
> >> > --- a/util/qemu-error.c
> >> > +++ b/util/qemu-error.c
> >> > @@ -179,17 +179,29 @@ static void print_loc(void)
> >> >  
> >> >  bool enable_timestamp_msg;
> >> >  /*
> >> > - * Print an error message to current monitor if we have one, else to stderr.
> >> > + * Print a message to current monitor if we have one, else to stderr.
> >> >   * Format arguments like vsprintf().  The resulting message should be
> >> >   * a single phrase, with no newline or trailing punctuation.
> >> >   * Prepend the current location and append a newline.
> >> >   * It's wrong to call this in a QMP monitor.  Use error_setg() there.
> >> >   */
> >> > -void error_vreport(const char *fmt, va_list ap)
> >> > +void qmsg_vreport(report_type type, const char *fmt, va_list ap)
> >> >  {
> >> >      GTimeVal tv;
> >> >      gchar *timestr;
> >> >  
> >> > +    switch (type) {
> >> > +    case REPORT_TYPE_ERROR:
> >> > +        /* To maintain compatibility we don't add anything here */
> >> 
> >> I feel the comment isn't going to be useful in the future.  Let's drop
> >> it.
> >
> > Do we really need to care about compatibility of the precise way we output
> > error messages. It has never been something we call a "stable API", as we
> > don't guarantee error message text will remain the same across releases. So
> > anyone relying on scraping QEMU stderr to match some error message has always
> > been liable to break.
> >
> > IOW, just add an "error: " prefix to the text
> 
> I agree the error message format isn't ABI.
> 
> But what would adding "error: " buy us?

It would clearly distinguish errors from any other output on stderr, which
may not be error related (for example SPICE commonly pollutes stderr with
lots of messages).

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [RFC v3 2/3] qemu-error: Implement a more generic error reporting
  2017-07-06 11:45         ` Daniel P. Berrange
@ 2017-07-06 12:20           ` Markus Armbruster
  2017-07-06 13:10             ` Daniel P. Berrange
  0 siblings, 1 reply; 16+ messages in thread
From: Markus Armbruster @ 2017-07-06 12:20 UTC (permalink / raw)
  To: Daniel P. Berrange; +Cc: alistair23, Alistair Francis, philippe, qemu-devel

"Daniel P. Berrange" <berrange@redhat.com> writes:

> On Thu, Jul 06, 2017 at 01:27:15PM +0200, Markus Armbruster wrote:
>> "Daniel P. Berrange" <berrange@redhat.com> writes:
>> 
>> > On Thu, Jul 06, 2017 at 08:15:54AM +0200, Markus Armbruster wrote:
>> >> Alistair Francis <alistair.francis@xilinx.com> writes:
>> >> 
>> >> > This patch converts the existing error_vreport() function into a generic
>> >> > qmesg_vreport() function that takes an enum describing the
>> >> > information to be reported.
>> >> >
>> >> > As part of this change a new qmesg_report() function is added as well with the
>> >> > same capability.
>> >> >
>> >> > To maintain full compatibility the original error_report() function is
>> >> > maintained and no changes to the way errors are printed have been made.
>> >> > To improve access to the new informaiton and warning options wrapper functions
>> >> > similar to error_report() have been added for warnings and information
>> >> > printing.
>> >> >
>> >> > Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
>> >
>> >> > diff --git a/util/qemu-error.c b/util/qemu-error.c
>> >> > index 1c5e35ecdb..63fdc0e174 100644
>> >> > --- a/util/qemu-error.c
>> >> > +++ b/util/qemu-error.c
>> >> > @@ -179,17 +179,29 @@ static void print_loc(void)
>> >> >  
>> >> >  bool enable_timestamp_msg;
>> >> >  /*
>> >> > - * Print an error message to current monitor if we have one, else to stderr.
>> >> > + * Print a message to current monitor if we have one, else to stderr.
>> >> >   * Format arguments like vsprintf().  The resulting message should be
>> >> >   * a single phrase, with no newline or trailing punctuation.
>> >> >   * Prepend the current location and append a newline.
>> >> >   * It's wrong to call this in a QMP monitor.  Use error_setg() there.
>> >> >   */
>> >> > -void error_vreport(const char *fmt, va_list ap)
>> >> > +void qmsg_vreport(report_type type, const char *fmt, va_list ap)
>> >> >  {
>> >> >      GTimeVal tv;
>> >> >      gchar *timestr;
>> >> >  
>> >> > +    switch (type) {
>> >> > +    case REPORT_TYPE_ERROR:
>> >> > +        /* To maintain compatibility we don't add anything here */
>> >> 
>> >> I feel the comment isn't going to be useful in the future.  Let's drop
>> >> it.
>> >
>> > Do we really need to care about compatibility of the precise way we output
>> > error messages. It has never been something we call a "stable API", as we
>> > don't guarantee error message text will remain the same across releases. So
>> > anyone relying on scraping QEMU stderr to match some error message has always
>> > been liable to break.
>> >
>> > IOW, just add an "error: " prefix to the text
>> 
>> I agree the error message format isn't ABI.
>> 
>> But what would adding "error: " buy us?
>
> It would clearly distinguish errors from any other output on stderr, which
> may not be error related (for example SPICE commonly pollutes stderr with
> lots of messages).

Changing the current error message format

    <TIMESTAMP><PROGNAME>:<LOCATION><MSG>

to

    <TIMESTAMP><PROGNAME>:<LOCATION>error: <MSG>

makes recognizing error messages a bit easier, but it also makes them
even longer.  Can't we make do with recognizing <PROGNAME>:?

If SPICE babbles to stderr, it needs a gag.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [RFC v3 2/3] qemu-error: Implement a more generic error reporting
  2017-07-06 12:20           ` Markus Armbruster
@ 2017-07-06 13:10             ` Daniel P. Berrange
  2017-07-06 14:44               ` Markus Armbruster
  0 siblings, 1 reply; 16+ messages in thread
From: Daniel P. Berrange @ 2017-07-06 13:10 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: alistair23, Alistair Francis, philippe, qemu-devel

On Thu, Jul 06, 2017 at 02:20:51PM +0200, Markus Armbruster wrote:
> "Daniel P. Berrange" <berrange@redhat.com> writes:
> 
> > On Thu, Jul 06, 2017 at 01:27:15PM +0200, Markus Armbruster wrote:
> >> "Daniel P. Berrange" <berrange@redhat.com> writes:
> >> 
> >> > On Thu, Jul 06, 2017 at 08:15:54AM +0200, Markus Armbruster wrote:
> >> >> Alistair Francis <alistair.francis@xilinx.com> writes:
> >> >> 
> >> >> > This patch converts the existing error_vreport() function into a generic
> >> >> > qmesg_vreport() function that takes an enum describing the
> >> >> > information to be reported.
> >> >> >
> >> >> > As part of this change a new qmesg_report() function is added as well with the
> >> >> > same capability.
> >> >> >
> >> >> > To maintain full compatibility the original error_report() function is
> >> >> > maintained and no changes to the way errors are printed have been made.
> >> >> > To improve access to the new informaiton and warning options wrapper functions
> >> >> > similar to error_report() have been added for warnings and information
> >> >> > printing.
> >> >> >
> >> >> > Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
> >> >
> >> >> > diff --git a/util/qemu-error.c b/util/qemu-error.c
> >> >> > index 1c5e35ecdb..63fdc0e174 100644
> >> >> > --- a/util/qemu-error.c
> >> >> > +++ b/util/qemu-error.c
> >> >> > @@ -179,17 +179,29 @@ static void print_loc(void)
> >> >> >  
> >> >> >  bool enable_timestamp_msg;
> >> >> >  /*
> >> >> > - * Print an error message to current monitor if we have one, else to stderr.
> >> >> > + * Print a message to current monitor if we have one, else to stderr.
> >> >> >   * Format arguments like vsprintf().  The resulting message should be
> >> >> >   * a single phrase, with no newline or trailing punctuation.
> >> >> >   * Prepend the current location and append a newline.
> >> >> >   * It's wrong to call this in a QMP monitor.  Use error_setg() there.
> >> >> >   */
> >> >> > -void error_vreport(const char *fmt, va_list ap)
> >> >> > +void qmsg_vreport(report_type type, const char *fmt, va_list ap)
> >> >> >  {
> >> >> >      GTimeVal tv;
> >> >> >      gchar *timestr;
> >> >> >  
> >> >> > +    switch (type) {
> >> >> > +    case REPORT_TYPE_ERROR:
> >> >> > +        /* To maintain compatibility we don't add anything here */
> >> >> 
> >> >> I feel the comment isn't going to be useful in the future.  Let's drop
> >> >> it.
> >> >
> >> > Do we really need to care about compatibility of the precise way we output
> >> > error messages. It has never been something we call a "stable API", as we
> >> > don't guarantee error message text will remain the same across releases. So
> >> > anyone relying on scraping QEMU stderr to match some error message has always
> >> > been liable to break.
> >> >
> >> > IOW, just add an "error: " prefix to the text
> >> 
> >> I agree the error message format isn't ABI.
> >> 
> >> But what would adding "error: " buy us?
> >
> > It would clearly distinguish errors from any other output on stderr, which
> > may not be error related (for example SPICE commonly pollutes stderr with
> > lots of messages).
> 
> Changing the current error message format
> 
>     <TIMESTAMP><PROGNAME>:<LOCATION><MSG>
> 
> to
> 
>     <TIMESTAMP><PROGNAME>:<LOCATION>error: <MSG>
> 
> makes recognizing error messages a bit easier, but it also makes them
> even longer.  Can't we make do with recognizing <PROGNAME>:?

I'm not convinced 7 extra characters is a big deal compared with the
size of the timestamps, program name, location & error message itself.
We'll already have such a prefix for info & warnings, so consistency is
good IMHO.

If line length is a concern, perhaps we should make the error printing
function able to intelligently line wrap at 80 chars, taking into account
the size of the metadata (timestamp, program, location, msg type prefix).

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [RFC v3 2/3] qemu-error: Implement a more generic error reporting
  2017-07-06 13:10             ` Daniel P. Berrange
@ 2017-07-06 14:44               ` Markus Armbruster
  2017-07-06 18:45                 ` Alistair Francis
  0 siblings, 1 reply; 16+ messages in thread
From: Markus Armbruster @ 2017-07-06 14:44 UTC (permalink / raw)
  To: Daniel P. Berrange; +Cc: qemu-devel, alistair23, philippe, Alistair Francis

"Daniel P. Berrange" <berrange@redhat.com> writes:

> On Thu, Jul 06, 2017 at 02:20:51PM +0200, Markus Armbruster wrote:
>> "Daniel P. Berrange" <berrange@redhat.com> writes:
>> 
>> > On Thu, Jul 06, 2017 at 01:27:15PM +0200, Markus Armbruster wrote:
>> >> "Daniel P. Berrange" <berrange@redhat.com> writes:
[...]
>> >> > Do we really need to care about compatibility of the precise way we output
>> >> > error messages. It has never been something we call a "stable API", as we
>> >> > don't guarantee error message text will remain the same across releases. So
>> >> > anyone relying on scraping QEMU stderr to match some error message has always
>> >> > been liable to break.
>> >> >
>> >> > IOW, just add an "error: " prefix to the text
>> >> 
>> >> I agree the error message format isn't ABI.
>> >> 
>> >> But what would adding "error: " buy us?
>> >
>> > It would clearly distinguish errors from any other output on stderr, which
>> > may not be error related (for example SPICE commonly pollutes stderr with
>> > lots of messages).
>> 
>> Changing the current error message format
>> 
>>     <TIMESTAMP><PROGNAME>:<LOCATION><MSG>
>> 
>> to
>> 
>>     <TIMESTAMP><PROGNAME>:<LOCATION>error: <MSG>
>> 
>> makes recognizing error messages a bit easier, but it also makes them
>> even longer.  Can't we make do with recognizing <PROGNAME>:?
>
> I'm not convinced 7 extra characters is a big deal compared with the
> size of the timestamps, program name, location & error message itself.
> We'll already have such a prefix for info & warnings, so consistency is
> good IMHO.

I don't see the value of consistency here.  What matters is whether
errors are easy to spot and recognize.

GCC doesn't put "error:" into its error messages.  Clang does.  Feels
like a matter of taste to me.

If adding "error:" solves a problem people have, let's do it.  If not, I
don't see why we should change what we have.

> If line length is a concern, perhaps we should make the error printing
> function able to intelligently line wrap at 80 chars, taking into account
> the size of the metadata (timestamp, program, location, msg type prefix).

Uh, that cure feels worse than the disease :)

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [RFC v3 2/3] qemu-error: Implement a more generic error reporting
  2017-07-06 14:44               ` Markus Armbruster
@ 2017-07-06 18:45                 ` Alistair Francis
  0 siblings, 0 replies; 16+ messages in thread
From: Alistair Francis @ 2017-07-06 18:45 UTC (permalink / raw)
  To: Markus Armbruster
  Cc: Daniel P. Berrange, qemu-devel@nongnu.org Developers, philippe,
	Alistair Francis

On Thu, Jul 6, 2017 at 7:44 AM, Markus Armbruster <armbru@redhat.com> wrote:
> "Daniel P. Berrange" <berrange@redhat.com> writes:
>
>> On Thu, Jul 06, 2017 at 02:20:51PM +0200, Markus Armbruster wrote:
>>> "Daniel P. Berrange" <berrange@redhat.com> writes:
>>>
>>> > On Thu, Jul 06, 2017 at 01:27:15PM +0200, Markus Armbruster wrote:
>>> >> "Daniel P. Berrange" <berrange@redhat.com> writes:
> [...]
>>> >> > Do we really need to care about compatibility of the precise way we output
>>> >> > error messages. It has never been something we call a "stable API", as we
>>> >> > don't guarantee error message text will remain the same across releases. So
>>> >> > anyone relying on scraping QEMU stderr to match some error message has always
>>> >> > been liable to break.
>>> >> >
>>> >> > IOW, just add an "error: " prefix to the text
>>> >>
>>> >> I agree the error message format isn't ABI.
>>> >>
>>> >> But what would adding "error: " buy us?
>>> >
>>> > It would clearly distinguish errors from any other output on stderr, which
>>> > may not be error related (for example SPICE commonly pollutes stderr with
>>> > lots of messages).
>>>
>>> Changing the current error message format
>>>
>>>     <TIMESTAMP><PROGNAME>:<LOCATION><MSG>
>>>
>>> to
>>>
>>>     <TIMESTAMP><PROGNAME>:<LOCATION>error: <MSG>
>>>
>>> makes recognizing error messages a bit easier, but it also makes them
>>> even longer.  Can't we make do with recognizing <PROGNAME>:?
>>
>> I'm not convinced 7 extra characters is a big deal compared with the
>> size of the timestamps, program name, location & error message itself.
>> We'll already have such a prefix for info & warnings, so consistency is
>> good IMHO.
>
> I don't see the value of consistency here.  What matters is whether
> errors are easy to spot and recognize.
>
> GCC doesn't put "error:" into its error messages.  Clang does.  Feels
> like a matter of taste to me.
>
> If adding "error:" solves a problem people have, let's do it.  If not, I
> don't see why we should change what we have.

Ok, adding "error: " actually helps with what I was originally trying
to do, so I have added it in my next version.

I have also removed the qmsg_* prefix and updated the commit message.

Thanks,
Alistair

>
>> If line length is a concern, perhaps we should make the error printing
>> function able to intelligently line wrap at 80 chars, taking into account
>> the size of the metadata (timestamp, program, location, msg type prefix).
>
> Uh, that cure feels worse than the disease :)

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2017-07-06 18:45 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-05 17:36 [Qemu-devel] [RFC v3 0/3] Implement a warning_report function Alistair Francis
2017-07-05 17:36 ` [Qemu-devel] [RFC v3 1/3] util/qemu-error: Rename error_print_loc() to be more generic Alistair Francis
2017-07-06  2:36   ` Thomas Huth
2017-07-05 17:36 ` [Qemu-devel] [RFC v3 2/3] qemu-error: Implement a more generic error reporting Alistair Francis
2017-07-06  2:42   ` Thomas Huth
2017-07-06  6:15   ` Markus Armbruster
2017-07-06  8:07     ` Daniel P. Berrange
2017-07-06 11:27       ` Markus Armbruster
2017-07-06 11:45         ` Daniel P. Berrange
2017-07-06 12:20           ` Markus Armbruster
2017-07-06 13:10             ` Daniel P. Berrange
2017-07-06 14:44               ` Markus Armbruster
2017-07-06 18:45                 ` Alistair Francis
2017-07-05 17:36 ` [Qemu-devel] [RFC v3 3/3] char-socket: Report TCP socket waiting as information Alistair Francis
2017-07-06  2:46   ` Thomas Huth
2017-07-06  6:18     ` Markus Armbruster

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.