[ 
https://issues.apache.org/jira/browse/IGNITE-23603?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vladislav Pyatkov updated IGNITE-23603:
---------------------------------------
    Description: 
h3. Motivation
We are creating an implicit transaction through an internal API 
(IgniteTransactionsImpl#beginImplicit). It is needed to distinguish observation 
timestamps for multiple clients and embedded mode.
We do not use the API only for a client get-all request handler because we 
cannot determine if the transaction can execute as a direct one (all keys in 
the one partition) or not.
There are three ways we have:
# Use implicit RW transaction for batch read.
# Use implicit regular (not a direct one) RO transaction for batch read.
# Determine on the client side whether all keys are in one partition (start 
implicit RO) or not (start implicit RW) and send another request type 
(ClientOp#TUPLE_GET_DIRECT_ALL instead of common ClientOp#TUPLE_GET_ALL) to the 
server side.
{code}
return readTableAsync(in, tables).thenCompose(table -> {
    // TODO: IGNITE-23603 We have to create an implicit transaction, but leave 
a possibility to start RO direct.
    var tx = readTx(in, out, resources);
    return readTuples(in, table, true).thenCompose(keyTuples -> {
        return table.recordView().getAllAsync(tx, keyTuples).thenAccept(tuples 
->
                writeTuplesNullable(out, tuples, TuplePart.KEY_AND_VAL, 
table.schemaView()));
    });
});
{code}
h3. Definition of done
We start an implicit transaction for batch read for thinc client.
TODO that I left in ClientTupleGetAllRequest is removed.

  was:
h3. Motivation
We are creating an implicit transaction through an internal API 
(IgniteTransactionsImpl#beginImplicit). It is needed to distinguish observation 
timestamps for multiple clients and embedded mode.
Unfortunately, this API is useless to create a direct RO transaction because 
their logic works only if incomming transaction is null:
{code}
InternalTableImpl#get(org.apache.ignite.internal.schema.BinaryRowEx, 
org.apache.ignite.internal.tx.InternalTransaction)
InternalTableImpl#getAll(java.util.Collection<org.apache.ignite.internal.schema.BinaryRowEx>,
 org.apache.ignite.internal.tx.InternalTransaction)
{code}

h3. Definition of done
Add a possibility to create an implicit transaction for the RO direct.
This approach will be able to be used in ClientTupleGetAllRequest and 
ClientTupleGetRequest (I left TODOs there).


> Implicit transaction for direct RO read
> ---------------------------------------
>
>                 Key: IGNITE-23603
>                 URL: https://issues.apache.org/jira/browse/IGNITE-23603
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Vladislav Pyatkov
>            Priority: Major
>              Labels: ignite-3
>
> h3. Motivation
> We are creating an implicit transaction through an internal API 
> (IgniteTransactionsImpl#beginImplicit). It is needed to distinguish 
> observation timestamps for multiple clients and embedded mode.
> We do not use the API only for a client get-all request handler because we 
> cannot determine if the transaction can execute as a direct one (all keys in 
> the one partition) or not.
> There are three ways we have:
> # Use implicit RW transaction for batch read.
> # Use implicit regular (not a direct one) RO transaction for batch read.
> # Determine on the client side whether all keys are in one partition (start 
> implicit RO) or not (start implicit RW) and send another request type 
> (ClientOp#TUPLE_GET_DIRECT_ALL instead of common ClientOp#TUPLE_GET_ALL) to 
> the server side.
> {code}
> return readTableAsync(in, tables).thenCompose(table -> {
>     // TODO: IGNITE-23603 We have to create an implicit transaction, but 
> leave a possibility to start RO direct.
>     var tx = readTx(in, out, resources);
>     return readTuples(in, table, true).thenCompose(keyTuples -> {
>         return table.recordView().getAllAsync(tx, 
> keyTuples).thenAccept(tuples ->
>                 writeTuplesNullable(out, tuples, TuplePart.KEY_AND_VAL, 
> table.schemaView()));
>     });
> });
> {code}
> h3. Definition of done
> We start an implicit transaction for batch read for thinc client.
> TODO that I left in ClientTupleGetAllRequest is removed.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to