Fix target names and chunk offsets
authorAlex Pyrgiotis <apyrgio@grnet.gr>
Tue, 19 Feb 2013 16:59:37 +0000 (18:59 +0200)
committerFilippos Giannakos <philipgian@grnet.gr>
Mon, 11 Mar 2013 09:52:29 +0000 (11:52 +0200)
xseg/peers/user/bench-utils.c
xseg/peers/user/bench-xseg.c

index 3af4d99..eb6d93d 100644 (file)
@@ -146,11 +146,14 @@ void create_target(struct bench *prefs, struct xseg_request *req,
 
        req_target = xseg_get_target(xseg, req);
 
-       if (prefs->op == X_READ || prefs->op == X_WRITE)
-               new %= prefs->os;
+       //For read/write, the target object does not correspond to `new`, which is
+       //actually the chunk number. We need to div this number with the number of
+       //chunks in an object.
        //FIXME: Make it more elegant
+       if (prefs->op == X_READ || prefs->op == X_WRITE)
+               new = new / (prefs->os / prefs->ts);
        snprintf(req_target, TARGETLEN, "%s-%016lu", global_id, new);
-       XSEGLOG2(&lc, D, "Target name of request %lu is %s\n", new, req_target);
+       XSEGLOG2(&lc, D, "Target name of request is %s\n", req_target);
 }
 
 void create_chunk(struct bench *prefs, struct xseg_request *req, uint64_t new)
@@ -166,7 +169,7 @@ void create_chunk(struct bench *prefs, struct xseg_request *req, uint64_t new)
 uint64_t determine_next(struct bench *prefs)
 {
        if ((prefs->flags & PATTERN_FLAG) == IO_SYNC)
-               return prefs->sub_tm->completed + 1;
+               return prefs->sub_tm->completed;
        else {
                return lfsr_next(prefs->lfsr);
        }
index f81f22a..d0681ea 100644 (file)
@@ -377,6 +377,7 @@ static int send_request(struct peerd *peer, struct bench *prefs)
                req->size = size;
                //Calculate the chunk offset inside the object
                req->offset = (new * prefs->bs) % prefs->os;
+               XSEGLOG2(&lc, D, "Offset of request %lu is %lu\n", new, req->offset);
 
                if(prefs->op == X_WRITE)
                        create_chunk(prefs, req, new);