#!/bin/bash
# Virtuozzo filesystem cache daemon startup script.
#
# Copyright (c) 2016-2017, Parallels International GmbH
#
# Our contact details: Parallels International GmbH, Vordergasse 59, 8200
# Schaffhausen, Switzerland.
#

. /etc/vz/pfcache.conf

RETVAL=0
PLOOP="/sbin/ploop"

pfcache_init()
{
	local msg

	[ ! -d "$PFCACHE_IMAGE" ] && mkdir -p -m0700 "$PFCACHE_IMAGE"
	[ -z "$PFCACHE_IMAGE_SIZE" ] && PFCACHE_IMAGE_SIZE=10485760
	echo "Initialize pfcache image $PFCACHE_IMAGE"
	msg=`$PLOOP init -s "$PFCACHE_IMAGE_SIZE"k -t ext4 $PFCACHE_IMAGE/root.hdd 2>&1`
	[ $? -eq 0 ] && return
	echo "`LANG=C date` pfcached: ploop init: $msg" >> $LOGFILE
	echo "Failed to initialize pfcache image: $msg"
	RETVAL=1
}

pfcache_mount()
{
	local conf="$PFCACHE_IMAGE/DiskDescriptor.xml"
	local msg

	RETVAL=0
	[ -z "$PFCACHE_IMAGE" -o -z "$PFCACHE" ] && return

	if [ ! -f "$conf" ]; then
		pfcache_init
		[ $RETVAL -ne 0 ] && return
	fi

	[ ! -d "$PFCACHE" ] && mkdir -p -m0700 "$PFCACHE"

	echo "Mount pfcache image $PFCACHE_IMAGE"
	msg=`$PLOOP mount -m "$PFCACHE" "$conf" 2>&1`
	[ $? -eq 0 -o $? -eq 21 ] && chmod 0700 "$PFCACHE" && return
	echo "`LANG=C date` pfcached: ploop mount: $msg" >> $LOGFILE
	echo "Failed to mount pfcache image: $msg"
	RETVAL=1
}

pfcache_umount()
{
	local msg

	[ -z  "$PFCACHE_IMAGE" ] && return
	echo "Umount pfcache image $PFCACHE_IMAGE"
	msg=`$PLOOP umount "$PFCACHE_IMAGE/DiskDescriptor.xml" 2>&1`
	[ $? -eq 0 ] && return
	echo "`LANG=C date` pfcached: ploop umount: $msg" >> $LOGFILE
	echo "Failed to umount pfcache image: $msg"
	RETVAL=1
}

if [ "x$1" = "xmount" ]; then
	pfcache_mount
elif [ "x$1" = "xumount" ]; then
	pfcache_umount
fi

exit $RETVAL
