[sheepdog] [PATCH] sheep: remove delete_error from vdi deletion_work
levin li
levin108 at gmail.com
Wed Jun 27 04:05:33 CEST 2012
From: levin li <xingke.lwp at taobao.com>
Since we've made gateway to retry when removing an object fail
during recovery, the most possible case that make remove_object
fail is that we meet an EIO, in which case even if we try to
delete again the error still exist, so delete_error is no longer
needed.
Signed-off-by: levin li <xingke.lwp at taobao.com>
---
sheep/vdi.c | 20 +++++++++-----------
1 file changed, 9 insertions(+), 11 deletions(-)
diff --git a/sheep/vdi.c b/sheep/vdi.c
index 76a7128..cc35ca7 100644
--- a/sheep/vdi.c
+++ b/sheep/vdi.c
@@ -387,7 +387,6 @@ struct deletion_work {
uint32_t *buf;
struct vnode_info *vnodes;
- int delete_error;
};
static LIST_HEAD(deletion_work_list);
@@ -460,31 +459,30 @@ static void delete_one(struct work *work)
goto out;
for (i = 0; i < MAX_DATA_OBJS; i++) {
+ uint64_t oid;
+
if (!inode->data_vdi_id[i])
continue;
+ oid = vid_to_data_oid(inode->data_vdi_id[i], i);
+
if (inode->data_vdi_id[i] != inode->vdi_id) {
dprintf("object %" PRIx64 " is base's data, would not be deleted.\n",
- vid_to_data_oid(inode->data_vdi_id[i], i));
+ oid);
continue;
}
- ret = remove_object(dw->vnodes, dw->epoch,
- vid_to_data_oid(inode->data_vdi_id[i], i),
- nr_copies);
+ ret = remove_object(dw->vnodes, dw->epoch, oid, nr_copies);
if (ret != SD_RES_SUCCESS)
- dw->delete_error = 1;
- else
- inode->data_vdi_id[i] = 0;
+ eprintf("remove object %" PRIx64 " fail, %d\n", oid, ret);
}
- if (!dw->delete_error && *(inode->name) == '\0')
+ if (*(inode->name) == '\0')
goto out;
inode->vdi_size = 0;
- if (!dw->delete_error)
- memset(inode->name, 0, sizeof(inode->name));
+ memset(inode->name, 0, sizeof(inode->name));
write_object(dw->vnodes, dw->epoch, vid_to_vdi_oid(vdi_id),
(void *)inode, sizeof(*inode), 0, 0, nr_copies, 0);
--
1.7.10
More information about the sheepdog
mailing list