if (info.getUserRecordType() == JournalStorageManager.PAGE_CURSOR_COUNTER_VALUE)
{
PageCountRecord encoding = (PageCountRecord)newObjectEncoding(info);
long queueIDForCounter = encoding.queueID;
PageSubscriptionCounterImpl subsCounter = lookupCounter(counters, queueIDForCounter);
if (subsCounter.getValue() != 0 && subsCounter.getValue() != encoding.value);
{
out.println("####### Counter replace wrongly on queue " + queueIDForCounter + " oldValue=" + subsCounter.getValue() + " newValue=" + encoding.value);
}
subsCounter.loadValue(info.id, encoding.value);
subsCounter.processReload();
out.print("#Counter queue " + queueIDForCounter + " value=" + subsCounter.getValue() + ", result=" + subsCounter.getValue());
if (subsCounter.getValue() < 0)
{
out.println(" #NegativeCounter!!!!");
}
else
{
out.println();
}
out.println();
}
else if (info.getUserRecordType() == JournalStorageManager.PAGE_CURSOR_COUNTER_INC)
{
PageCountRecordInc encoding = (PageCountRecordInc)newObjectEncoding(info);
long queueIDForCounter = encoding.queueID;
PageSubscriptionCounterImpl subsCounter = lookupCounter(counters, queueIDForCounter);
subsCounter.loadInc(info.id, (int)encoding.value);
subsCounter.processReload();
out.print("#Counter queue " + queueIDForCounter + " value=" + subsCounter.getValue() + " increased by " + encoding.value);
if (subsCounter.getValue() < 0)
{
out.println(" #NegativeCounter!!!!");
}
else
{
out.println();
}
out.println();
}
}
});
}
out.println();
if (counters.size() != 0)
{
out.println("#Counters during initial load:");
printCounters(out, counters);
}
out.println("### Surviving Records Summary ###");
List<RecordInfo> records = new LinkedList<RecordInfo>();
List<PreparedTransactionInfo> preparedTransactions = new LinkedList<PreparedTransactionInfo>();
journal.start();
final StringBuffer bufferFailingTransactions = new StringBuffer();
int messageCount = 0;
Map<Long, Integer> messageRefCounts = new HashMap<Long, Integer>();
int preparedMessageCount = 0;
Map<Long, Integer> preparedMessageRefCount = new HashMap<Long, Integer>();
journal.load(records, preparedTransactions, new TransactionFailureCallback()
{
public void failedTransaction(long transactionID, List<RecordInfo> records, List<RecordInfo> recordsToDelete)
{
bufferFailingTransactions.append("Transaction " + transactionID + " failed with these records:\n");
for (RecordInfo info : records)
{
bufferFailingTransactions.append("- " + describeRecord(info) + "\n");
}
for (RecordInfo info : recordsToDelete)
{
bufferFailingTransactions.append("- " + describeRecord(info) + " <marked to delete>\n");
}
}
}, false);
counters.clear();
for (RecordInfo info : records)
{
PageSubscriptionCounterImpl subsCounter = null;
long queueIDForCounter = 0;
Object o = newObjectEncoding(info);
if (info.getUserRecordType() == JournalStorageManager.ADD_MESSAGE)
{
messageCount++;
}
else if (info.getUserRecordType() == JournalStorageManager.ADD_REF)
{
ReferenceDescribe ref = (ReferenceDescribe)o;
Integer count = messageRefCounts.get(ref.refEncoding.queueID);
if (count == null)
{
count = 1;
messageRefCounts.put(ref.refEncoding.queueID, count);
}
else
{
messageRefCounts.put(ref.refEncoding.queueID, count + 1);
}
}
else if (info.getUserRecordType() == JournalStorageManager.ACKNOWLEDGE_REF)
{
AckDescribe ref = (AckDescribe)o;
Integer count = messageRefCounts.get(ref.refEncoding.queueID);
if (count == null)
{
messageRefCounts.put(ref.refEncoding.queueID, 0);
}
else
{
messageRefCounts.put(ref.refEncoding.queueID, count - 1);
}
}
else if (info.getUserRecordType() == JournalStorageManager.PAGE_CURSOR_COUNTER_VALUE)
{
PageCountRecord encoding = (PageCountRecord)o;
queueIDForCounter = encoding.queueID;
subsCounter = lookupCounter(counters, queueIDForCounter);
subsCounter.loadValue(info.id, encoding.value);
subsCounter.processReload();
}
else if (info.getUserRecordType() == JournalStorageManager.PAGE_CURSOR_COUNTER_INC)
{
PageCountRecordInc encoding = (PageCountRecordInc)o;
queueIDForCounter = encoding.queueID;
subsCounter = lookupCounter(counters, queueIDForCounter);
subsCounter.loadInc(info.id, (int)encoding.value);
subsCounter.processReload();
}
out.println(describeRecord(info, o));
if (subsCounter != null)
{
out.println("##SubsCounter for queue=" + queueIDForCounter + ", value=" + subsCounter.getValue());
out.println();
}
}