fix various bugs
authorGiannakos Filippos <philipgian@grnet.gr>
Mon, 24 Sep 2012 15:41:51 +0000 (18:41 +0300)
committerGiannakos Filippos <philipgian@grnet.gr>
Mon, 24 Sep 2012 15:41:51 +0000 (18:41 +0300)
xseg/launch
xseg/peers/user/mt-mapperd.c
xseg/peers/user/vlmc-tool.c
xseg/tools/vlmc

index d76f83c..f9a4a64 100755 (executable)
@@ -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
index 1bf7d43..e831b6c 100644 (file)
@@ -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;
index 06b2ca8..f22df34 100644 (file)
@@ -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;
 }
index ba8a4cd..a96e0de 100755 (executable)
@@ -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")