snapshot : remove stale entry
During snap delete after removing brick-path we should remove snap-path too i.e. /var/run/gluster/snaps/<snap-name>. During snap deactivate also we should remove snap-path. Change-Id: Ib80b5d8844d6479d31beafa732e5671b0322248b fixes: bz#1597662 Signed-off-by: Sunny Kumar <sunkumar@redhat.com>
This commit is contained in:
parent
e893eb1b23
commit
b32ad78516
57
tests/bugs/snapshot/bug-1597662.t
Normal file
57
tests/bugs/snapshot/bug-1597662.t
Normal file
@ -0,0 +1,57 @@
|
||||
#!/bin/bash
|
||||
|
||||
. $(dirname $0)/../../include.rc
|
||||
. $(dirname $0)/../../volume.rc
|
||||
. $(dirname $0)/../../snapshot.rc
|
||||
|
||||
cleanup;
|
||||
|
||||
TEST init_n_bricks 3;
|
||||
TEST setup_lvm 3;
|
||||
TEST glusterd;
|
||||
TEST pidof glusterd;
|
||||
|
||||
TEST $CLI volume create $V0 $H0:$L1 $H0:$L2 $H0:$L3;
|
||||
TEST $CLI volume start $V0;
|
||||
|
||||
snap_path=/var/run/gluster/snaps
|
||||
|
||||
TEST $CLI snapshot create snap1 $V0 no-timestamp;
|
||||
|
||||
$CLI snapshot activate snap1;
|
||||
|
||||
EXPECT 'Started' snapshot_status snap1;
|
||||
|
||||
# This Function will check for entry /var/run/gluster/snaps/<snap-name>
|
||||
# against snap-name
|
||||
|
||||
function is_snap_path
|
||||
{
|
||||
echo `ls $snap_path | grep snap1 | wc -l`
|
||||
}
|
||||
|
||||
# snap is active so snap_path should exist
|
||||
EXPECT "1" is_snap_path
|
||||
|
||||
$CLI snapshot deactivate snap1;
|
||||
|
||||
# snap is deactivated so snap_path should not exist
|
||||
EXPECT "0" is_snap_path
|
||||
|
||||
# activate snap again
|
||||
$CLI snapshot activate snap1;
|
||||
|
||||
# snap is active so snap_path should exist
|
||||
EXPECT "1" is_snap_path
|
||||
|
||||
# delete snap now
|
||||
TEST $CLI snapshot delete snap1;
|
||||
|
||||
# snap is deleted so snap_path should not exist
|
||||
EXPECT "0" is_snap_path
|
||||
|
||||
TEST $CLI volume stop $V0;
|
||||
TEST $CLI volume delete $V0;
|
||||
|
||||
cleanup;
|
||||
|
@ -2904,6 +2904,7 @@ glusterd_lvm_snapshot_remove (dict_t *rsp_dict, glusterd_volinfo_t *snap_vol)
|
||||
glusterd_brickinfo_t *brickinfo = NULL;
|
||||
xlator_t *this = NULL;
|
||||
char brick_dir[PATH_MAX] = "";
|
||||
char snap_path[PATH_MAX] = "";
|
||||
char *tmp = NULL;
|
||||
char *brick_mount_path = NULL;
|
||||
gf_boolean_t is_brick_dir_present = _gf_false;
|
||||
@ -3075,6 +3076,28 @@ remove_brick_path:
|
||||
brick_dir, strerror (errno));
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* After removing brick_dir, fetch and remove snap path
|
||||
* i.e. /var/run/gluster/snaps/<snap-name>.
|
||||
*/
|
||||
if (!snap_vol->snapshot) {
|
||||
gf_msg (this->name, GF_LOG_WARNING, EINVAL,
|
||||
GD_MSG_INVALID_ENTRY, "snapshot not"
|
||||
"present in snap_vol");
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
snprintf (snap_path, sizeof (snap_path) - 1, "%s/%s",
|
||||
snap_mount_dir, snap_vol->snapshot->snapname);
|
||||
ret = recursive_rmdir (snap_path);
|
||||
if (ret) {
|
||||
gf_msg (this->name, GF_LOG_ERROR, errno,
|
||||
GD_MSG_DIR_OP_FAILED, "Failed to remove "
|
||||
"%s directory : error : %s", snap_path,
|
||||
strerror (errno));
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
@ -6246,6 +6269,7 @@ glusterd_snapshot_deactivate_commit (dict_t *dict, char **op_errstr,
|
||||
glusterd_snap_t *snap = NULL;
|
||||
glusterd_volinfo_t *snap_volinfo = NULL;
|
||||
xlator_t *this = NULL;
|
||||
char snap_path[PATH_MAX] = "";
|
||||
|
||||
this = THIS;
|
||||
GF_ASSERT (this);
|
||||
@ -6304,6 +6328,20 @@ glusterd_snapshot_deactivate_commit (dict_t *dict, char **op_errstr,
|
||||
"Failed to unmounts for %s", snap->snapname);
|
||||
}
|
||||
|
||||
/*Remove /var/run/gluster/snaps/<snap-name> entry for deactivated snaps.
|
||||
* This entry will be created again during snap activate.
|
||||
*/
|
||||
snprintf (snap_path, sizeof (snap_path) - 1, "%s/%s",
|
||||
snap_mount_dir, snapname);
|
||||
ret = recursive_rmdir (snap_path);
|
||||
if (ret) {
|
||||
gf_msg (this->name, GF_LOG_ERROR, errno,
|
||||
GD_MSG_DIR_OP_FAILED, "Failed to remove "
|
||||
"%s directory : error : %s", snap_path,
|
||||
strerror (errno));
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = dict_set_dynstr_with_alloc (rsp_dict, "snapuuid",
|
||||
uuid_utoa (snap->snap_id));
|
||||
if (ret) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user