[Sheepdog] [PATCH 1/3] sheep: set error reason in read_object()

MORITA Kazutaka morita.kazutaka at lab.ntt.co.jp
Tue Feb 15 18:28:40 CET 2011


Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
---
 sheep/sdnet.c |   17 +++++++++++------
 sheep/store.c |    5 ++++-
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/sheep/sdnet.c b/sheep/sdnet.c
index e043b78..3b1a554 100644
--- a/sheep/sdnet.c
+++ b/sheep/sdnet.c
@@ -645,7 +645,7 @@ int read_object(struct sheepdog_node_list_entry *e,
 	struct sd_obj_req hdr;
 	struct sd_obj_rsp *rsp = (struct sd_obj_rsp *)&hdr;
 	char name[128];
-	int i = 0, n, fd, ret;
+	int i = 0, n, fd, ret, last_error = SD_RES_SUCCESS;
 
 	if (nr > nodes)
 		nr = nodes;
@@ -680,7 +680,7 @@ int read_object(struct sheepdog_node_list_entry *e,
 		if (fd < 0) {
 			printf("%s(%d): %s, %m\n", __func__, __LINE__,
 			       name);
-			return -1;
+			return -SD_RES_EIO;
 		}
 
 		memset(&hdr, 0, sizeof(hdr));
@@ -695,13 +695,18 @@ int read_object(struct sheepdog_node_list_entry *e,
 		ret = exec_req(fd, (struct sd_req *)&hdr, data, &wlen, &rlen);
 		close(fd);
 
-		if (!ret) {
-			if (rsp->result == SD_RES_SUCCESS)
-				return rsp->data_length;
+		if (ret) {
+			last_error = SD_RES_EIO;
+			continue;
 		}
+
+		if (rsp->result == SD_RES_SUCCESS)
+			return rsp->data_length;
+
+		last_error = rsp->result;
 	}
 
-	return -1;
+	return -last_error;
 }
 
 int remove_object(struct sheepdog_node_list_entry *e,
diff --git a/sheep/store.c b/sheep/store.c
index d454a4f..7ff134d 100644
--- a/sheep/store.c
+++ b/sheep/store.c
@@ -605,7 +605,10 @@ int read_object_local(uint64_t oid, char *data, unsigned int datalen,
 
 	ret = store_queue_request_local(&req, epoch);
 
-	if (ret != 0 || rsp->data_length != datalen)
+	if (ret != 0)
+		return -SD_RES_EIO;
+
+	if (rsp->data_length != datalen)
 		return -rsp->result;
 
 	return rsp->data_length;
-- 
1.5.6.5




More information about the sheepdog mailing list