From: Giannakos Filippos Date: Mon, 24 Sep 2012 15:41:51 +0000 (+0300) Subject: fix various bugs X-Git-Tag: debian/0.3.1~155 X-Git-Url: https://code.grnet.gr/git/archipelago/commitdiff_plain/f4b85f41683fd935fb0d4d2c1d2087710725e724 fix various bugs --- diff --git a/xseg/launch b/xseg/launch index d76f83c..f9a4a64 100755 --- a/xseg/launch +++ b/xseg/launch @@ -117,8 +117,8 @@ function spawn_vlmcd { function spawn_mapperdc { pgrep -f "mt-mapperd" || \ - "${XSEG_HOME}/peers/user/mt-mapperd" -t 1 -p "$MPORT" -bp "$BPORT" -g "${SPEC}" \ - &> "${XSEG_LOGS}/mapperd-${HOSTNAME}" & + "${XSEG_HOME}/peers/user/mt-mapperd" -t 1 -p "$MPORT" -bp "$BPORT" -g "${SPEC}"\ + &> "${XSEG_LOGS}/mapperd-${HOSTNAME}" & # alloc_requests "$MPORT:0" 128 } @@ -254,10 +254,10 @@ one) case $2 in start) load_all - sleep 0.5 - spawn_filed + sleep 1 + spawn_filed spawn_mapperdc - spawn_vlmcd + spawn_vlmcd ;; stop) pkill -f peers/user/mt-vlmcd || true diff --git a/xseg/peers/user/mt-mapperd.c b/xseg/peers/user/mt-mapperd.c index 1bf7d43..e831b6c 100644 --- a/xseg/peers/user/mt-mapperd.c +++ b/xseg/peers/user/mt-mapperd.c @@ -135,6 +135,7 @@ static struct map * find_map(struct mapperd *mapper, char *target, uint32_t targ //assert targetlen <= XSEG_MAX_TARGET_LEN strncpy(buf, target, targetlen); buf[targetlen] = 0; + fprintf(stderr, "%s\n", buf); r = xhash_lookup(mapper->hashmaps, (xhashidx) buf, (xhashidx *) &m); if (r < 0) return NULL; @@ -151,6 +152,7 @@ static int insert_map(struct mapperd *mapper, struct map *map) goto out; } + fprintf(stderr, "%s\n", map->volume); r = xhash_insert(mapper->hashmaps, (xhashidx) map->volume, (xhashidx) map); if (r == -XHASH_ERESIZE) { xhashidx shift = xhash_grow_size_shift(map->objects); @@ -704,12 +706,16 @@ static int handle_mapwrite(struct peerd *peer, struct peer_req *pr, //assert req->op = X_WRITE; char *target = xseg_get_target(peer->xseg, req); struct map *map = find_map(mapper, target, req->targetlen); - if (!map) + if (!map) { + fprintf(stderr, "couldn't find map\n"); goto out_err; + } //assert map->flags & MF_MAP_WRITING - if (req->state & XS_FAILED) + if (req->state & XS_FAILED){ + fprintf(stderr, "write request failed\n"); goto out_fail; + } xseg_put_request(peer->xseg, req, peer->portno); map->flags &= ~MF_MAP_WRITING; @@ -733,6 +739,7 @@ out_fail: return 0; out_err: + fprintf(stderr, "asdfasdf\n"); xseg_put_request(peer->xseg, req, peer->portno); return -1; } @@ -754,8 +761,10 @@ static int handle_clone(struct peerd *peer, struct peer_req *pr, if (req->op == X_WRITE){ //assert state = WRITING; r = handle_mapwrite(peer, pr ,req); - if (r < 0) + if (r < 0){ + fprintf(stderr, "handle mapwrite returned error\n"); fail(peer, pr); + } return 0; } @@ -793,7 +802,7 @@ static int handle_clone(struct peerd *peer, struct peer_req *pr, xqindex *qidx = xq_alloc_empty(&clonemap->pending, peer->nr_ops); if (!qidx) goto out_err_objhash; - clonemap->size = xclone->size; + clonemap->size = xclone->size; //assert xlone->size > map->size clonemap->flags = 0; char *target = xseg_get_target(peer->xseg, pr->req); strncpy(clonemap->volume, target, pr->req->targetlen); @@ -1328,6 +1337,7 @@ static int handle_map_delete(struct peerd *peer, struct peer_req *pr, struct mapperd *mapper = __get_mapperd(peer); struct mapper_io *mio = __get_mapper_io(pr); xqindex idx; + int r; if (err) { map->flags &= ~MF_MAP_DELETING; //dispatch all pending @@ -1585,7 +1595,7 @@ int custom_peer_init(struct peerd *peer, int argc, const char *argv[]) void print_obj(struct map_node *mn) { - printf("[%llu]object name: %s[%u] exists: %c\n", mn->objectidx, mn->object, mn->objectlen, + fprintf(stderr, "[%llu]object name: %s[%u] exists: %c\n", mn->objectidx, mn->object, mn->objectlen, (mn->flags & MF_OBJECT_EXIST) ? 'y' : 'n'); } @@ -1594,7 +1604,7 @@ void print_map(struct map *m) uint64_t nr_objs = m->size/block_size; if (m->size % block_size) nr_objs++; - printf("Volume name: %s[%u], size: %llu, nr_objs: %llu\n", + fprintf(stderr, "Volume name: %s[%u], size: %llu, nr_objs: %llu\n", m->volume, m->volumelen, m->size, nr_objs); uint64_t i; struct map_node *mn; diff --git a/xseg/peers/user/vlmc-tool.c b/xseg/peers/user/vlmc-tool.c index 06b2ca8..f22df34 100644 --- a/xseg/peers/user/vlmc-tool.c +++ b/xseg/peers/user/vlmc-tool.c @@ -20,29 +20,27 @@ int safe_strlen(char *s) return -1; for (i = 0; i < MAX_ARG_LEN; i++) { - if (!s) - break; + if (!*s) + return i; s++; } - if (i == MAX_ARG_LEN) - return -1; - - return i; + return -1; } int validate_alphanumeric(char *s) { int i; int len = safe_strlen(s); - if (len < 0) - return -1; + if (len < 0){ + return 0; + } for (i = 0; i < len; i++) { - if (!isalnum(s)) - return -1; + if (!isalnum(*s)) + return 0; s++; } - return 0; + return 1; } int validate_numeric(char *s) @@ -50,14 +48,14 @@ int validate_numeric(char *s) int i; int len = safe_strlen(s); if (len < 0) - return -1; + return 0; for (i = 0; i < len; i++) { - if (!isdigit(s)) - return -1; + if (!isdigit(*s)) + return 0; s++; } - return 0; + return 1; } char *spec = "segdev:xsegbd:16:1024:12"; @@ -124,6 +122,8 @@ int vlmc_create(char *name, uint64_t size, char *snap) xseg_put_request(xseg, req, srcport); return -1; } + char *target = xseg_get_target(xseg, req); + strncpy(target, name, targetlen); struct xseg_request_clone *xclone = (struct xseg_request_clone *) xseg_get_data(xseg, req); if (snaplen < 0) memset(xclone->target, 0, XSEG_MAX_TARGETLEN); @@ -327,6 +327,7 @@ int main(int argc, const char *argv[]) err_in_arg(i, argv[i]); } else { name = argv[i+1]; + i++; } } else { err_in_arg(i, argv[i]); @@ -363,7 +364,7 @@ int main(int argc, const char *argv[]) else if (!strcmp(argv[2], "resize")) ret = vlmc_resize(name, size); else - fprintf(stderr, "Unknown action (%s)\n", argv[2]); + fprintf(stderr, "unknown action (%s)\n", argv[2]); return ret; } diff --git a/xseg/tools/vlmc b/xseg/tools/vlmc index ba8a4cd..a96e0de 100755 --- a/xseg/tools/vlmc +++ b/xseg/tools/vlmc @@ -3,6 +3,7 @@ # vlmc tool import os, sys, subprocess, argparse +from subprocess import call, check_call def vlmc_create(args): name = args.name[0] @@ -13,16 +14,17 @@ def vlmc_create(args): print >> sys.stderr, "At least one of the size/snap args must be provided" sys.exit(-1) - cmd = ["/root/archip_test/xseg/peers/user/vlmc-xseg", "%s" % SPEC, "create", "--name", "%s" % name] + cmd = [XSEG_HOME + "/peers/user/vlmc-xseg", "%s" % SPEC, "create", "--name", "%s" % name] if snap != None: - cmd.extend("--snap", "%s" % snap) + cmd.extend(["--snap", "%s" % snap]) if size != None: - cmd.extend("--size", "%s" % size) - cmd.extend("-mp", "%s" % MPORT) - cmd.extend("-p", "%s" % VTOOL) + cmd.extend(["--size", "%s" % size]) + cmd.extend(["-mp", "%s" % MPORT]) + cmd.extend(["-p", "%s" % VTOOL]) - result = utils.RunCmd(cmd) - if result.failed: + try: + check_call(cmd, stderr=subprocess.STDOUT, shell=False); + except Exception: sys.stderr.write("vlmc creation failed\n") sys.exit(-1) @@ -37,9 +39,9 @@ def vlmc_list(args): def vlmc_remove(args): name = args.name[0] - cmd = ["/root/archip_test/xseg/peers/user/vlmc-xseg", "%s" % SPEC, "remove", "--name", "%s" % name] - cmd.extend("-mp", "%s" % MPORT) - cmd.extend("-p", "%s" % VTOOL) + cmd = [XSEG_HOME + "/peers/user/vlmc-xseg", "%s" % SPEC, "remove", "--name", "%s" % name] + cmd.extend(["-mp", "%s" % MPORT]) + cmd.extend(["-p", "%s" % VTOOL]) result = utils.RunCmd(cmd) if result.failed: sys.stderr.write("vlmc creation failed\n")