[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PULL 05/10] block/gluster: add support for selecting debug
From: |
Jeff Cody |
Subject: |
[Qemu-block] [PULL 05/10] block/gluster: add support for selecting debug logging level |
Date: |
Tue, 28 Jun 2016 23:10:39 -0400 |
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)
Reviewed-by: Niels de Vos <address@hidden>
Signed-off-by: Jeff Cody <address@hidden>
---
block/gluster.c | 48 +++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 41 insertions(+), 7 deletions(-)
diff --git a/block/gluster.c b/block/gluster.c
index 38fce9e..16f7778 100644
--- a/block/gluster.c
+++ b/block/gluster.c
@@ -25,6 +25,7 @@ typedef struct BDRVGlusterState {
struct glfs *glfs;
struct glfs_fd *fd;
bool supports_seek_data;
+ int debug_level;
} BDRVGlusterState;
typedef struct GlusterConf {
@@ -33,6 +34,7 @@ typedef struct GlusterConf {
char *volname;
char *image;
char *transport;
+ int debug_level;
} GlusterConf;
static void qemu_gluster_gconf_free(GlusterConf *gconf)
@@ -195,11 +197,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;
}
@@ -257,16 +255,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 */ }
},
};
@@ -329,8 +337,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;
@@ -388,6 +405,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;
@@ -395,6 +413,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;
@@ -402,6 +422,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;
@@ -535,6 +556,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;
@@ -919,6 +948,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
- [Qemu-block] [PULL 00/10] Block patches, Jeff Cody, 2016/06/28
- [Qemu-block] [PULL 01/10] block/gluster: add support for SEEK_DATA/SEEK_HOLE, Jeff Cody, 2016/06/28
- [Qemu-block] [PULL 02/10] block/nfs: refuse readahead if cache.direct is on, Jeff Cody, 2016/06/28
- [Qemu-block] [PULL 03/10] block/nfs: add support for libnfs pagecache, Jeff Cody, 2016/06/28
- [Qemu-block] [PULL 04/10] mirror: fix trace_mirror_yield_in_flight usage in mirror_iteration(), Jeff Cody, 2016/06/28
- [Qemu-block] [PULL 05/10] block/gluster: add support for selecting debug logging level,
Jeff Cody <=
- [Qemu-block] [PULL 06/10] mirror: clarify mirror_do_read return code, Jeff Cody, 2016/06/28
- [Qemu-block] [PULL 07/10] mirror: limit niov to IOV_MAX elements, again, Jeff Cody, 2016/06/28
- [Qemu-block] [PULL 08/10] iotests: add small-granularity mirror test, Jeff Cody, 2016/06/28
- [Qemu-block] [PULL 09/10] blockjob: assert(cb) when create job, Jeff Cody, 2016/06/28
- [Qemu-block] [PULL 10/10] mirror: fix misleading comments, Jeff Cody, 2016/06/28
- Re: [Qemu-block] [PULL 00/10] Block patches, Peter Maydell, 2016/06/29