public static TransactionConflictException create( TableReference tableRef, long timestamp, Collection<CellConflict> spanningWrites, Collection<CellConflict> dominatingWrites, long elapsedMillis) { StringBuilder sb = new StringBuilder(); sb.append("Transaction Conflict after ") .append(elapsedMillis) .append(" ms for table: ") .append(tableRef.getQualifiedName()) .append(" with start timestamp: ") .append(timestamp) .append('\n'); if (!spanningWrites.isEmpty()) { sb.append("Another transaction wrote values before our start timestamp and committed after. Cells:\n"); formatConflicts(spanningWrites, sb); sb.append('\n'); } if (!dominatingWrites.isEmpty()) { sb.append("Another transaction wrote and committed between our start and end ts.") .append(" It is possible we are a long running transaction. Cells:\n"); formatConflicts(dominatingWrites, sb); sb.append('\n'); } return new TransactionConflictException(sb.toString(), spanningWrites, dominatingWrites); }
public static TransactionConflictException create( TableReference tableRef, long timestamp, Collection<CellConflict> spanningWrites, Collection<CellConflict> dominatingWrites, long elapsedMillis) { StringBuilder sb = new StringBuilder(); sb.append("Transaction Conflict after ") .append(elapsedMillis) .append(" ms for table: ") .append(tableRef.getQualifiedName()) .append(" with start timestamp: ") .append(timestamp) .append('\n'); if (!spanningWrites.isEmpty()) { sb.append("Another transaction wrote values before our start timestamp and committed after. Cells:\n"); formatConflicts(spanningWrites, sb); sb.append('\n'); } if (!dominatingWrites.isEmpty()) { sb.append("Another transaction wrote and committed between our start and end ts.") .append(" It is possible we are a long running transaction. Cells:\n"); formatConflicts(dominatingWrites, sb); sb.append('\n'); } return new TransactionConflictException(sb.toString(), spanningWrites, dominatingWrites); }