#!/bin/bash
# Recover after a rollback on the oasis machine, that is, after
#   re-installing on a new VM and then going back to boot a previously
#   installed VM.
# Recreate .cvmfspublished & .cvmfswhitelist for oasis & config-osg repos.

MASTERKEY=/etc/cvmfs/keys/oasis.opensciencegrid.org.masterkey
# try masterkeycard -k twice if needed, because sometimes it fails
if [ ! -f $MASTERKEY ] && ! cvmfs_server masterkeycard -k >/dev/null &&
        ! cvmfs_server masterkeycard -k >/dev/null; then
    echo "Only run this on the stratum 0 with the masterkey installed"
    exit 1
fi

RET=0
set -x
for REPO in oasis config-osg; do
    REPOOSG=$REPO.opensciencegrid.org
    rm -f /srv/cvmfs/$REPOOSG/.cvmfsreflog
    rm -f /var/spool/cvmfs/$REPOOSG/reflog.chksum
    # Use transaction/abort to make it look "healthy".  
    # In some cases it needs to be done twice.
    # This clears it up better than cvmfs_server mount -a
    cvmfs_server transaction $REPOOSG
    cvmfs_server abort -f $REPOOSG
    cvmfs_server transaction $REPOOSG
    cvmfs_server abort -f $REPOOSG
    # Now resign both .cvmfspublished and .cvmfswhitelist
    cvmfs_server resign -p $REPOOSG
    if ! cvmfs_server resign $REPOOSG; then
        # try twice because we have seen a ~0.1% failure rate
        if ! cvmfs_server resign $REPOOSG; then
            RET=1
        fi
    fi
done
exit $RET
