[ https://issues.apache.org/jira/browse/OMID-90?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16644682#comment-16644682 ]
ASF GitHub Bot commented on OMID-90: ------------------------------------ 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 > Reducing begin/commit latency by distributing the write to the commit table > --------------------------------------------------------------------------- > > Key: OMID-90 > URL: https://issues.apache.org/jira/browse/OMID-90 > Project: Apache Omid > Issue Type: Sub-task > Reporter: Ohad Shacham > Assignee: Yonatan Gottesman > Priority: Major > Attachments: OmidCloud-VLDB.pdf, omid90.patch > > > Today, Omid's commits are done by the transaction manager. In order to > efficiently write to the commit table, the transaction manager batches these > writes. This optimization, even thought reduces the write time to HBase, > significantly increases the begin and commit latency. The commit latency > increases since a commit operation returns only after its commit timestamp > was persisted in the commit table. And the begin latency increases since > begin returns a transaction id that is also used by the transaction to > identify its snapshot and therefore, begin returns only after all commits > with commit id smaller than the begin id was persisted in the commit table. > This is crucial, since a snapshot change during a transaction run may violate > snapshot isolation. > > The idea of this feature is to distribute the commit by moving the write to > the commit table from the server to the client. The transaction manager does > conflict analysis and returns a commit timestamp. While the client atomically > persists this commit in the commit table. > This significantly reduces the begin and commit latency, since batching is > not required anymore. A begin operation can immediately returns and a commit > operation returns after conflict detection. > This can introduce snapshot isolation violation since a slow client can > commit and change other transaction's snapsho. Therefore, we use an > invalidation technique which is similar to the one Omid uses today to > maintain snapshot isolation in high availability mode. -- This message was sent by Atlassian JIRA (v7.6.3#76005)