[sheepdog] [PATCH stable-0.7 1/2] add INFO level operation logging on each node.
Hitoshi Mitake
mitake.hitoshi at lab.ntt.co.jp
Fri Feb 7 02:55:21 CET 2014
From: Yoshinori Matsuo <matsuo.yoshinori at lab.ntt.co.jp>
Administrator couldn't track operation on each node without this function.
This function logs only administrative operation at rx_main and tx_main.
Operations that is not related to administrative operation are not
logged in this function. such as read/write etc.
Signed-off-by: Yoshinori Matsuo <matsuo.yoshinori at lab.ntt.co.jp>
Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
---
sheep/ops.c | 22 ++++++++++++++++++++++
sheep/request.c | 28 +++++++++++++++++++++++++++-
sheep/sheep_priv.h | 1 +
3 files changed, 50 insertions(+), 1 deletion(-)
diff --git a/sheep/ops.c b/sheep/ops.c
index 75b07f6..1a35a21 100644
--- a/sheep/ops.c
+++ b/sheep/ops.c
@@ -27,6 +27,12 @@ struct sd_op_template {
bool force;
/*
+ * Indicates administrative operation to trace.
+ * If true is set, rx_main and tx_main log operations at info level.
+ */
+ bool is_admin_op;
+
+ /*
* process_work() will be called in a worker thread, and process_main()
* will be called in the main thread.
*
@@ -1011,6 +1017,7 @@ static struct sd_op_template sd_ops[] = {
[SD_OP_NEW_VDI] = {
.name = "NEW_VDI",
.type = SD_OP_TYPE_CLUSTER,
+ .is_admin_op = true,
.process_work = cluster_new_vdi,
.process_main = post_cluster_new_vdi,
},
@@ -1018,6 +1025,7 @@ static struct sd_op_template sd_ops[] = {
[SD_OP_DEL_VDI] = {
.name = "DEL_VDI",
.type = SD_OP_TYPE_CLUSTER,
+ .is_admin_op = true,
.process_work = cluster_del_vdi,
.process_main = post_cluster_del_vdi,
},
@@ -1026,6 +1034,7 @@ static struct sd_op_template sd_ops[] = {
.name = "MAKE_FS",
.type = SD_OP_TYPE_CLUSTER,
.force = true,
+ .is_admin_op = true,
.process_main = cluster_make_fs,
},
@@ -1033,6 +1042,7 @@ static struct sd_op_template sd_ops[] = {
.name = "SHUTDOWN",
.type = SD_OP_TYPE_CLUSTER,
.force = true,
+ .is_admin_op = true,
.process_main = cluster_shutdown,
},
@@ -1046,6 +1056,7 @@ static struct sd_op_template sd_ops[] = {
.name = "FORCE_RECOVER",
.type = SD_OP_TYPE_CLUSTER,
.force = true,
+ .is_admin_op = true,
.process_work = cluster_force_recover_work,
.process_main = cluster_force_recover_main,
},
@@ -1099,18 +1110,21 @@ static struct sd_op_template sd_ops[] = {
[SD_OP_REWEIGHT] = {
.name = "REWEIGHT",
.type = SD_OP_TYPE_CLUSTER,
+ .is_admin_op = true,
.process_main = cluster_reweight,
},
[SD_OP_ENABLE_RECOVER] = {
.name = "ENABLE_RECOVER",
.type = SD_OP_TYPE_CLUSTER,
+ .is_admin_op = true,
.process_main = cluster_enable_recover,
},
[SD_OP_DISABLE_RECOVER] = {
.name = "DISABLE_RECOVER",
.type = SD_OP_TYPE_CLUSTER,
+ .is_admin_op = true,
.process_main = cluster_disable_recover,
},
@@ -1230,6 +1244,7 @@ static struct sd_op_template sd_ops[] = {
.name = "KILL_NODE",
.type = SD_OP_TYPE_LOCAL,
.force = true,
+ .is_admin_op = true,
.process_main = local_kill_node,
},
@@ -1242,12 +1257,14 @@ static struct sd_op_template sd_ops[] = {
[SD_OP_MD_PLUG] = {
.name = "MD_PLUG_DISKS",
.type = SD_OP_TYPE_LOCAL,
+ .is_admin_op = true,
.process_main = local_md_plug,
},
[SD_OP_MD_UNPLUG] = {
.name = "MD_UNPLUG_DISKS",
.type = SD_OP_TYPE_LOCAL,
+ .is_admin_op = true,
.process_main = local_md_unplug,
},
@@ -1366,6 +1383,11 @@ bool is_force_op(const struct sd_op_template *op)
return !!op->force;
}
+bool is_logging_op(const struct sd_op_template *op)
+{
+ return !!op->is_admin_op;
+}
+
bool has_process_work(const struct sd_op_template *op)
{
return !!op->process_work;
diff --git a/sheep/request.c b/sheep/request.c
index 29781cc..fbdc904 100644
--- a/sheep/request.c
+++ b/sheep/request.c
@@ -580,7 +580,19 @@ static void rx_main(struct work *work)
conn_rx_on(&ci->conn);
- sd_debug("%d, %s:%d", ci->conn.fd, ci->conn.ipstr, ci->conn.port);
+ if (is_logging_op(get_sd_op(req->rq.opcode))) {
+ sd_info("req=%p, fd=%d, client=%s:%d, op=%s, data=%s",
+ req,
+ ci->conn.fd,
+ ci->conn.ipstr, ci->conn.port,
+ op_name(get_sd_op(req->rq.opcode)),
+ (char *)req->data);
+ } else {
+ sd_debug("%d, %s:%d",
+ ci->conn.fd,
+ ci->conn.ipstr,
+ ci->conn.port);
+ }
queue_request(req);
}
@@ -619,6 +631,20 @@ static void tx_main(struct work *work)
refcount_dec(&ci->refcnt);
+ if (is_logging_op(ci->tx_req->op)) {
+ sd_info("req=%p, fd=%d, client=%s:%d, op=%s, result=%02X",
+ ci->tx_req,
+ ci->conn.fd,
+ ci->conn.ipstr,
+ ci->conn.port,
+ op_name(ci->tx_req->op),
+ ci->tx_req->rp.result);
+ } else {
+ sd_debug("%d, %s:%d",
+ ci->conn.fd,
+ ci->conn.ipstr,
+ ci->conn.port);
+ }
free_request(ci->tx_req);
ci->tx_req = NULL;
diff --git a/sheep/sheep_priv.h b/sheep/sheep_priv.h
index 2199284..19db37e 100644
--- a/sheep/sheep_priv.h
+++ b/sheep/sheep_priv.h
@@ -373,6 +373,7 @@ bool is_local_op(const struct sd_op_template *op);
bool is_peer_op(const struct sd_op_template *op);
bool is_gateway_op(const struct sd_op_template *op);
bool is_force_op(const struct sd_op_template *op);
+bool is_logging_op(const struct sd_op_template *op);
bool has_process_work(const struct sd_op_template *op);
bool has_process_main(const struct sd_op_template *op);
void do_process_work(struct work *work);
--
1.7.10.4
More information about the sheepdog
mailing list