From 70c4e2281fd5d5d693033213ceca751a7d752c70 Mon Sep 17 00:00:00 2001 From: Prasanna Kumar Kalever Date: Thu, 6 Jul 2017 17:55:00 +0530 Subject: create: clean metafile along with storage when EntryCreate fails As of now, if an EntryCreate (backend storage create) fails for some reasons like no space left, we only clean storage, leaving metafile. This patch will delete metafile along with backend storage from the volume. Change-Id: I89247b98602c5b991367f671134de496c294f984 Fixes: #32 Signed-off-by: Prasanna Kumar Kalever --- rpc/block_svc_routines.c | 2 -- rpc/glfs-operations.c | 15 +++++++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) (limited to 'rpc') diff --git a/rpc/block_svc_routines.c b/rpc/block_svc_routines.c index c26b2b3..0a98568 100644 --- a/rpc/block_svc_routines.c +++ b/rpc/block_svc_routines.c @@ -1795,8 +1795,6 @@ block_create_cli_1_svc(blockCreateCli *blk, struct svc_req *rqstp) blk->volume, gbid, blk->size, blk->mpath); if (glusterBlockCreateEntry(glfs, blk, gbid, &errCode, &errMsg)) { - GB_METAUPDATE_OR_GOTO(lock, glfs, blk->block_name, blk->volume, - errCode, errMsg, exist, "ENTRYCREATE: FAIL\n"); LOG("mgmt", GB_LOG_ERROR, "%s volume: %s host: %s", FAILED_CREATING_FILE, blk->volume, blk->block_hosts); goto exist; diff --git a/rpc/glfs-operations.c b/rpc/glfs-operations.c index db02620..0509f7f 100644 --- a/rpc/glfs-operations.c +++ b/rpc/glfs-operations.c @@ -91,6 +91,7 @@ glusterBlockCreateEntry(struct glfs *glfs, blockCreateCli *blk, char *gbid, int *errCode, char **errMsg) { struct glfs_fd *tgfd; + char *tmp; int ret; ret = glfs_mkdir (glfs, GB_STOREDIR, 0); @@ -162,9 +163,19 @@ unlink: out: if (ret) { - GB_ASPRINTF (errMsg, "Not able to create metadata for %s/%s[%s]", blk->volume, - blk->block_name, strerror(*errCode)); + GB_ASPRINTF (errMsg, "Not able to create storage for %s/%s [%s]", + blk->volume, blk->block_name, strerror(*errCode)); + + GB_ASPRINTF(&tmp, "%s/%s", GB_METADIR, blk->block_name); + + if (glfs_unlink(glfs, tmp) && errno != ENOENT) { + LOG("gfapi", GB_LOG_ERROR, + "glfs_unlink(%s) on volume %s for block %s failed[%s]", + tmp, blk->volume, blk->block_name, strerror(errno)); + } + GB_FREE(tmp); } + return ret; } -- cgit