Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp> --- collie/net.c | 32 ++++++++++++++++++++++++++++++++ shepherd/shepherd.c | 18 +++++++++++++----- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/collie/net.c b/collie/net.c index 9a942c4..9c89b64 100644 --- a/collie/net.c +++ b/collie/net.c @@ -39,6 +39,36 @@ static void __done(struct work *work, int idx) 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 (sys->status == SD_STATUS_SHUTDOWN) { + rsp->result = SD_RES_SHUTDOWN; + req->done(req); + return; + } + + if (sys->status & SD_STATUS_ERROR_MASK) { + rsp->result = SD_RES_SYSTEM_ERROR; + req->done(req); + return; + } + + if (sys->status & SD_STATUS_STARTUP_MASK) { + /* TODO: cleanup */ + switch (hdr->opcode) { + case SD_OP_STAT_CLUSTER: + case SD_OP_MAKE_FS: + case SD_OP_GET_NODE_LIST: + case SD_OP_SO: + case SD_OP_GET_EPOCH_LIST: + case SD_OP_READ_EPOCH: + break; + default: + rsp->result = SD_RES_STARTUP; + req->done(req); + return; + } + } switch (hdr->opcode) { case SD_OP_CREATE_AND_WRITE_OBJ: @@ -75,6 +105,8 @@ static void queue_request(struct request *req) break; default: eprintf("unknown operation %d\n", hdr->opcode); + rsp->result = SD_RES_SYSTEM_ERROR; + req->done(req); return; } diff --git a/shepherd/shepherd.c b/shepherd/shepherd.c index 77c1c00..c2c7db9 100644 --- a/shepherd/shepherd.c +++ b/shepherd/shepherd.c @@ -1297,14 +1297,22 @@ int main(int argc, char **argv) if (optind >= argc) usage(0); - node_list_entries = zalloc(SD_MAX_NODES * sizeof(struct sheepdog_node_list_entry)); - ret = update_node_list(SD_MAX_NODES, epoch); - if (ret < 0) - return 1; - command = argv[optind++]; + /* TODO: cleanup */ + if (strcasecmp(command, "mkfs") == 0) + ; + else if (strcasecmp(command, "info") == 0 && type == INFO_CLUSTER) + ; + else if (strcasecmp(command, "info") == 0 && type == INFO_EPOCH) + ; + else { + ret = update_node_list(SD_MAX_NODES, epoch); + if (ret < 0) + return 1; + } + if (!strcasecmp(command, "info")) { char *name = NULL; -- 1.5.6.5 |