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 <jc...@redhat.com>
Thanks, this is something I wanted to get done for a long time already. Reviewed-by: Niels de Vos <nde...@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 >