#!/bin/bash

source /etc/tos/scripts/scripts
script_get_lock >/dev/null
[ $? -ne 0 ] && exit 1

usage="Usage:$(basename $0) -b[device] -c[+size(k)] -p[/mnt/md0]\n"

# target device
DEVICE=""
# source device
EXTEND_SIZE=0
MNTPATH=""
while getopts "b:c:p:" opt; do
    case $opt in
    b) DEVICE=$OPTARG ;;      # get device
    c) EXTEND_SIZE=$OPTARG ;; # get extend size
    p) MNTPATH=$OPTARG ;;     # get mount point
    esac
done

if [ $(echo "${EXTEND_SIZE} <= 0" | bc) -eq 1 -o -z "$MNTPATH" ]; then
    echo -e $usage
    script_put_lock >/dev/null
    exit 1
fi

INFO=$(df-json | grep "$MNTPATH$")
if [ -z "$INFO" ]; then
    echo -e $usage
    script_put_lock >/dev/null
    exit 1
fi
logFile=/tmp/resizeLVM_$(basename $MNTPATH)
echo "$(date +"%Y/%m/%d %H:%M:%S") resizeLVM: $DEVICE $EXTEND_SIZE $MNTPATH start *************************" >> $logFile

LVSINFO=$(lvs -o lv_name,vg_name,segtype,vgfree,pool_lv --noheadings --unit k --nosuffix --binary ${DEVICE} | head -n1)
echo "$(date +"%Y/%m/%d %H:%M:%S") resizeLVM-lvsInfo: $LVSINFO" >> $logFile
SEGTYPE=$(echo "$LVSINFO" | awk '{print $3}')
VGNAME=$(echo "$LVSINFO" | awk '{print $2}')
vgFree=$(echo "$LVSINFO" | awk '{print $4}')
FCNAME=$(echo "$LVSINFO" | awk '{print $5}')
if [ "$SEGTYPE" == "cache" ]; then
    echo "$(date +"%Y/%m/%d %H:%M:%S") resizeLVM-lvconvert: start splitcache" >> $logFile
	lvconvert --splitcache ${DEVICE} >> $logFile 2>&1
	FCNAME=$(echo "$FCNAME" | awk -F'[_\[\]]' '{print $2}')
fi
if [ $(echo "${EXTEND_SIZE} > ${vgFree}" | bc) -eq 1 ]; then
    vgFree=$(echo $vgFree | sed -e 's/^[ \t]*//g')
    echo "$(date +"%Y/%m/%d %H:%M:%S") resizeLVM-lvextend: start extend vgFree=$vgFree" >> $logFile
    lvextend -L +${vgFree}k ${DEVICE} >> $logFile 2>&1
else
    echo "$(date +"%Y/%m/%d %H:%M:%S") resizeLVM-lvextend: start extend extendSize=$EXTEND_SIZE" >> $logFile
    lvextend -L +${EXTEND_SIZE}k ${DEVICE} >> $logFile 2>&1
fi

if [ "$SEGTYPE" == "cache" -a "$FCNAME" != "" ]; then
    echo "$(date +"%Y/%m/%d %H:%M:%S") resizeLVM-lvconvert-create: start create cache fcName=$FCNAME" >> $logFile
    echo "y" | lvconvert --type cache --cachepool /dev/${VGNAME}/${FCNAME} ${DEVICE} >> $logFile 2>&1
fi

FS=$(echo "$INFO" | awk '{print $2}')
echo "$(date +"%Y/%m/%d %H:%M:%S") resizeLVM-fileSystem: $FS extend max" >> $logFile
if [ "$FS" = "btrfs" ]; then
    btrfs filesystem resize max $MNTPATH >> $logFile 2>&1
elif [ "$FS" = "xfs" ]; then
    xfs_growfs $DEVICE >> $logFile 2>&1
else
    resize2fs -f $DEVICE >> $logFile 2>&1
fi
echo "$(date +"%Y/%m/%d %H:%M:%S") resizeLVM: $DEVICE $EXTEND_SIZE $MNTPATH end *************************" >> $logFile
script_put_lock >/dev/null
exit 0
