[sheepdog] [PATCH v2] sheep/http: add Created-Time for onode

Robin Dong robin.k.dong at gmail.com
Fri Feb 28 07:34:08 CET 2014


From: Robin Dong <sanbai at taobao.com>

At present, we allocate space for an onode and then write data for it,
so we should record two times: 'ctime' means when the onode is created
and allocated space, 'mtime' means when the data of onode have all be
written done.

Signed-off-by: Robin Dong <sanbai at taobao.com>
---
v1-->v2:
  1. write 'flags' and 'mtime' at once.

 sheep/http/kv.c | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/sheep/http/kv.c b/sheep/http/kv.c
index 6f648e3..9559493 100644
--- a/sheep/http/kv.c
+++ b/sheep/http/kv.c
@@ -61,6 +61,7 @@ struct kv_onode {
 			/* a hash value for etag */
 			uint8_t sha1[round_up(SHA1_DIGEST_SIZE, 8)];
 			uint64_t size;
+			uint64_t ctime;
 			uint64_t mtime;
 			uint32_t data_vid;
 			uint32_t nr_extent;
@@ -751,7 +752,7 @@ static int onode_allocate_data(struct kv_onode *onode, struct http_request *req)
 			goto out;
 	}
 
-	onode->mtime = get_seconds();
+	onode->ctime = get_seconds();
 	onode->size = req->data_length;
 out:
 	return ret;
@@ -762,6 +763,9 @@ static int onode_populate_data(struct kv_onode *onode, struct http_request *req)
 	ssize_t size;
 	int ret = SD_RES_SUCCESS, offset;
 
+	onode->mtime = get_seconds();
+	onode->flags = ONODE_COMPLETE;
+
 	if (req->data_length <= KV_ONODE_INLINE_SIZE) {
 		size = http_request_read(req, onode->data, sizeof(onode->data));
 		if (size < 0 || req->data_length != size) {
@@ -778,14 +782,16 @@ static int onode_populate_data(struct kv_onode *onode, struct http_request *req)
 		ret = onode_populate_extents(onode, req);
 		if (ret != SD_RES_SUCCESS)
 			goto out;
+		/* write mtime and flag ONODE_COMPLETE to onode */
+		offset = offsetof(struct kv_onode, flags);
+		ret = sd_write_object(onode->oid, (char *)onode,
+				      offset + sizeof(uint8_t), 0, false);
+		if (ret != SD_RES_SUCCESS) {
+			sd_err("Failed to write mtime and flags of onode %s",
+			       onode->name);
+			goto out;
+		}
 	}
-	/* write ONODE_COMPLETE to onode->flags */
-	onode->flags = ONODE_COMPLETE;
-	offset = offsetof(struct kv_onode, flags);
-	ret = sd_write_object(onode->oid, (char *)onode + offset,
-			      sizeof(uint8_t), offset, false);
-	if (ret != SD_RES_SUCCESS)
-		sd_err("Failed to write flags of onode %s", onode->name);
 out:
 	return ret;
 }
@@ -1330,6 +1336,8 @@ int kv_read_object_meta(struct http_request *req, const char *account,
 		goto out;
 
 	req->data_length = onode->size;
+	http_request_writef(req, "Created: %s\n",
+			    http_time(onode->ctime));
 	http_request_writef(req, "Last-Modified: %s\n",
 			    http_time(onode->mtime));
 
-- 
1.7.12.4




More information about the sheepdog mailing list