TreeLocation location = new TreeLocation();
/* Get the TxnChain for this log entry. */
TxnChain chain = target.getChain(txnId, undoLsn, envImpl);
UndoReader undo = new UndoReader(reader, envImpl.getDbTree());
try {
RevertInfo revertTo = chain.pop();
/*
* When we undo this log entry, we've logically truncated it
* from the log. Remove it from the btree and mark it obsolete.
*/
RecoveryManager.rollbackUndo(envImpl.getLogger(),
Level.FINER,
undo,
revertTo,
location,
undoLsn);
if (!target.hasRollbackEnd()) {
/*
* We're not positive that the fsync of the invisible log
* entries happened. Make it invisible again.
*/
if (!reader.isInvisible()) {
singlePassInvisibleLsns.add(undoLsn);
}
}
} finally {
undo.releaseDb();
}
countObsolete(undoLsn, undo, tracker);
}