summaryrefslogtreecommitdiffstats
path: root/rpc
diff options
context:
space:
mode:
authorPrasanna Kumar Kalever <prasanna.kalever@redhat.com>2017-07-06 17:55:00 +0530
committerPrasanna Kumar Kalever <prasanna.kalever@redhat.com>2017-07-06 18:02:26 +0530
commit70c4e2281fd5d5d693033213ceca751a7d752c70 (patch)
treefedd570a4161699d78c439dd6f6a1b0bf9a86d9f /rpc
parent0a21a556523933781151189f0d0f98e2c03268f0 (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.c2
-rw-r--r--rpc/glfs-operations.c15
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;
}