#!/usr/bin/env bash

flush_caches() {
  sync
  echo 3 > /proc/sys/vm/drop_caches
}

prepare_op() {
  rm -rf /run/shm/tmp
  flush_caches

  killall "svnserve" -9 2> /dev/null
  killall "lt-svnserve" -9 2> /dev/null
  sleep 2

  cp /home/stefan/.subversion/config.$1 /root/.subversion/config

  case $1 in
    slow)
      OPTIONS=""
      ;;
    medium)
      OPTIONS="-M 256"
      ;;
    fast)
      OPTIONS="-M 1024 -c 0 --client-speed 1000 --cache-revprops yes --block-read yes --min-threads=16 --max-threads=16"
      ;;
  esac

  /home/stefan/develop/trunk-commit2/subversion/svnserve/svnserve $OPTIONS -Tdr /mnt/ssd/f7-test
  sleep 2
}

REPO_LIST="ruby-f6-nonpacked ruby-f7-nonpacked ruby-f6-packed ruby-f7-packed bsd-f6-nonpacked bsd-f7-nonpacked bsd-f6-packed bsd-f7-packed"
PREFIX_LIST="svn://localhost file:///mnt/ssd/f7-test"
SVNADMIN=/home/stefan/develop/trunk-commit2/subversion/svnadmin/svnadmin
SVN=/home/stefan/develop/trunk-commit2/subversion/svn/svn
SVNBENCH=/home/stefan/develop/trunk-commit2/tools/client-side/svn-bench/svn-bench
TIMEFORMAT=$'%3R\t%3U\t%3S'
ME=`basename $0`
COLD_LOG=${ME%.sh}.cold.log
HOT_LOG=${ME%.sh}.hot.log

if 0; then

echo "

Dump
" >> $COLD_LOG
echo "

Dump
" >> $HOT_LOG
for repo in $REPO_LIST
do
	REPOPATH=/mnt/ssd/f7-test/$repo

	flush_caches
	printf "$repo\tslow\t" >> $COLD_LOG
	(time $SVNADMIN dump $REPOPATH -q -r0:5000 2>/dev/null > /dev/null) 2>>$COLD_LOG
	printf "$repo\tslow\t" >> $HOT_LOG
	(time $SVNADMIN dump $REPOPATH -q -r0:5000 2>/dev/null > /dev/null) 2>>$HOT_LOG

	flush_caches
	printf "$repo\tmedium\t" >> $COLD_LOG
	(time $SVNADMIN dump $REPOPATH -q -r0:5000 -M 256 2>/dev/null > /dev/null) 2>>$COLD_LOG
	printf "$repo\tmedium\t" >> $HOT_LOG
	(time $SVNADMIN dump $REPOPATH -q -r0:5000 -M 256 2>/dev/null > /dev/null) 2>>$HOT_LOG

	flush_caches
	printf "$repo\tfast\t" >> $COLD_LOG
	(time $SVNADMIN dump $REPOPATH -q -r0:5000 -M 1024 2>/dev/null > /dev/null) 2>>$COLD_LOG
	printf "$repo\tfast\t" >> $HOT_LOG
	(time $SVNADMIN dump $REPOPATH -q -r0:5000 -M 1024 2>/dev/null > /dev/null) 2>>$HOT_LOG
done

echo "

Export
" >> $COLD_LOG
echo "

Export
" >> $HOT_LOG
for repo in $REPO_LIST
do
	for prefix in $PREFIX_LIST
	do
		if [[ $repo == *ruby* ]]
		then
			URL=$prefix/$repo/trunk
		else
			URL=$prefix/$repo/head
		fi

		for variant in slow medium fast
		do
			printf "$repo\t$prefix\t$variant\t" >> $COLD_LOG
			printf "$repo\t$prefix\t$variant\t" >> $HOT_LOG
			prepare_op $variant
			(time $SVN export $URL -q 2>/dev/null /run/shm/tmp) 2>>$COLD_LOG   
			rm -rf /run/shm/tmp
			(time $SVN export $URL -q 2>/dev/null /run/shm/tmp) 2>>$HOT_LOG   
		done
	done
done

fi

echo "

Log
" >> $COLD_LOG
echo "

Log
" >> $HOT_LOG
for repo in $REPO_LIST
do
	for prefix in $PREFIX_LIST
	do
		URL=$prefix/$repo
		for variant in slow medium fast
		do
			printf "$repo\t$prefix\t$variant\t" >> $COLD_LOG
			printf "$repo\t$prefix\t$variant\t" >> $HOT_LOG
			prepare_op $variant
			(time $SVN log $URL --limit 20000 2> /dev/null > /dev/null) 2>>$COLD_LOG   
			(time $SVN log $URL --limit 20000 2> /dev/null > /dev/null) 2>>$HOT_LOG   
		done
	done
done

exit

echo "

Null-Export
" >> $COLD_LOG
echo "

Null-Export
" >> $HOT_LOG
for repo in $REPO_LIST
do
	for prefix in $PREFIX_LIST
	do
		if [[ $repo == *ruby* ]]
		then
			URL=$prefix/$repo/trunk
		else
			URL=$prefix/$repo/head
		fi

		for variant in slow medium fast
		do
			printf "$repo\t$prefix\t$variant\t" >> $COLD_LOG
			printf "$repo\t$prefix\t$variant\t" >> $HOT_LOG
			prepare_op $variant
			(time $SVNBENCH null-export $URL -q 2>/dev/null /run/shm/tmp) 2>>$COLD_LOG   
			(time $SVNBENCH null-export $URL -q 2>/dev/null /run/shm/tmp) 2>>$HOT_LOG   
		done
	done
done


