boolean abortKnownDeleted,
TxnNodeId txnNodeId,
Map countedFileSummaries,
Set countedAbortLsnNodes) {
UtilizationTracker tracker = env.getUtilizationTracker();
/* Compare the fileSummaryLsn to the logLsn. */
Long logFileNum = new Long(DbLsn.getFileNumber(logLsn));
long fileSummaryLsn =
DbLsn.longToLsn((Long) fileSummaryLsns.get(logFileNum));
int cmpFsLsnToLogLsn = (fileSummaryLsn != DbLsn.NULL_LSN) ?
DbLsn.compareTo(fileSummaryLsn, logLsn) : -1;
/*
* Count the logLsn as obsolete if it follows the FileSummaryLN for the
* file of its Lsn.
*/
if (cmpFsLsnToLogLsn < 0) {
tracker.countObsoleteNode(logLsn, null);
}
/*
* Consider the latest LSN for the given node that precedes the
* FileSummaryLN for the file of its LSN. Count this LSN as obsolete
* if it is not a deleted LN.
*/
if (cmpFsLsnToLogLsn > 0) {
Long countedFile = (Long) countedFileSummaries.get(txnNodeId);
if (countedFile == null ||
countedFile.longValue() > logFileNum.longValue()) {
/*
* We encountered a new file number and the FsLsn follows the
* logLsn.
*/
if (!ln.isDeleted()) {
tracker.countObsoleteNode(logLsn, null);
}
/* Don't count this file again. */
countedFileSummaries.put(txnNodeId, logFileNum);
}
}