#!/usr/bin/env bash

ulimit -c unlimited

LOSSY=$1
NUM_LS=$2

if [ -z $NUM_LS ]; then
    NUM_LS=0
fi

BASE_PORT=$RANDOM
BASE_PORT=$[BASE_PORT+2000]
EXTENT_PORT=$BASE_PORT
YFS1_PORT=$[BASE_PORT+2]
YFS2_PORT=$[BASE_PORT+4]
LOCK_PORT=$[BASE_PORT+6]
LOCK_PORT1=$[BASE_PORT+8]

YFSDIR1=$PWD/yfs1
YFSDIR2=$PWD/yfs2

if [ "$LOSSY" ]; then
    export RPC_LOSSY=$LOSSY
fi

if [ $NUM_LS -eq 1 ]; then
    ./lock_server $LOCK_PORT $LOCK_PORT > lock_server1.log 2>&1 &
    sleep 1
    ./lock_server $LOCK_PORT $LOCK_PORT1 > lock_server2.log 2>&1 &
    sleep 1
else
    ./lock_server $LOCK_PORT > lock_server.log 2>&1 &
    sleep 1
fi

unset RPC_LOSSY

./extent_server $EXTENT_PORT > extent_server.log 2>&1 &
sleep 1

./yfs_server $YFS1_PORT $EXTENT_PORT $LOCK_PORT > yfs_server1.log 2>&1 &
mkdir -p $YFSDIR1
sleep 1
./fuse2yfs $YFSDIR1 $YFS1_PORT > fuse2yfs1.log 2>&1 &

sleep 1
./yfs_server $YFS2_PORT $EXTENT_PORT $LOCK_PORT > yfs_server2.log 2>&1 &
mkdir -p $YFSDIR2
sleep 1
./fuse2yfs $YFSDIR2 $YFS2_PORT > fuse2yfs2.log 2>&1 &

sleep 2

# make sure FUSE is mounted where we expect
pwd=`pwd -P`
if [ `mount | grep "$pwd/yfs1" | grep -v grep | wc -l` -ne 1 ]; then
    sh stop.sh
    echo "Failed to mount YFS properly at ./yfs1"
    exit -1
fi

# make sure FUSE is mounted where we expect
if [ `mount | grep "$pwd/yfs2" | grep -v grep | wc -l` -ne 1 ]; then
    sh stop.sh
    echo "Failed to mount YFS properly at ./yfs2"
    exit -1
fi
