[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