Blame tests/snapshot.rc

Packit Service e080da
#!/bin/bash
Packit Service e080da
Packit Service e080da
LVM_DEFINED=0
Packit Service e080da
LVM_PREFIX="patchy_snap"
Packit Service e080da
LVM_COUNT=0
Packit Service e080da
VHD_SIZE="300M"
Packit Service e080da
Packit Service e080da
#This function will init B# bricks
Packit Service e080da
#This is used when launch_cluster is
Packit Service e080da
#not called to init B#. Call it before
Packit Service e080da
#setup_lvm
Packit Service e080da
function init_n_bricks() {
Packit Service e080da
    local count=$1
Packit Service e080da
    for i in `seq 1 $count`; do
Packit Service e080da
        eval "B$i=/d/backends/$i"
Packit Service e080da
    done
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
count_snaps () {
Packit Service e080da
    ls $1/.snaps | wc -l
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
function init_lvm() {
Packit Service e080da
    if [ "$1" == "" ]; then
Packit Service e080da
        echo "Error: Invalid argument supplied"
Packit Service e080da
        return 1
Packit Service e080da
    fi
Packit Service e080da
    LVM_COUNT=$1
Packit Service e080da
Packit Service e080da
    if [ "$2" != "" ]; then
Packit Service e080da
        VHD_SIZE=$2
Packit Service e080da
    fi
Packit Service e080da
Packit Service e080da
    local b
Packit Service e080da
    local i
Packit Service e080da
Packit Service e080da
    if [ "$B1" = "" ]; then
Packit Service e080da
        B1=$B0
Packit Service e080da
    fi
Packit Service e080da
Packit Service e080da
    for i in `seq 1 $LVM_COUNT`; do
Packit Service e080da
        b="B$i"
Packit Service e080da
        if [ "${!b}" = "" ]; then
Packit Service e080da
            echo "Error: $b not defined."
Packit Service e080da
            echo "Please run launch_cluster with atleast $LVM_COUNT nodes"
Packit Service e080da
            return 1
Packit Service e080da
        fi
Packit Service e080da
Packit Service e080da
        eval "L$i=${!b}/${LVM_PREFIX}_mnt"
Packit Service e080da
        l="L$i"
Packit Service e080da
        mkdir -p ${!l}
Packit Service e080da
        if [ $? -ne 0 ]; then
Packit Service e080da
            echo "Error: failed to create dir ${!l}"
Packit Service e080da
            return 1
Packit Service e080da
        fi
Packit Service e080da
Packit Service e080da
        eval "VG$i=${LVM_PREFIX}_vg_${i}"
Packit Service e080da
    done
Packit Service e080da
Packit Service e080da
    LVM_DEFINED=1
Packit Service e080da
    return 0
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
function verify_lvm_version() {
Packit Service e080da
    if `/sbin/lvcreate --help | grep -q thin`; then
Packit Service e080da
        return 0;
Packit Service e080da
    fi
Packit Service e080da
    return 1;
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
function setup_lvm() {
Packit Service e080da
    init_lvm $@ || return 1
Packit Service e080da
    _setup_lvm
Packit Service e080da
    return 0
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
function cleanup_lvm() {
Packit Service e080da
    pkill gluster
Packit Service e080da
    sleep 2
Packit Service e080da
Packit Service e080da
    if [ "$LVM_DEFINED" = "1" ]; then
Packit Service e080da
        _cleanup_lvm >/dev/null 2>&1
Packit Service e080da
    fi
Packit Service e080da
Packit Service e080da
    _cleanup_lvm_again >/dev/null 2>&1
Packit Service e080da
    # TODO Delete cleanup has open bug
Packit Service e080da
    # once fixed delete this
Packit Service e080da
    mount | grep "run/gluster/snaps" | awk '{print $3}' | xargs umount 2> /dev/null
Packit Service e080da
    mount | grep "patchy_snap" | awk '{print $3}' | xargs umount 2> /dev/null
Packit Service e080da
    \rm -rf /var/run/gluster/snaps/*
Packit Service e080da
    lvscan | grep "/dev/patchy_snap" | awk '{print $2}'| xargs lvremove -f 2> /dev/null
Packit Service e080da
    vgs | grep patchy_snap | awk '{print $1}' | xargs vgremove -f 2>/dev/null
Packit Service e080da
    \rm -rf /dev/patchy*
Packit Service e080da
    return 0
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
# Find out how this file was sourced, source traps.rc the same way, and use
Packit Service e080da
# push_trapfunc to make sure cleanup_lvm gets called before we exit.
Packit Service e080da
. $(dirname ${BASH_SOURCE[0]})/traps.rc
Packit Service e080da
push_trapfunc cleanup_lvm
Packit Service e080da
Packit Service e080da
########################################################
Packit Service e080da
# Private Functions
Packit Service e080da
########################################################
Packit Service e080da
function _setup_lvm() {
Packit Service e080da
    local count=$LVM_COUNT
Packit Service e080da
    local b
Packit Service e080da
    local i
Packit Service e080da
Packit Service e080da
    for i in `seq 1 $count`; do
Packit Service e080da
        b="B$i"
Packit Service e080da
Packit Service e080da
        _create_vhd ${!b} $i
Packit Service e080da
        _create_lv ${!b} $i
Packit Service e080da
        _mount_lv $i
Packit Service e080da
    done
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
function _cleanup_lvm() {
Packit Service e080da
    local count=$LVM_COUNT
Packit Service e080da
    local b
Packit Service e080da
    local i
Packit Service e080da
Packit Service e080da
    for i in `seq 1 $count`; do
Packit Service e080da
        b="B$i"
Packit Service e080da
        _umount_lv $i
Packit Service e080da
        _remove_lv $i
Packit Service e080da
        _remove_vhd ${!b}
Packit Service e080da
    done
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
function _cleanup_lvm_again() {
Packit Service e080da
    local file
Packit Service e080da
Packit Service e080da
    mount | grep $LVM_PREFIX | awk '{print $3}' | xargs -r ${UMOUNT_F}
Packit Service e080da
Packit Service e080da
    /sbin/vgs | grep $LVM_PREFIX | awk '{print $1}' | xargs -r vgremove -f
Packit Service e080da
Packit Service e080da
    find $B0 -name "${LVM_PREFIX}_loop" | xargs -r losetup -d
Packit Service e080da
Packit Service e080da
    find $B0 -name "${LVM_PREFIX}*" | xargs -r rm -rf
Packit Service e080da
Packit Service e080da
    find /run/gluster/snaps -name "*${LVM_PREFIX}*" | xargs -r rm -rf
Packit Service e080da
Packit Service e080da
    for file in `ls /run/gluster/snaps`; do
Packit Service e080da
        find /run/gluster/snaps/$file -mmin -2 | xargs -r rm -rf
Packit Service e080da
    done
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
########################################################
Packit Service e080da
########################################################
Packit Service e080da
function _create_vhd() {
Packit Service e080da
    local dir=$1
Packit Service e080da
    local num=$2
Packit Service e080da
    local loop_num=`expr $2 + 8`
Packit Service e080da
Packit Service e080da
    fallocate -l${VHD_SIZE} $dir/${LVM_PREFIX}_vhd
Packit Service e080da
    mknod -m660 $dir/${LVM_PREFIX}_loop b 7 $loop_num
Packit Service e080da
    /sbin/losetup $dir/${LVM_PREFIX}_loop $dir/${LVM_PREFIX}_vhd
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
function _create_lv() {
Packit Service e080da
    local dir=$1
Packit Service e080da
    local num=$2
Packit Service e080da
    local vg="VG$num"
Packit Service e080da
    local thinpoolsize="200M"
Packit Service e080da
    local virtualsize="150M"
Packit Service e080da
Packit Service e080da
    /sbin/pvcreate $dir/${LVM_PREFIX}_loop
Packit Service e080da
    /sbin/vgcreate ${!vg} $dir/${LVM_PREFIX}_loop
Packit Service e080da
Packit Service e080da
    /sbin/lvcreate -L ${thinpoolsize} -T /dev/${!vg}/thinpool
Packit Service e080da
    /sbin/lvcreate -V ${virtualsize} -T /dev/${!vg}/thinpool -n brick_lvm
Packit Service e080da
Packit Service e080da
    mkfs.xfs -f /dev/${!vg}/brick_lvm
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
function _mount_lv() {
Packit Service e080da
    local num=$1
Packit Service e080da
    local vg="VG$num"
Packit Service e080da
    local l="L$num"
Packit Service e080da
Packit Service e080da
    mount -t xfs -o nouuid /dev/${!vg}/brick_lvm ${!l}
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
function _umount_lv() {
Packit Service e080da
    local num=$1
Packit Service e080da
    local l="L$num"
Packit Service e080da
Packit Service e080da
    ${UMOUNT_F} ${!l} 2>/dev/null || true
Packit Service e080da
    rmdir ${!l} 2>/dev/null || true
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
function _remove_lv() {
Packit Service e080da
    local num=$1
Packit Service e080da
    local vg="VG$num"
Packit Service e080da
Packit Service e080da
    vgremove -f ${!vg}
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
function _remove_vhd() {
Packit Service e080da
    local dir=$1
Packit Service e080da
Packit Service e080da
    losetup -d $dir/${LVM_PREFIX}_loop
Packit Service e080da
    rm -f $dir/${LVM_PREFIX}_loop
Packit Service e080da
    rm -f $dir/${LVM_PREFIX}_vhd
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
########################################################
Packit Service e080da
# Utility Functions
Packit Service e080da
########################################################
Packit Service e080da
function snapshot_exists() {
Packit Service e080da
        local clitype=$1
Packit Service e080da
        local snapname=$2
Packit Service e080da
        local cli=$CLI
Packit Service e080da
        if [ "$clitype" == "1" ]; then
Packit Service e080da
                cli=$CLI_1;
Packit Service e080da
        fi
Packit Service e080da
        if [ "$clitype" == "2" ]; then
Packit Service e080da
                cli=$CLI_2;
Packit Service e080da
        fi
Packit Service e080da
        $cli snapshot list | egrep -q "^$snapname\$"
Packit Service e080da
        return $?
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
#Create N number of snaps in a given volume
Packit Service e080da
#Arg1 : <Volume Name>
Packit Service e080da
#Arg2 : <Count of snaps to be created>
Packit Service e080da
#Arg3 : <Snap Name Pattern>
Packit Service e080da
#Return: Returns 0 if all snaps are created ,
Packit Service e080da
#        if not will return exit code of last failed
Packit Service e080da
#        snap create command.
Packit Service e080da
function create_n_snapshots() {
Packit Service e080da
        local cli=$1
Packit Service e080da
        local vol=$1
Packit Service e080da
        local snap_count=$2
Packit Service e080da
        local snap_name=$3
Packit Service e080da
        local ret=0
Packit Service e080da
        for i in `seq 1 $snap_count`; do
Packit Service e080da
                $CLI_1 snapshot create $snap_name$i ${vol} no-timestamp &
Packit Service e080da
                PID_1=$!
Packit Service e080da
                wait $PID_1
Packit Service e080da
                ret=$?
Packit Service e080da
                if [ "$ret" != "0" ]; then
Packit Service e080da
                        break
Packit Service e080da
                fi
Packit Service e080da
         done
Packit Service e080da
         return $ret
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
Packit Service e080da
#Delete N number of snaps in a given volume
Packit Service e080da
#Arg1 : <Volume Name>
Packit Service e080da
#Arg2 : <Count of snaps to be deleted>
Packit Service e080da
#Arg3 : <Snap Name Pattern>
Packit Service e080da
#Return: Returns 0 if all snaps are Delete,
Packit Service e080da
#        if not will return exit code of last failed
Packit Service e080da
#        snap delete command.
Packit Service e080da
function delete_n_snapshots() {
Packit Service e080da
        local vol=$1
Packit Service e080da
        local snap_count=$2
Packit Service e080da
        local snap_name=$3
Packit Service e080da
        local ret=0
Packit Service e080da
        for i in `seq 1 $snap_count`; do
Packit Service e080da
                $CLI_1 snapshot delete $snap_name$i &
Packit Service e080da
                PID_1=$!
Packit Service e080da
                wait $PID_1
Packit Service e080da
                temp=$?
Packit Service e080da
                if [ "$temp" != "0" ]; then
Packit Service e080da
                        ret=$temp
Packit Service e080da
                fi
Packit Service e080da
         done
Packit Service e080da
         return $ret
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
#Check for the existance of N number of snaps in a given volume
Packit Service e080da
#Arg1 : <Volume Name>
Packit Service e080da
#Arg2 : <Count of snaps to be checked>
Packit Service e080da
#Arg3 : <Snap Name Pattern>
Packit Service e080da
#Return: Returns 0 if all snaps exists,
Packit Service e080da
#        if not will return exit code of last failed
Packit Service e080da
#        snapshot_exists().
Packit Service e080da
function snapshot_n_exists() {
Packit Service e080da
        local vol=$1
Packit Service e080da
        local snap_count=$2
Packit Service e080da
        local snap_name=$3
Packit Service e080da
        local ret=0
Packit Service e080da
        for i in `seq 1 $snap_count`; do
Packit Service e080da
                snapshot_exists 1 $snap_name$i
Packit Service e080da
                ret=$?
Packit Service e080da
                if [ "$ret" != "0" ]; then
Packit Service e080da
                        break
Packit Service e080da
                fi
Packit Service e080da
         done
Packit Service e080da
         return $ret
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
#Check for the status of snapshot for a volume
Packit Service e080da
#Arg1 : <Snap Name>
Packit Service e080da
function snapshot_status()
Packit Service e080da
{
Packit Service e080da
    local snap=$1;
Packit Service e080da
    local cli=$CLI_1;
Packit Service e080da
    if [ "$cli" = "" ]; then
Packit Service e080da
        cli=$CLI
Packit Service e080da
    fi
Packit Service e080da
Packit Service e080da
    #TODO: Right now just fetches the status of the single snap volume.
Packit Service e080da
    #When snapshot will have multiple snap volumes, should have a
Packit Service e080da
    #cummulative logic for status
Packit Service e080da
    $cli snapshot info $snap | grep "Status" | sed 's/.*: //';
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
Packit Service e080da
#Check the different status of a particular snapshot
Packit Service e080da
#Arg1 : <Snap name>
Packit Service e080da
#Arg2 : <Filed in status>
Packit Service e080da
#Arg3 : <Expected value>
Packit Service e080da
function snapshot_snap_status()
Packit Service e080da
{
Packit Service e080da
Packit Service e080da
    local snap=$1;
Packit Service e080da
    local cli=$CLI_1;
Packit Service e080da
    local field=$2;
Packit Service e080da
    local expected=$3;
Packit Service e080da
    if [ "$cli" = "" ]; then
Packit Service e080da
        cli=$CLI
Packit Service e080da
    fi
Packit Service e080da
    for i in $($cli snapshot status $snap | grep "$field" | \
Packit Service e080da
               cut -d ':' -f2 | awk '{print $1}') ;
Packit Service e080da
    do
Packit Service e080da
           if [ "$i" != "$expected" ]; then
Packit Service e080da
                echo "Failed"
Packit Service e080da
                return 1;
Packit Service e080da
           fi;
Packit Service e080da
    done;
Packit Service e080da
echo "Success"
Packit Service e080da
return 0;
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
Packit Service e080da
# TODO: Cleanup code duplication
Packit Service e080da
function volinfo_field()
Packit Service e080da
{
Packit Service e080da
    local vol=$1;
Packit Service e080da
    local field=$2;
Packit Service e080da
Packit Service e080da
    $CLI_1 volume info $vol | grep "^$field: " | sed 's/.*: //';
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
Packit Service e080da
function volume_exists() {
Packit Service e080da
        $CLI_1 volume info $1 > /dev/null 2>&1
Packit Service e080da
        if [ $? -eq 0 ]; then
Packit Service e080da
                echo "Y"
Packit Service e080da
        else
Packit Service e080da
                echo "N"
Packit Service e080da
        fi
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
# arg-1 : From which node the command should be trigerred
Packit Service e080da
#         Ex : $CLI_1, $CLI_2, etc.
Packit Service e080da
# arg-2 : Volume name
Packit Service e080da
# arg-3 : Starting index for the snapname "snap$i"
Packit Service e080da
# arg-4 : Number of snapshots to be taken
Packit Service e080da
function snap_create()
Packit Service e080da
{
Packit Service e080da
        eval local cli_index=\$$1
Packit Service e080da
        local volname=$2
Packit Service e080da
        local i=$3
Packit Service e080da
        local limit=$[$i + $4]
Packit Service e080da
Packit Service e080da
        while [ $i -lt $limit ]
Packit Service e080da
        do
Packit Service e080da
                $cli_index snapshot create snap$i $volname no-timestamp
Packit Service e080da
                i=$[$i+1]
Packit Service e080da
        done
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
# arg-1 : From which node the command should be trigerred
Packit Service e080da
#         Ex : $CLI_1. $CLI_2, etc.
Packit Service e080da
# arg-2 : Volume name.
Packit Service e080da
function get_snap_count()
Packit Service e080da
{
Packit Service e080da
        eval local cli_index=\$$1
Packit Service e080da
        local volname=$2
Packit Service e080da
Packit Service e080da
Packit Service e080da
        if [ -z "$2" ]
Packit Service e080da
        then
Packit Service e080da
                $cli_index snapshot list | grep -v "No snapshots present"\
Packit Service e080da
                                         | wc -l
Packit Service e080da
        else
Packit Service e080da
                $cli_index snapshot list $volname\
Packit Service e080da
                                         | grep -v "No snapshots present"\
Packit Service e080da
                                         | wc -l
Packit Service e080da
        fi
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
# arg-1 : From which node the command should be trigerred
Packit Service e080da
#         Ex : $CLI_1, $CLI_2, etc.
Packit Service e080da
# arg-2 : Starting index for the snapname "snap$i"
Packit Service e080da
# arg-3 : Number of snapshots to be deleted.
Packit Service e080da
function snap_delete()
Packit Service e080da
{
Packit Service e080da
        eval local cli_index=\$$1
Packit Service e080da
        local i=$2
Packit Service e080da
        local limit=$[$i + $3]
Packit Service e080da
Packit Service e080da
        while [ $i -lt $limit ]
Packit Service e080da
        do
Packit Service e080da
                $cli_index snapshot delete snap$i
Packit Service e080da
                i=$[$i+1]
Packit Service e080da
        done
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
# arg-1 : From which node the command should be triggered
Packit Service e080da
#         Ex : $CLI_1, $CLI_2, etc.
Packit Service e080da
# arg-2 : key value
Packit Service e080da
function snap_config()
Packit Service e080da
{
Packit Service e080da
        eval local cli_index=\$$1
Packit Service e080da
        local var=$2
Packit Service e080da
        $cli_index snapshot config | grep "^$var" | sed 's/.*: //'
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
function check_if_snapd_exist() {
Packit Service e080da
        local pid
Packit Service e080da
        pid=$(ps aux | grep "snapd" | grep -v grep | awk '{print $2}')
Packit Service e080da
        if [ -n "$pid" ]; then echo "Y"; else echo "N"; fi
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
# returns number of snapshot being displayed in ".snaps" directory
Packit Service e080da
function uss_count_snap_displayed() {
Packit Service e080da
        local path=$1
Packit Service e080da
        ls $path/.snaps | wc -l
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
function snap_info_volume()
Packit Service e080da
{
Packit Service e080da
        eval local cli_index=\$$1
Packit Service e080da
        local var=$2
Packit Service e080da
        local vol=$3
Packit Service e080da
        $cli_index snapshot info volume $vol | grep "^$var" | sed 's/.*: //'
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
function snap_config_volume()
Packit Service e080da
{
Packit Service e080da
        eval local cli_index=\$$1
Packit Service e080da
        local var=$2
Packit Service e080da
        local vol=$3
Packit Service e080da
        $cli_index snapshot config $vol| grep "^$var" | sed 's/.*: //'
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
#return specific fields of xml output
Packit Service e080da
function get-cmd-field-xml()
Packit Service e080da
{
Packit Service e080da
        local cli=$CLI_1;
Packit Service e080da
        if [ "$cli" = "" ]; then
Packit Service e080da
            cli=$CLI
Packit Service e080da
        fi
Packit Service e080da
Packit Service e080da
        COMMAND=$1
Packit Service e080da
        PATTERN=$2
Packit Service e080da
Packit Service e080da
        $cli $COMMAND --xml | xmllint --format - | grep $PATTERN
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
function get_snap_brick_status()
Packit Service e080da
{
Packit Service e080da
    local snap=$1;
Packit Service e080da
Packit Service e080da
    $CLI snapshot status $snap | grep "Brick Running" | sed 's/.*: //';
Packit Service e080da
}
Packit Service e080da
Packit Service e080da
case $OSTYPE in
Packit Service e080da
NetBSD)
Packit Service e080da
        echo "Skip test on LVM which is not available on NetBSD" >&2
Packit Service e080da
        SKIP_TESTS
Packit Service e080da
        exit 0
Packit Service e080da
        ;;
Packit Service e080da
*)
Packit Service e080da
        ;;
Packit Service e080da
esac