#!/bin/sh

### BEGIN INIT INFO
# Provides:          xtreemfs-mrc
# Required-Start:    $network
# Required-Stop:     $network
# Should-Start:      xtreemfs-dir
# Should-Stop:       $null
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: XtreemFS MRC
# Description:       XtreemFS MRC. http://www.xtreemfs.org/
### END INIT INFO


# Source function library.
if [ -e /lib/lsb/init-functions ]
then
	. /lib/lsb/init-functions
else
	. /etc/init.d/functions
fi

LOCKDIR=/var/lock/subsys
LOCKFILE=$LOCKDIR/xtreemfs-mrc

XTREEMFS_USER=xtreemfs

PID_MRC=/var/run/xtreemfs_mrc.pid

CONFIG_MRC=/etc/xos/xtreemfs/mrcconfig.properties

LOG_MRC=/var/log/xtreemfs/mrc.log

if [ -z $JAVA_HOME ]; then
	export JAVA_HOME=/usr
fi
JAVA_CALL="$JAVA_HOME/bin/java -cp /usr/share/java/XtreemFS.jar:/usr/share/java/BabuDB.jar:/usr/share/java/yidl.jar"

pre_check() {

        exists=`grep -c $XTREEMFS_USER /etc/passwd`
        if [ $exists -eq 0 ]
        then
                gprintf "user %s does not exist.\n" "$XTREEMFS_USER"
                exit 1
        fi
        dir=`dirname $LOG_MRC`
        if [ ! -e $dir ]
        then
                gprintf "directory for logfiles %s does not exist\n" "$dir"
        fi
}

start() {
    if [ -f $LOCKFILE ]
    then
	gprintf "XtreemFS Metadata and Replica Catalog (MRC) already started"
	echo
        return 0
    fi

    pre_check

    echo >> $LOG_MRC
    date >> $LOG_MRC
    echo -e "Starting XtreemFS Metadata and Replica Catalog (MRC)...\n\n" >> $LOG_MRC

    gprintf "starting XtreemFS Metadata and Replica Catalog (MRC)..."
    sudo -u $XTREEMFS_USER $JAVA_CALL org.xtreemfs.mrc.MRC $CONFIG_MRC >> $LOG_MRC 2>&1 &
    PROCPID=$!
    echo $PROCPID > $PID_MRC
    sleep 1s

    if [ -e /proc/$PROCPID ]
    then
	echo
    else
	echo
	return 1
    fi

    if [ ! -d $LOCKDIR ]; then mkdir -p $LOCKDIR; fi
    touch $LOCKFILE
    return 0
}

stop() {
    if [ -f $PID_MRC ]
    then
        gprintf "stopping XtreemFS Metadata and Replica Catalog (MRC)..."
        killproc -p $PID_MRC java
	echo
    fi

    rm -f $LOCKFILE
    return 0
}

status() {
    if [ -f $PID_MRC ]
    then
        PROCPID=`cat $PID_MRC`
	if [ ! -e /proc/$PROCPID ]
	then
		gprintf "XtreemFS Metadata and Replica Catalog (MRC) has crashed\n"
		return 1
	else
		gprintf "XtreemFS Metadata and Replica Catalog (MRC) is running\n"
		return 0
	fi
    else
	gprintf "XtreemFS Metadata and Replica Catalog (MRC)) is not running\n"
	return 3
    fi
}

# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status
        ;;
    reload)
        ;;
    restart)
        stop
        sleep 1
        start
        ;;
    *)
        gprintf "Usage: %s {start|stop|restart|reload|status}\n\n" "$0"
        exit 1
        ;;
esac

exit 0

