Github user ohadshacham commented on a diff in the pull request: https://github.com/apache/incubator-omid/pull/46#discussion_r223989230 --- Diff: transaction-client/src/main/java/org/apache/omid/transaction/AbstractTransactionManager.java --- @@ -350,6 +356,43 @@ private void markReadOnlyTransaction(AbstractTransaction<? extends CellId> readO } + private void commitLowLatencyTransaction(AbstractTransaction<? extends CellId> tx) + throws RollbackException, TransactionException { + try { + + long commitTs = tsoClient.commit(tx.getStartTimestamp(), tx.getWriteSet(), tx.getConflictFreeWriteSet()).get(); + boolean committed = commitTableWriter.atomicAddCommittedTransaction(tx.getStartTimestamp(),commitTs); + if (!committed) { + // Transaction has been invalidated by other client + rollback(tx); + commitTableClient.completeTransaction(tx.getStartTimestamp()); + rolledbackTxsCounter.inc(); + throw new RollbackException("Transaction " + tx.getTransactionId() + " got invalidated"); + } + certifyCommitForTx(tx, commitTs); + updateShadowCellsAndRemoveCommitTableEntry(tx, postCommitter); + + } catch (ExecutionException e) { + if (e.getCause() instanceof AbortException) { // TSO reports Tx conflicts as AbortExceptions in the future + rollback(tx); + rolledbackTxsCounter.inc(); + throw new RollbackException("Conflicts detected in tx writeset", e.getCause()); + } + + if (e.getCause() instanceof ServiceUnavailableException || e.getCause() instanceof ConnectionException) { + errorTxsCounter.inc(); + rollback(tx); // Rollback proactively cause it's likely that a new TSOServer is now master --- End diff -- the leader
---