[jira] [Commented] (IGNITE-15086) Design a public tx API
[ https://issues.apache.org/jira/browse/IGNITE-15086?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17381348#comment-17381348 ] Vyacheslav Koptilin commented on IGNITE-15086: -- In general, the proposed API looks good to me. > Design a public tx API > -- > > Key: IGNITE-15086 > URL: https://issues.apache.org/jira/browse/IGNITE-15086 > Project: Ignite > Issue Type: Task >Reporter: Alexey Scherbakov >Assignee: Alexey Scherbakov >Priority: Major > Labels: iep-61, ignite-3 > Fix For: 3.0.0-alpha3 > > Time Spent: 1h 20m > Remaining Estimate: 0h > > Design a public tx API. > The proposed design includes async and sync APIs to execute a transaction. > The transaction facade looks like this: > {code:java} > /** > * Ignite Transactions facade. > */ > public interface IgniteTransactions { > /** > * Begins the transaction. > * > * @return The future. > */ > CompletableFuture beginAsync(); > /** > * Synchronously executes a closure within a transaction. > * > * If the closure is executed normally (no exceptions), the transaction > is automatically committed. > * > * @param clo The closure. > */ > void runInTransaction(Consumer clo); > } > {code} > Transacton interface: > {code:java} > /** > * The transaction. > */ > public interface Transaction { > /** > * Synchronously commits a transaction. > * Does nothing if it's already finished by committing or rolling back. > */ > void commit(); > /** > * Asynchronously commits a transaction. > * Does nothing if it's already finished by committing or rolling back. > * > * @return The future. > */ > CompletableFuture commitAsync(); > /** > * Synchronously rolls back a transaction. > * Does nothing if it's already finished by committing or rolling back. > */ > void rollback(); > /** > * Asynchronously rolls back a transaction. > * Does nothing if it's already finished by committing or rolling back. > * > * @return The future. > */ > CompletableFuture rollbackAsync(); > } > {code} > Example of synchronous transaction: > {code:java} > igniteTransactions.runInTransaction(tx -> { > Table txTable = table.withTransaction(tx); // table view enlisted > in the transaction. > txTable.upsertAsync(...); > tx.commit(); > }); > {code} > Example of asynchronous transaction: > {code:java} > igniteTransactions.beginAsync() > .thenApply(tx -> accounts.withTransaction(tx)) > .thenCompose(txTbl -> txTbl.upsertAsync(...).thenApply(i -> > txTbl.transaction())) > .thenCompose(Transaction::commitAsync); > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)
[jira] [Commented] (IGNITE-15086) Design a public tx API
[ https://issues.apache.org/jira/browse/IGNITE-15086?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17381249#comment-17381249 ] Alexey Scherbakov commented on IGNITE-15086: It seems the proposed API is fine at this point. Dev-list discussion [1] Waiting for a formal review. [1] [https://lists.apache.org/thread.html/r0d66b3dc788e3caa2afc75aa8792e82a25abe3cda213500cb6238b2c%40%3Cdev.ignite.apache.org%3E] > Design a public tx API > -- > > Key: IGNITE-15086 > URL: https://issues.apache.org/jira/browse/IGNITE-15086 > Project: Ignite > Issue Type: Task >Reporter: Alexey Scherbakov >Assignee: Alexey Scherbakov >Priority: Major > Labels: iep-61, ignite-3 > Time Spent: 1h 20m > Remaining Estimate: 0h > > Design a public tx API. > The proposed design includes async and sync APIs to execute a transaction. > The transaction facade looks like this: > {code} > /** > * Ignite Transactions facade. > */ > public interface IgniteTransactions { > /** > * Begins the transaction. > * > * @return The future. > */ > CompletableFuture beginAsync(); > /** > * Synchronously executes a closure within a transaction. > * > * @param clo The closure. > */ > void runInTransaction(Consumer clo); > } > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)
[jira] [Commented] (IGNITE-15086) Design a public tx API
[ https://issues.apache.org/jira/browse/IGNITE-15086?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17379861#comment-17379861 ] Alexey Scherbakov commented on IGNITE-15086: Transaction examples can be found here [1] Additionaly, the PR includes some code to propagate tx context into InternalTable, which later will be used to build up a transactional execution. [1] https://github.com/apache/ignite-3/blob/d2a0003ac69058cddc36a1a6c8a57ada772ccff1/modules/table/src/test/java/org/apache/ignite/internal/table/TxTest.java > Design a public tx API > -- > > Key: IGNITE-15086 > URL: https://issues.apache.org/jira/browse/IGNITE-15086 > Project: Ignite > Issue Type: Task >Reporter: Alexey Scherbakov >Assignee: Alexey Scherbakov >Priority: Major > Labels: iep-61, ignite-3 > Time Spent: 10m > Remaining Estimate: 0h > > Design a public tx API. > The proposed design includes async and sync APIs to execute a transaction. > The transaction facade looks like this: > {code} > /** > * Ignite Transactions facade. > */ > public interface IgniteTransactions { > /** > * Begins the transaction. > * > * @return The future. > */ > CompletableFuture beginAsync(); > /** > * Synchronously executes a closure within a transaction. > * > * @param clo The closure. > */ > void runInTransaction(Consumer clo); > } > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)