#!/bin/bash

usage() {
	echo "Usage: $0 [-v] [-f] [-s syspool_name]" 1>&2
	echo "	-f	force run (ignore warnings)" 1>&2
	echo "	-v	print warnings and error messages" 1>&2
	echo "	-s	ignore syspool_name (default to syspool)" 1>&2
        echo ""
        echo "Exit codes:"
        echo " 0 - good to go"
        echo " 1 - no slog device defined in one or more pools"
        echo " 2 - more than one pool - ignore with -f option"
	exit 1
}

verbose=false
force=false
syspool=syspool
rpool=rpool
rc=0

while getopts "vfs:" o; do
	case "${o}" in
		v) verbose=true;;
		f) force=true;;
		s) syspool=${OPTARG};;
		\?) usage;;
	esac
done

pools=$(zpool list|awk "! /^NAME/ && ! /^${syspool}/ && ! /^${rpool}/{print \$1}")

if [ `echo $pools | wc -w` -gt 1 ]; then
	${verbose} && echo "Warning: more than one pool!"
	rc=2
	${force} || exit ${rc}
fi

for i in $pools; do
	if zpool status $i | awk '/^\tlogs/{exit(1)}'; then
		${verbose} && echo "Fatal: no slog defined in pool $i"
		rc=1
		${force} || exit ${rc}
	fi
done

sync_dis=$(zfs get sync | \
	awk "! /^NAME/ && ! /^${syspool}/{if (\$3 == \"disabled\") { print \$1, \"has sync=disabled! \"; exit(1) } }")
if [ -n "${sync_dis}" ]; then
	${verbose} && echo "Fatal: ${sync_dis}"
	rc=1
	${force} || exit ${rc}
fi

wrbk_cache=$(stmfadm list-lu -v | \
        awk 'BEGIN{lu="none"}/^LU Name/{lu=$3}/Writeback Cache/{if (($4 != "Disabled") && ($7 !="standby")) {print lu, "writeback cache", $4; exit(1)} }')
if [ -n "${wrbk_cache}" ]; then
	${verbose} && echo "Fatal: ${wrbk_cache}"
	rc=1
	${force} || exit ${rc}
fi

exit ${rc}
