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

Vladislav Pyatkov updated IGNITE-28897:
---------------------------------------
    Description: 
Change the behavior of lockTxEntry, lockTxEntries, and the async* variants: 
instead of `boolean` they have to return Map<CacheEntry<K, V>, Boolean>.
* Return Map<CacheEntry<K, V>, Boolean> with an outcome for each entry.
* Send expected versions to primary nodes.
* Validate each version on the primary.
* Return false for lock conflicts or version mismatches.
* Return true for locks already held by the transaction.
* Preserve existing timeout semantics.

h3. Definition of done
* Cover partial success, repeated acquisition, near caches, timeouts, and 
batched requests with tests.
* All existing SELECT FOR UPDATE tests pass.

Proposed internal API:
{code:java}
/**
 * @return Lock result for each supplied entry, in input iteration order.
*/
public Map<CacheEntry<K, V>, Boolean> lockTxEntries(Collection<CacheEntry<K, 
V>> entries, long waitTimeout)

/**
 * Asynchronous counterpart of {@link #lockTxEntries(Collection, long)} with 
the same partial-success semantics.
 * @return Future containing a lock result for each supplied entry.
*/
public IgniteInternalFuture<Map<CacheEntry<K, V>, Boolean>> 
lockTxEntriesAsync(Collection<CacheEntry<K, V>> entries, long waitTimeout);
{code}



  was:
Change the behavior of lockTxEntry, lockTxEntries, and the async* variants: 
instead of `boolean` they have to return `ACQUIRED`, `LOCK_CONFLICT` or 
`VERSION_MISMATCH`.
{code}
public enum TxLockResult {
    /** All locks were acquired and entry versions matched. */
    ACQUIRED,

    /** A lock could not be acquired within the specified timeout. */
    LOCK_CONFLICT,

    /** A lock could not be acquired, due to entry versions mismatching the 
expected ones. */
    VERSION_MISMATCH
}
{code}
Changed API:
{code}
TxLockResult lockTxEntry(
    CacheEntry<K, V> entry,
    long waitTimeout
) throws IgniteCheckedException;

TxLockResult lockTxEntries(
    Collection<CacheEntry<K, V>> entries,
    long waitTimeout
) throws IgniteCheckedException;

IgniteInternalFuture<TxLockResult> lockTxEntryAsync(
    CacheEntry<K, V> entry,
    long waitTimeout
);

IgniteInternalFuture<TxLockResult> lockTxEntriesAsync(
    Collection<CacheEntry<K, V>> entries,
    long waitTimeout
);
{code}




> Return detailed result from transactional lock API
> --------------------------------------------------
>
>                 Key: IGNITE-28897
>                 URL: https://issues.apache.org/jira/browse/IGNITE-28897
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Vladislav Pyatkov
>            Priority: Major
>              Labels: ignite-2
>
> Change the behavior of lockTxEntry, lockTxEntries, and the async* variants: 
> instead of `boolean` they have to return Map<CacheEntry<K, V>, Boolean>.
> * Return Map<CacheEntry<K, V>, Boolean> with an outcome for each entry.
> * Send expected versions to primary nodes.
> * Validate each version on the primary.
> * Return false for lock conflicts or version mismatches.
> * Return true for locks already held by the transaction.
> * Preserve existing timeout semantics.
> h3. Definition of done
> * Cover partial success, repeated acquisition, near caches, timeouts, and 
> batched requests with tests.
> * All existing SELECT FOR UPDATE tests pass.
> Proposed internal API:
> {code:java}
> /**
>  * @return Lock result for each supplied entry, in input iteration order.
> */
> public Map<CacheEntry<K, V>, Boolean> lockTxEntries(Collection<CacheEntry<K, 
> V>> entries, long waitTimeout)
> /**
>  * Asynchronous counterpart of {@link #lockTxEntries(Collection, long)} with 
> the same partial-success semantics.
>  * @return Future containing a lock result for each supplied entry.
> */
> public IgniteInternalFuture<Map<CacheEntry<K, V>, Boolean>> 
> lockTxEntriesAsync(Collection<CacheEntry<K, V>> entries, long waitTimeout);
> {code}



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

Reply via email to