diff mbox

[for-2.7,1/1] block/gluster: add support for selecting debug logging level

Message ID 277eec83c5048bdac827efa255791bb1e9fdf73a.1460064103.git.jcody@redhat.com
State New
Headers show

Commit Message

Jeff Cody April 7, 2016, 9:24 p.m. UTC
This adds commandline support for the logging level of the
gluster protocol driver, output to stdout.  The option is 'debug',
e.g.:

-drive filename=gluster://192.168.15.180/gv2/test.qcow2,debug=9

Debug levels are 0-9, with 9 being the most verbose, and 0 representing
no debugging output.  The default is the same as it was before, which
is a level of 4.  The current logging levels defined in the gluster
source are:

    0 - None
    1 - Emergency
    2 - Alert
    3 - Critical
    4 - Error
    5 - Warning
    6 - Notice
    7 - Info
    8 - Debug
    9 - Trace

(From: glusterfs/logging.h)

Signed-off-by: Jeff Cody <jcody@redhat.com>
---
 block/gluster.c | 48 +++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 41 insertions(+), 7 deletions(-)

Comments

Niels de Vos April 8, 2016, 10:49 a.m. UTC | #1
On Thu, Apr 07, 2016 at 05:24:19PM -0400, Jeff Cody wrote:
> This adds commandline support for the logging level of the
> gluster protocol driver, output to stdout.  The option is 'debug',
> e.g.:
> 
> -drive filename=gluster://192.168.15.180/gv2/test.qcow2,debug=9
> 
> Debug levels are 0-9, with 9 being the most verbose, and 0 representing
> no debugging output.  The default is the same as it was before, which
> is a level of 4.  The current logging levels defined in the gluster
> source are:
> 
>     0 - None
>     1 - Emergency
>     2 - Alert
>     3 - Critical
>     4 - Error
>     5 - Warning
>     6 - Notice
>     7 - Info
>     8 - Debug
>     9 - Trace
> 
> (From: glusterfs/logging.h)
> 
> Signed-off-by: Jeff Cody <jcody@redhat.com>

Thanks, this is something I wanted to get done for a long time already.

Reviewed-by: Niels de Vos <ndevos@redhat.com>

> ---
>  block/gluster.c | 48 +++++++++++++++++++++++++++++++++++++++++-------
>  1 file changed, 41 insertions(+), 7 deletions(-)
> 
> diff --git a/block/gluster.c b/block/gluster.c
> index 51e154c..c6d4892 100644
> --- a/block/gluster.c
> +++ b/block/gluster.c
> @@ -24,6 +24,7 @@ typedef struct GlusterAIOCB {
>  typedef struct BDRVGlusterState {
>      struct glfs *glfs;
>      struct glfs_fd *fd;
> +    int debug_level;
>  } BDRVGlusterState;
>  
>  typedef struct GlusterConf {
> @@ -32,6 +33,7 @@ typedef struct GlusterConf {
>      char *volname;
>      char *image;
>      char *transport;
> +    int debug_level;
>  } GlusterConf;
>  
>  static void qemu_gluster_gconf_free(GlusterConf *gconf)
> @@ -194,11 +196,7 @@ static struct glfs *qemu_gluster_init(GlusterConf *gconf, const char *filename,
>          goto out;
>      }
>  
> -    /*
> -     * TODO: Use GF_LOG_ERROR instead of hard code value of 4 here when
> -     * GlusterFS makes GF_LOG_* macros available to libgfapi users.
> -     */
> -    ret = glfs_set_logging(glfs, "-", 4);
> +    ret = glfs_set_logging(glfs, "-", gconf->debug_level);
>      if (ret < 0) {
>          goto out;
>      }
> @@ -256,16 +254,26 @@ static void gluster_finish_aiocb(struct glfs_fd *fd, ssize_t ret, void *arg)
>      qemu_bh_schedule(acb->bh);
>  }
>  
> +#define GLUSTER_OPT_FILENAME "filename"
> +#define GLUSTER_OPT_DEBUG "debug"
> +#define GLUSTER_DEBUG_DEFAULT 4
> +#define GLUSTER_DEBUG_MAX 9
> +
>  /* TODO Convert to fine grained options */
>  static QemuOptsList runtime_opts = {
>      .name = "gluster",
>      .head = QTAILQ_HEAD_INITIALIZER(runtime_opts.head),
>      .desc = {
>          {
> -            .name = "filename",
> +            .name = GLUSTER_OPT_FILENAME,
>              .type = QEMU_OPT_STRING,
>              .help = "URL to the gluster image",
>          },
> +        {
> +            .name = GLUSTER_OPT_DEBUG,
> +            .type = QEMU_OPT_NUMBER,
> +            .help = "Gluster log level, valid range is 0-9",
> +        },
>          { /* end of list */ }
>      },
>  };
> @@ -306,8 +314,17 @@ static int qemu_gluster_open(BlockDriverState *bs,  QDict *options,
>          goto out;
>      }
>  
> -    filename = qemu_opt_get(opts, "filename");
> +    filename = qemu_opt_get(opts, GLUSTER_OPT_FILENAME);
>  
> +    s->debug_level = qemu_opt_get_number(opts, GLUSTER_OPT_DEBUG,
> +                                         GLUSTER_DEBUG_DEFAULT);
> +    if (s->debug_level < 0) {
> +        s->debug_level = 0;
> +    } else if (s->debug_level > GLUSTER_DEBUG_MAX) {
> +        s->debug_level = GLUSTER_DEBUG_MAX;
> +    }
> +
> +    gconf->debug_level = s->debug_level;
>      s->glfs = qemu_gluster_init(gconf, filename, errp);
>      if (!s->glfs) {
>          ret = -errno;
> @@ -346,6 +363,7 @@ static int qemu_gluster_reopen_prepare(BDRVReopenState *state,
>                                         BlockReopenQueue *queue, Error **errp)
>  {
>      int ret = 0;
> +    BDRVGlusterState *s;
>      BDRVGlusterReopenState *reop_s;
>      GlusterConf *gconf = NULL;
>      int open_flags = 0;
> @@ -353,6 +371,8 @@ static int qemu_gluster_reopen_prepare(BDRVReopenState *state,
>      assert(state != NULL);
>      assert(state->bs != NULL);
>  
> +    s = state->bs->opaque;
> +
>      state->opaque = g_new0(BDRVGlusterReopenState, 1);
>      reop_s = state->opaque;
>  
> @@ -360,6 +380,7 @@ static int qemu_gluster_reopen_prepare(BDRVReopenState *state,
>  
>      gconf = g_new0(GlusterConf, 1);
>  
> +    gconf->debug_level = s->debug_level;
>      reop_s->glfs = qemu_gluster_init(gconf, state->bs->filename, errp);
>      if (reop_s->glfs == NULL) {
>          ret = -errno;
> @@ -485,6 +506,14 @@ static int qemu_gluster_create(const char *filename,
>      char *tmp = NULL;
>      GlusterConf *gconf = g_new0(GlusterConf, 1);
>  
> +    gconf->debug_level = qemu_opt_get_number_del(opts, GLUSTER_OPT_DEBUG,
> +                                                 GLUSTER_DEBUG_DEFAULT);
> +    if (gconf->debug_level < 0) {
> +        gconf->debug_level = 0;
> +    } else if (gconf->debug_level > GLUSTER_DEBUG_MAX) {
> +        gconf->debug_level = GLUSTER_DEBUG_MAX;
> +    }
> +
>      glfs = qemu_gluster_init(gconf, filename, errp);
>      if (!glfs) {
>          ret = -errno;
> @@ -692,6 +721,11 @@ static QemuOptsList qemu_gluster_create_opts = {
>              .type = QEMU_OPT_STRING,
>              .help = "Preallocation mode (allowed values: off, full)"
>          },
> +        {
> +            .name = GLUSTER_OPT_DEBUG,
> +            .type = QEMU_OPT_NUMBER,
> +            .help = "Gluster log level, valid range is 0-9",
> +        },
>          { /* end of list */ }
>      }
>  };
> -- 
> 1.9.3
>
diff mbox

Patch

diff --git a/block/gluster.c b/block/gluster.c
index 51e154c..c6d4892 100644
--- a/block/gluster.c
+++ b/block/gluster.c
@@ -24,6 +24,7 @@  typedef struct GlusterAIOCB {
 typedef struct BDRVGlusterState {
     struct glfs *glfs;
     struct glfs_fd *fd;
+    int debug_level;
 } BDRVGlusterState;
 
 typedef struct GlusterConf {
@@ -32,6 +33,7 @@  typedef struct GlusterConf {
     char *volname;
     char *image;
     char *transport;
+    int debug_level;
 } GlusterConf;
 
 static void qemu_gluster_gconf_free(GlusterConf *gconf)
@@ -194,11 +196,7 @@  static struct glfs *qemu_gluster_init(GlusterConf *gconf, const char *filename,
         goto out;
     }
 
-    /*
-     * TODO: Use GF_LOG_ERROR instead of hard code value of 4 here when
-     * GlusterFS makes GF_LOG_* macros available to libgfapi users.
-     */
-    ret = glfs_set_logging(glfs, "-", 4);
+    ret = glfs_set_logging(glfs, "-", gconf->debug_level);
     if (ret < 0) {
         goto out;
     }
@@ -256,16 +254,26 @@  static void gluster_finish_aiocb(struct glfs_fd *fd, ssize_t ret, void *arg)
     qemu_bh_schedule(acb->bh);
 }
 
+#define GLUSTER_OPT_FILENAME "filename"
+#define GLUSTER_OPT_DEBUG "debug"
+#define GLUSTER_DEBUG_DEFAULT 4
+#define GLUSTER_DEBUG_MAX 9
+
 /* TODO Convert to fine grained options */
 static QemuOptsList runtime_opts = {
     .name = "gluster",
     .head = QTAILQ_HEAD_INITIALIZER(runtime_opts.head),
     .desc = {
         {
-            .name = "filename",
+            .name = GLUSTER_OPT_FILENAME,
             .type = QEMU_OPT_STRING,
             .help = "URL to the gluster image",
         },
+        {
+            .name = GLUSTER_OPT_DEBUG,
+            .type = QEMU_OPT_NUMBER,
+            .help = "Gluster log level, valid range is 0-9",
+        },
         { /* end of list */ }
     },
 };
@@ -306,8 +314,17 @@  static int qemu_gluster_open(BlockDriverState *bs,  QDict *options,
         goto out;
     }
 
-    filename = qemu_opt_get(opts, "filename");
+    filename = qemu_opt_get(opts, GLUSTER_OPT_FILENAME);
 
+    s->debug_level = qemu_opt_get_number(opts, GLUSTER_OPT_DEBUG,
+                                         GLUSTER_DEBUG_DEFAULT);
+    if (s->debug_level < 0) {
+        s->debug_level = 0;
+    } else if (s->debug_level > GLUSTER_DEBUG_MAX) {
+        s->debug_level = GLUSTER_DEBUG_MAX;
+    }
+
+    gconf->debug_level = s->debug_level;
     s->glfs = qemu_gluster_init(gconf, filename, errp);
     if (!s->glfs) {
         ret = -errno;
@@ -346,6 +363,7 @@  static int qemu_gluster_reopen_prepare(BDRVReopenState *state,
                                        BlockReopenQueue *queue, Error **errp)
 {
     int ret = 0;
+    BDRVGlusterState *s;
     BDRVGlusterReopenState *reop_s;
     GlusterConf *gconf = NULL;
     int open_flags = 0;
@@ -353,6 +371,8 @@  static int qemu_gluster_reopen_prepare(BDRVReopenState *state,
     assert(state != NULL);
     assert(state->bs != NULL);
 
+    s = state->bs->opaque;
+
     state->opaque = g_new0(BDRVGlusterReopenState, 1);
     reop_s = state->opaque;
 
@@ -360,6 +380,7 @@  static int qemu_gluster_reopen_prepare(BDRVReopenState *state,
 
     gconf = g_new0(GlusterConf, 1);
 
+    gconf->debug_level = s->debug_level;
     reop_s->glfs = qemu_gluster_init(gconf, state->bs->filename, errp);
     if (reop_s->glfs == NULL) {
         ret = -errno;
@@ -485,6 +506,14 @@  static int qemu_gluster_create(const char *filename,
     char *tmp = NULL;
     GlusterConf *gconf = g_new0(GlusterConf, 1);
 
+    gconf->debug_level = qemu_opt_get_number_del(opts, GLUSTER_OPT_DEBUG,
+                                                 GLUSTER_DEBUG_DEFAULT);
+    if (gconf->debug_level < 0) {
+        gconf->debug_level = 0;
+    } else if (gconf->debug_level > GLUSTER_DEBUG_MAX) {
+        gconf->debug_level = GLUSTER_DEBUG_MAX;
+    }
+
     glfs = qemu_gluster_init(gconf, filename, errp);
     if (!glfs) {
         ret = -errno;
@@ -692,6 +721,11 @@  static QemuOptsList qemu_gluster_create_opts = {
             .type = QEMU_OPT_STRING,
             .help = "Preallocation mode (allowed values: off, full)"
         },
+        {
+            .name = GLUSTER_OPT_DEBUG,
+            .type = QEMU_OPT_NUMBER,
+            .help = "Gluster log level, valid range is 0-9",
+        },
         { /* end of list */ }
     }
 };