summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/mgmt/glusterd')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-handshake.c2
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-snapshot-utils.h2
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-snapshot.c54
-rw-r--r--xlators/mgmt/glusterd/src/glusterd.h3
4 files changed, 44 insertions, 17 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-handshake.c b/xlators/mgmt/glusterd/src/glusterd-handshake.c
index 6471a9537ba..dc772ca6f51 100644
--- a/xlators/mgmt/glusterd/src/glusterd-handshake.c
+++ b/xlators/mgmt/glusterd/src/glusterd-handshake.c
@@ -619,7 +619,7 @@ glusterd_create_missed_snap (glusterd_missed_snap_info *missed_snapinfo,
/* Create and mount the snap brick */
ret = glusterd_snap_brick_create (snap_vol, brickinfo,
- snap_opinfo->brick_num - 1);
+ snap_opinfo->brick_num - 1, 0);
if (ret) {
gf_msg (this->name, GF_LOG_ERROR, 0,
GD_MSG_BRICK_CREATION_FAIL, "Failed to "
diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.h b/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.h
index b964a438623..e0501662b9c 100644
--- a/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.h
+++ b/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.h
@@ -137,7 +137,7 @@ glusterd_snap_quorum_check (dict_t *dict, gf_boolean_t snap_volume,
int32_t
glusterd_snap_brick_create (glusterd_volinfo_t *snap_volinfo,
glusterd_brickinfo_t *brickinfo,
- int32_t brick_count);
+ int32_t brick_count, int32_t clone);
int
glusterd_snapshot_restore_cleanup (dict_t *rsp_dict,
diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot.c b/xlators/mgmt/glusterd/src/glusterd-snapshot.c
index dee31563d38..ae70bc81c2c 100644
--- a/xlators/mgmt/glusterd/src/glusterd-snapshot.c
+++ b/xlators/mgmt/glusterd/src/glusterd-snapshot.c
@@ -2321,6 +2321,7 @@ glusterd_snapshot_clone_prevalidate (dict_t *dict, char **op_errstr,
{
char *clonename = NULL;
char *snapname = NULL;
+ char device_name[64] = "";
char key[PATH_MAX] = "";
glusterd_snap_t *snap = NULL;
char err_str[PATH_MAX] = "";
@@ -2386,10 +2387,12 @@ glusterd_snapshot_clone_prevalidate (dict_t *dict, char **op_errstr,
goto out;
}
+ GLUSTERD_GET_UUID_NOHYPHEN (device_name, *snap_volid);
+
/* Adding snap bricks mount paths to the dict */
ret = glusterd_snap_create_clone_common_prevalidate (rsp_dict, 0,
snapname, err_str,
- clonename, 1,
+ device_name, 1,
snap_vol,
&loglevel,
1, op_errno);
@@ -4744,11 +4747,12 @@ out:
int32_t
glusterd_snap_brick_create (glusterd_volinfo_t *snap_volinfo,
glusterd_brickinfo_t *brickinfo,
- int32_t brick_count)
+ int32_t brick_count, int32_t clone)
{
int32_t ret = -1;
xlator_t *this = NULL;
char snap_brick_mount_path[PATH_MAX] = "";
+ char clone_uuid[64] = "";
struct stat statbuf = {0, };
this = THIS;
@@ -4756,9 +4760,16 @@ glusterd_snap_brick_create (glusterd_volinfo_t *snap_volinfo,
GF_ASSERT (snap_volinfo);
GF_ASSERT (brickinfo);
- snprintf (snap_brick_mount_path, sizeof (snap_brick_mount_path),
- "%s/%s/brick%d", snap_mount_dir, snap_volinfo->volname,
- brick_count + 1);
+ if (clone) {
+ GLUSTERD_GET_UUID_NOHYPHEN(clone_uuid, snap_volinfo->volume_id);
+ snprintf (snap_brick_mount_path, sizeof (snap_brick_mount_path),
+ "%s/%s/brick%d", snap_mount_dir,
+ clone_uuid, brick_count + 1);
+ } else {
+ snprintf (snap_brick_mount_path, sizeof (snap_brick_mount_path),
+ "%s/%s/brick%d", snap_mount_dir,
+ snap_volinfo->volname, brick_count + 1);
+ }
ret = mkdir_p (snap_brick_mount_path, 0777, _gf_true);
if (ret) {
@@ -4833,6 +4844,7 @@ glusterd_add_brick_to_snap_volume (dict_t *dict, dict_t *rsp_dict,
char *value = NULL;
char *snap_brick_dir = NULL;
char snap_brick_path[PATH_MAX] = "";
+ char clone_uuid[64] = "";
char *snap_device = NULL;
glusterd_brickinfo_t *snap_brickinfo = NULL;
gf_boolean_t add_missed_snap = _gf_false;
@@ -4948,10 +4960,18 @@ glusterd_add_brick_to_snap_volume (dict_t *dict, dict_t *rsp_dict,
/* Create brick-path in the format /var/run/gluster/snaps/ *
* <snap-uuid>/<original-brick#>/snap-brick-dir *
*/
- snprintf (snap_brick_path, sizeof(snap_brick_path),
- "%s/%s/brick%d%s", snap_mount_dir,
- snap_vol->volname, brick_count+1,
- snap_brick_dir);
+ if (clone) {
+ GLUSTERD_GET_UUID_NOHYPHEN(clone_uuid, snap_vol->volume_id);
+ snprintf (snap_brick_path, sizeof(snap_brick_path),
+ "%s/%s/brick%d%s", snap_mount_dir,
+ clone_uuid, brick_count+1,
+ snap_brick_dir);
+ } else {
+ snprintf (snap_brick_path, sizeof(snap_brick_path),
+ "%s/%s/brick%d%s", snap_mount_dir,
+ snap_vol->volname, brick_count+1,
+ snap_brick_dir);
+ }
snprintf (key, sizeof(key), "vol%"PRId64".brick_snapdevice%d",
volcount, brick_count);
@@ -5093,7 +5113,8 @@ out:
static int32_t
glusterd_take_brick_snapshot (dict_t *dict, glusterd_volinfo_t *snap_vol,
glusterd_brickinfo_t *brickinfo,
- int32_t volcount, int32_t brick_count)
+ int32_t volcount, int32_t brick_count,
+ int32_t clone)
{
char *origin_brick_path = NULL;
char key[PATH_MAX] = "";
@@ -5149,7 +5170,8 @@ glusterd_take_brick_snapshot (dict_t *dict, glusterd_volinfo_t *snap_vol,
}
/* create the complete brick here */
- ret = glusterd_snap_brick_create (snap_vol, brickinfo, brick_count);
+ ret = glusterd_snap_brick_create (snap_vol, brickinfo,
+ brick_count, clone);
if (ret) {
gf_msg (this->name, GF_LOG_ERROR, 0,
GD_MSG_BRICK_CREATION_FAIL, "not able to"
@@ -6425,7 +6447,8 @@ out:
int
glusterd_take_brick_snapshot_task (void *opaque)
{
- int ret = 0;
+ int ret = 0;
+ int32_t clone = 0;
snap_create_args_t *snap_args = NULL;
char *clonename = NULL;
char key[PATH_MAX] = "";
@@ -6441,15 +6464,18 @@ glusterd_take_brick_snapshot_task (void *opaque)
if (ret) {
snprintf (key, sizeof (key), "snap-vol%d.brick%d.status",
snap_args->volcount, snap_args->brickorder);
- } else
+ } else {
snprintf (key, sizeof (key), "clone%d.brick%d.status",
snap_args->volcount, snap_args->brickorder);
+ clone = 1;
+ }
ret = glusterd_take_brick_snapshot (snap_args->dict,
snap_args->snap_vol,
snap_args->brickinfo,
snap_args->volcount,
- snap_args->brickorder);
+ snap_args->brickorder,
+ clone);
if (ret) {
gf_msg (THIS->name, GF_LOG_ERROR, 0,
diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h
index 333a099faa1..919eed02ec6 100644
--- a/xlators/mgmt/glusterd/src/glusterd.h
+++ b/xlators/mgmt/glusterd/src/glusterd.h
@@ -695,7 +695,8 @@ typedef ssize_t (*gd_serialize_t) (struct iovec outmsg, void *args);
#define GLUSTERD_GET_UUID_NOHYPHEN(ret_string, uuid) do { \
char *snap_volname_ptr = ret_string; \
- char *snap_volid_ptr = uuid_utoa(uuid); \
+ char tmp_uuid[64]; \
+ char *snap_volid_ptr = uuid_utoa_r(uuid, tmp_uuid); \
while (*snap_volid_ptr) { \
if (*snap_volid_ptr == '-') { \
snap_volid_ptr++; \