* @param txn_idx
*/
protected final void incrementTransactionCounter(final ClientResponse cresponse, final int txn_idx) {
// Only include it if it wasn't rejected
// This is actually handled in the Distributer, but it doesn't hurt to have this here
Status status = cresponse.getStatus();
if (status == Status.OK || status == Status.ABORT_USER) {
// TRANSACTION COUNTERS
boolean is_specexec = cresponse.isSpeculative();
boolean is_dtxn = (cresponse.isSinglePartition() == false);
synchronized (m_txnStats.transactions) {
m_txnStats.transactions.put(txn_idx);
if (is_dtxn) m_txnStats.dtxns.put(txn_idx);
if (is_specexec) m_txnStats.specexecs.put(txn_idx);
} // SYNCH
// LATENCIES COUNTERS
// Ignore zero latencies... Not sure why this happens...
int latency = cresponse.getClusterRoundtrip();
if (latency > 0) {
Map<Integer, ObjectHistogram<Integer>> latenciesMap = (is_dtxn ? m_txnStats.dtxnLatencies :
m_txnStats.spLatencies);
Histogram<Integer> latencies = latenciesMap.get(txn_idx);
if (latencies == null) {
synchronized (latenciesMap) {
latencies = latenciesMap.get(txn_idx);
if (latencies == null) {
latencies = new ObjectHistogram<Integer>();
latenciesMap.put(txn_idx, (ObjectHistogram<Integer>)latencies);
}
} // SYNCH
}
synchronized (latencies) {
latencies.put(latency);
} // SYNCH
}
// RESPONSE ENTRIES
if (m_enableResponseEntries) {
long timestamp = System.currentTimeMillis();
m_responseEntries.add(cresponse, m_id, txn_idx, timestamp);
}
// BASE PARTITIONS
if (m_txnStats.isBasePartitionsEnabled()) {
synchronized (m_txnStats.basePartitions) {
m_txnStats.basePartitions.put(cresponse.getBasePartition());
} // SYNCH
}
}
// else if (status == Status.ABORT_UNEXPECTED) {
// LOG.warn("Invalid " + m_countDisplayNames[txn_idx] + " response!\n" + cresponse);
// if (cresponse.getException() != null) {
// cresponse.getException().printStackTrace();
// }
// if (cresponse.getStatusString() != null) {
// LOG.warn(cresponse.getStatusString());
// }
// }
if (m_txnStats.isResponsesStatusesEnabled()) {
synchronized (m_txnStats.responseStatuses) {
m_txnStats.responseStatuses.put(status.ordinal());
} // SYNCH
}
}