diff options
author | Prasanna Kumar Kalever <prasanna.kalever@redhat.com> | 2017-07-06 17:55:00 +0530 |
---|---|---|
committer | Prasanna Kumar Kalever <prasanna.kalever@redhat.com> | 2017-07-06 18:02:26 +0530 |
commit | 70c4e2281fd5d5d693033213ceca751a7d752c70 (patch) | |
tree | fedd570a4161699d78c439dd6f6a1b0bf9a86d9f /rpc | |
parent | 0a21a556523933781151189f0d0f98e2c03268f0 (diff) |
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 <prasanna.kalever@redhat.com>
Diffstat (limited to 'rpc')
-rw-r--r-- | rpc/block_svc_routines.c | 2 | ||||
-rw-r--r-- | rpc/glfs-operations.c | 15 |
2 files changed, 13 insertions, 4 deletions
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; } |