#!/bin/bash

# get parameter list
source /etc/profile
source /etc/tos/scripts/scripts

usage="Usage:$(basename $0) [/dev/vg0/lv0 | /dev/md0]"
[ -z "$1" ] && {
	echo $usage
	exit 1
}

DEVPATH=$1
#首先判断是md0还是lv0
DEVNAME=$(basename $DEVPATH)
DEVSIGN=${DEVNAME:0:2} #设备标志
DEVSORT=${DEVNAME:2}   #设备序号

[ ! -b "$DEVPATH" ] && {
	[ ! -z "$DEVNAME" ] && rm -f /tmp/lv${DEVSORT}
	exit 1
}
script_get_lock >/dev/null
[ $? -ne 0 ] && exit 1

#取得挂载点
MNTPOINT=$(getmntpoint "$DEVPATH")
UUID=$(GetDeviceUUID $DEVPATH)
[ -z "$MNTPOINT" ] && MNTPOINT=$(GetMntPoint $UUID)

#DEBUG FILE文件定义
DEBUGFILE=/tmp/$DEVNAME
[ -f $DEBUGFILE ] && rm -f $DEBUGFILE

echo "stopmd:null:$DEVNAME:$UUID:0:stopmd" >$DEBUGFILE
service_stop

check_main_raid "$MNTPOINT"
if [ $? -eq 0 ]; then
	main_service_stop
fi
umountAll "$MNTPOINT"

# remove the flashcache
CACHEBLK=$(ter_flashcache -blk $DEVPATH -opt cache_target)
if [ ! -z "$CACHEBLK" -a -b "$CACHEBLK" ]; then
	DestroyCache "$(basename $CACHEBLK)"
fi
#加密设备路径
DEVMAPR=/dev/mapper/$DEVNAME
[ -b $DEVMAPR ] && {
	cryptsetup luksClose $DEVNAME >/dev/null 2>&1
}

# remove single raid
removeRaid() {
	local blk=$1
	local name=$(basename $blk)
	local slaves=""
	[ ! -b "$blk" ] && {
		script_put_lock >/dev/null
		exit 0
	}
	[ -e /sys/block/$name/slaves/ ] && {
		for subdisk in $(ls /sys/block/$name/slaves/); do
			slaves="${slaves}/dev/${subdisk} "
		done
	}
	local TOS_RAID_UUID=$(GetDeviceUUID $blk)
	sysctl -w dev.raid.speed_limit_max=0 #200000
	sysctl -w dev.raid.speed_limit_min=0 #100000
	#重复2次去尝试停掉阵列...
	[ -b "$blk" ] && mdadm -S $blk >/dev/null 2>&1
	sleep 1
	[ -b "$blk" ] && mdadm -S $blk >/dev/null 2>&1
	sleep 1
	#判断是否停止成功...
	if [ ! -e "/sys/block/$name" ]; then
		#remove volume group config
		iniparse -d -f /etc/volume/storage.conf -s "$TOS_RAID_UUID"
		echo "stopmd:null:$DEVNAME:$UUID:0:success" >$DEBUGFILE
		for item in $slaves; do
			[ -z "$item" ] && continue
			mdadm --zero-superblock $item >/dev/null
		done
		rm -f $blk
	else
		echo "stopmd:null:$DEVNAME:$UUID:1:failed" >$DEBUGFILE
		script_put_lock >/dev/null
		exit 0
	fi
	echo $(cat /etc/mdadm.conf | grep -v $blk) >/etc/mdadm.conf
	# wait sync
	sleep 1
	mdadm -Ds >/etc/mdadm.conf
}

if [ "$DEVSIGN" = "lv" ]; then
	lvm_vgname=""
	lvm_pvname=""
	loopcount=0
	while [ $loopcount -lt 3 ]; do
		if [ -b $DEVPATH ]; then
			lvm_vgname=$(lvs -o vg_name $DEVPATH --noheadings 2>/dev/null | sed s/[[:space:]]//g)
			lvremove -f -y --noudevsync $DEVPATH
		fi
		if [ ! -z "$lvm_vgname" ]; then
			lvm_pvtemp=$(vgs -o pv_name $lvm_vgname --noheadings 2>/dev/null | sed s/[[:space:]]//g)
			[ -z "$lvm_pvtemp" ] && break
			lvm_pvname=$lvm_pvtemp
			vgremove -f -y --noudevsync $lvm_vgname
		else
			break
		fi
		let loopcount=loopcount+1
		sleep 1
	done
	for itempv in $lvm_pvname; do
		pvremove -ff $itempv
		removeRaid $itempv
	done
else
	removeRaid $DEVPATH
fi
#remove volume group config
iniparse -d -f /etc/volume/volume.conf -s "$UUID"

/etc/tos/scripts/mntvfs
public_dir=$(readlink -f /mnt/public)
[ ! -z "$public_dir" ] && {
	for svrname in $MUSTAPP; do
		svrpath=/etc/init.d/$svrname
		[ -e "$svrpath" ] && $svrpath start >/dev/null 2>&1
	done
}
script_put_lock >/dev/null
# all process over
sysctl -w dev.raid.speed_limit_max=200000
sysctl -w dev.raid.speed_limit_min=100000

exit 0
