*/
private void verifyRollback(VLSNRange range)
throws RollbackException, InsufficientLogException,
HardRecoveryElectionException, IOException {
repImpl.setSyncupProgress(SyncupProgress.CHECK_FOR_ROLLBACK);
VLSN lastTxnEnd = range.getLastTxnEnd();
VLSN lastSync = range.getLastSync();
LoggerUtils.finest(logger, repImpl, "verify rollback" +
" vlsn range=" + range +
" searchResults=" + searchResults);
/*
* If the lastTxnEnd VLSN is null, we don't have to worry about hard
* recovery. See truth table above.
*/
if (lastTxnEnd.isNull()) {
if (range.getLastSync().isNull() && !matchpointVLSN.isNull()) {
throw EnvironmentFailureException.unexpectedState
(repNode.getRepImpl(), "Shouldn't be possible to find a "+
"matchpoint of " + matchpointVLSN +
" when the sync VLSN is null. Range=" + range);
}
/* We'll be doing a normal rollback. */
LoggerUtils.fine(logger, repImpl, "normal rollback, no txn end");
return;
}
if (lastSync.isNull()) {
throw EnvironmentFailureException.unexpectedState
(repNode.getRepImpl(),
"Shouldn't be possible to have a null sync VLSN when the "
+ " lastTxnVLSN " + lastTxnEnd + " is not null. Range=" +
range);