- use sd_inode helper to update inode correctly
- pass system copy_policy when creating bucket

Signed-off-by: Liu Yuan <[email protected]>
---
 -set 'direct' as false for sd_inode_write_vid()

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

diff --git a/sheep/http/kv.c b/sheep/http/kv.c
index 39fb294..1cd8885 100644
--- a/sheep/http/kv.c
+++ b/sheep/http/kv.c
@@ -60,6 +60,8 @@ int kv_create_bucket(struct http_request *req, const char 
*bucket)
 
        hdr.vdi.vdi_size = SD_MAX_VDI_SIZE;
        hdr.vdi.copies = sys->cinfo.nr_copies;
+       hdr.vdi.copy_policy = sys->cinfo.copy_policy;
+       hdr.vdi.store_policy = 1;
 
        ret = exec_local_req(&hdr, buf);
        switch (ret) {
@@ -221,10 +223,20 @@ static int do_kv_create_object(struct http_request *req, 
const char *obj_name,
 
        if (memcmp(&hdr, &obj->hdr, sizeof(hdr)) == 0) {
                /* update inode object */
-               uint64_t offset = offsetof(struct sd_inode, data_vdi_id)
-                       + idx * sizeof(vid);
-               ret = write_object(vid_to_vdi_oid(vid), (char *)&vid,
-                                  sizeof(vid), offset, false);
+               struct sd_inode *inode = xmalloc(sizeof(struct sd_inode));
+
+               ret = read_object(vid_to_vdi_oid(vid), (char *)inode,
+                                 sizeof(*inode), 0);
+               if (ret != SD_RES_SUCCESS) {
+                       sd_err("failed to read inode, %" PRIx64,
+                              vid_to_vdi_oid(vid));
+                       free(inode);
+                       goto err;
+               }
+               INODE_SET_VID(inode, idx, vid);
+               ret = sd_inode_write_vid(sheep_bnode_writer, inode, idx,
+                                        vid, vid, 0, false, false);
+               free(inode);
                if (ret != SD_RES_SUCCESS) {
                        sd_err("failed to update inode, %" PRIx64,
                               vid_to_vdi_oid(vid));
-- 
1.7.9.5

-- 
sheepdog mailing list
[email protected]
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to