[Sheepdog] [PATCH] sheep: fix read_copy_from_cluster()

Liu Yuan namei.unix at gmail.com
Fri Apr 13 15:54:14 CEST 2012


From: Liu Yuan <tailai.ly at taobao.com>

We should pass nr_vnodes to the obj_to_sheep()

- rename read_copy_from_replica to get better consistent naming

Signed-off-by: Liu Yuan <tailai.ly at taobao.com>
---
 sheep/store.c |   13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/sheep/store.c b/sheep/store.c
index b50ce22..81555ba 100644
--- a/sheep/store.c
+++ b/sheep/store.c
@@ -197,10 +197,10 @@ int get_obj_list(const struct sd_list_req *hdr, struct sd_list_rsp *rsp, void *d
 	return res;
 }
 
-static int read_copy_from_cluster(struct request *req, uint32_t epoch,
+static int read_copy_from_replica(struct request *req, uint32_t epoch,
 				  uint64_t oid, char *buf)
 {
-	int i, n, nr, ret;
+	int i, n, nr, nr_vnodes, ret;
 	unsigned wlen, rlen;
 	char name[128];
 	struct sd_vnode *e;
@@ -210,12 +210,14 @@ static int read_copy_from_cluster(struct request *req, uint32_t epoch,
 	int fd;
 
 	e = req->entry;
+	nr_vnodes = req->nr_vnodes;
+
 	nr = sys->nr_sobjs;
 	if (nr > req->nr_zones)
 		nr = req->nr_zones;
 
 	for (i = 0; i < nr; i++) {
-		n = obj_to_sheep(e, nr, oid, i);
+		n = obj_to_sheep(e, nr_vnodes, oid, i);
 
 		addr_to_str(name, sizeof(name), e[n].addr, 0);
 
@@ -255,6 +257,7 @@ static int read_copy_from_cluster(struct request *req, uint32_t epoch,
 
 		close(fd);
 
+		dprintf("%x, %x\n", ret, rsp->result);
 		if (ret)
 			continue;
 
@@ -712,7 +715,7 @@ int store_create_and_write_obj(const struct sd_req *req, struct sd_rsp *rsp, voi
 	if (ret != SD_RES_SUCCESS)
 		return ret;
 	if (hdr->flags & SD_FLAG_CMD_COW) {
-		dprintf("%" PRIu64 ", %" PRIx64 "\n", hdr->oid, hdr->cow_oid);
+		dprintf("%" PRIx64 ", %" PRIx64 "\n", hdr->oid, hdr->cow_oid);
 
 		buf = valloc(SD_DATA_OBJ_SIZE);
 		if (!buf) {
@@ -720,7 +723,7 @@ int store_create_and_write_obj(const struct sd_req *req, struct sd_rsp *rsp, voi
 			goto out;
 		}
 		if (hdr->data_length != SD_DATA_OBJ_SIZE) {
-			ret = read_copy_from_cluster(request, hdr->epoch, hdr->cow_oid, buf);
+			ret = read_copy_from_replica(request, hdr->epoch, hdr->cow_oid, buf);
 			if (ret != SD_RES_SUCCESS) {
 				eprintf("failed to read cow object\n");
 				goto out;
-- 
1.7.8.2




More information about the sheepdog mailing list