[Sheepdog] [PATCH] shepherd: add kill option for debugging
MORITA Kazutaka
morita.kazutaka at lab.ntt.co.jp
Tue Apr 6 11:03:22 CEST 2010
This patch supports killing one node in the sheepdog cluster.
Usage:
$ shepherd debug -o kill [hostname]
Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
---
collie/net.c | 5 +++++
include/sheepdog_proto.h | 1 +
shepherd/shepherd.c | 13 ++++++++++++-
3 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/collie/net.c b/collie/net.c
index 09b2452..4428ee1 100644
--- a/collie/net.c
+++ b/collie/net.c
@@ -40,6 +40,11 @@ static void queue_request(struct request *req)
struct sd_req *hdr = (struct sd_req *)&req->rq;
struct sd_rsp *rsp = (struct sd_rsp *)&req->rp;;
+ if (hdr->opcode == SD_OP_DEBUG_KILL) {
+ log_close();
+ exit(1);
+ }
+
if (sys->status == SD_STATUS_SHUTDOWN) {
rsp->result = SD_RES_SHUTDOWN;
req->done(req);
diff --git a/include/sheepdog_proto.h b/include/sheepdog_proto.h
index a41eb50..f124286 100644
--- a/include/sheepdog_proto.h
+++ b/include/sheepdog_proto.h
@@ -38,6 +38,7 @@
#define SD_OP_DEBUG_INC_NVER 0xA0
#define SD_OP_DEBUG_SET_NODE 0xA1
+#define SD_OP_DEBUG_KILL 0xA2
#define SD_OP_CREATE_AND_WRITE_OBJ 0x01
#define SD_OP_REMOVE_OBJ 0x02
diff --git a/shepherd/shepherd.c b/shepherd/shepherd.c
index 55a4fe0..1949f13 100644
--- a/shepherd/shepherd.c
+++ b/shepherd/shepherd.c
@@ -275,6 +275,8 @@ static int debug(char *op, char *arg)
if (!op)
return 1;
+ strcpy(name, "localhost");
+
if (!strcasecmp(op, "node_version")) {
rlen = 0;
wlen = 0;
@@ -315,10 +317,19 @@ static int debug(char *op, char *arg)
opcode = SD_OP_GET_EPOCH;
flags = 0;
}
+ } else if (!strcasecmp(op, "kill")) {
+ if (!arg) {
+ fprintf(stderr, "specify hostname\n");
+ return 1;
+ }
+ strcpy(name, arg);
+ rlen = 0;
+ wlen = 0;
+ opcode = SD_OP_DEBUG_KILL;
+ flags = 0;
} else
return 1;
- strcpy(name, "localhost");
fd = connect_to(name, sdport);
if (fd < 0)
return -1;
--
1.5.6.5
More information about the sheepdog
mailing list