[jira] [Commented] (IGNITE-15086) Design a public tx API

2021-07-15 Thread Vyacheslav Koptilin (Jira)


[ 
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

2021-07-15 Thread Alexey Scherbakov (Jira)


[ 
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

2021-07-13 Thread Alexey Scherbakov (Jira)


[ 
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)