private void handleTransactionConflict(TableReference tableRef) { transactionOutcomeMetrics.markReadWriteConflict(tableRef); throw TransactionSerializableConflictException.create(tableRef, getTimestamp(), System.currentTimeMillis() - timeCreated); } }
@Test public void conflictsAcrossMultipleUnsafeTablesAreTrackedWithTheSamePlaceholder() { transactionOutcomeMetrics.markReadWriteConflict(UNSAFE_REFERENCE_1); transactionOutcomeMetrics.markReadWriteConflict(UNSAFE_REFERENCE_2); transactionOutcomeMetrics.markReadWriteConflict(UNSAFE_REFERENCE_1); transactionOutcomeMetrics.markReadWriteConflict(UNSAFE_REFERENCE_2); assertThat(transactionOutcomeMetrics).hasPlaceholderReadWriteConflicts(4); }
@Test public void correctlyDistinguishesConflictsInSafeAndUnsafeTables() { transactionOutcomeMetrics.markReadWriteConflict(UNSAFE_REFERENCE_1); transactionOutcomeMetrics.markReadWriteConflict(SAFE_REFERENCE_1); transactionOutcomeMetrics.markReadWriteConflict(UNSAFE_REFERENCE_2); transactionOutcomeMetrics.markReadWriteConflict(SAFE_REFERENCE_2); assertThat(transactionOutcomeMetrics) .hasPlaceholderReadWriteConflicts(2) .hasNamedReadWriteConflicts(SAFE_REFERENCE_1, 1) .hasNamedReadWriteConflicts(SAFE_REFERENCE_2, 1); } }
@Test public void conflictsInDifferentTablesAreSeparateMetrics() { transactionOutcomeMetrics.markReadWriteConflict(SAFE_REFERENCE_1); transactionOutcomeMetrics.markReadWriteConflict(SAFE_REFERENCE_2); assertThat(transactionOutcomeMetrics) .hasNamedReadWriteConflicts(SAFE_REFERENCE_1, 1) .hasNamedReadWriteConflicts(SAFE_REFERENCE_2, 1); }
@Test public void tableReferencesIncludedAsTagIfSafe() { transactionOutcomeMetrics.markReadWriteConflict(SAFE_REFERENCE_1); transactionOutcomeMetrics.markReadWriteConflict(SAFE_REFERENCE_1); transactionOutcomeMetrics.markWriteWriteConflict(SAFE_REFERENCE_1); assertThat(transactionOutcomeMetrics) .hasNamedReadWriteConflicts(SAFE_REFERENCE_1, 2) .hasNamedWriteWriteConflicts(SAFE_REFERENCE_1, 1); }
@Test public void conflictsInUnsafeTablesAreNotIncludedAsTags() { transactionOutcomeMetrics.markWriteWriteConflict(UNSAFE_REFERENCE_1); transactionOutcomeMetrics.markReadWriteConflict(UNSAFE_REFERENCE_2); assertThat(transactionOutcomeMetrics) .hasNoKnowledgeOf(UNSAFE_REFERENCE_1) .hasNoKnowledgeOf(UNSAFE_REFERENCE_2); }
private void handleTransactionConflict(TableReference tableRef) { transactionOutcomeMetrics.markReadWriteConflict(tableRef); throw TransactionSerializableConflictException.create(tableRef, getTimestamp(), System.currentTimeMillis() - timeCreated); } }