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

Denis Chudov updated IGNITE-16543:
----------------------------------
    Description: 
Implement an update(long causalityToken, BiFunction<T, Throwable, T> updater) 
method for VersionedValue. It is necessary to be able to call one listener 
(especially listenElements listeners) multiple times on the same causality 
token. 

Description:

Updates the value on the given causality token using the given updater. The 
updater receives the value on previous token, or \{@link Throwable} if 
exception or error was thrown, or default value (see constructor) if the value 
isn't initialized, or current intermediate value; and returns a new value.
This method can be called multiple times for the same token, and doesn't 
complete the future created for this token. The future is supposed to be 
completed by storage revision update in this case. If this method has been 
called at least once on the given token, the updater will receive a value that 
was evaluated by updater on previous call, as intermediate result. 
As the order of multiple calls of this method on the same token is unknown, 
operations done by the updater must be commutative. 
For example, this method was called for token N-1 and updater evaluated the 
value V1. Then a storage revision update happened. Then, this method is called 
for token N, updater receives V1 and evaluates V2. After that, this method is 
called once again for token N, then the updater receives V2 as intermediate 
result and evaluates V3. Then storage revision update happens and the future 
for token N completes with value V3. Regardless of order in which this method's 
calls are made, V3 should be the final result.

The method should return previous value.

  was:
Implement an update(long causalityToken, BiFunction<T, Throwable, T> updater) 
method for VersionedValue. It is necessary to be able to call one listener 
(especially listenElements listeners) multiple times on the same causality 
token. 

Description:

Updates the value on the given causality token using the given updater. The 
updater receives the value on previous token, or \{@link Throwable} if 
exception or error was thrown, or default value (see constructor) if the value 
isn't initialized, or current intermediate value. 
This method can be called multiple times for the same token, and doesn't 
complete the future created for this token. The future is supposed to be 
completed by storage revision update in this case. If this method has been 
called at least once on the given token, the updater will receive a value that 
was evaluated by updater on previous call, as intermediate result. 
As the order of multiple calls of this method on the same token is unknown, 
operations done by the updater must be commutative. 
For example, this method was called for token N-1 and updater evaluated the 
value V1. Then a storage revision update happened. Then, this method is called 
for token N, updater receives V1 and evaluates V2. After that, this method is 
called once again for token N, then the updater receives V2 as intermediate 
result and evaluates V3. Then storage revision update happens and the future 
for token N completes with value V3. Regardless of order in which this method's 
calls are made, V3 should be the final result.


> Implement an #update method for VersionedValue
> ----------------------------------------------
>
>                 Key: IGNITE-16543
>                 URL: https://issues.apache.org/jira/browse/IGNITE-16543
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Denis Chudov
>            Priority: Major
>              Labels: ignite-3
>
> Implement an update(long causalityToken, BiFunction<T, Throwable, T> updater) 
> method for VersionedValue. It is necessary to be able to call one listener 
> (especially listenElements listeners) multiple times on the same causality 
> token. 
> Description:
> Updates the value on the given causality token using the given updater. The 
> updater receives the value on previous token, or \{@link Throwable} if 
> exception or error was thrown, or default value (see constructor) if the 
> value isn't initialized, or current intermediate value; and returns a new 
> value.
> This method can be called multiple times for the same token, and doesn't 
> complete the future created for this token. The future is supposed to be 
> completed by storage revision update in this case. If this method has been 
> called at least once on the given token, the updater will receive a value 
> that was evaluated by updater on previous call, as intermediate result. 
> As the order of multiple calls of this method on the same token is unknown, 
> operations done by the updater must be commutative. 
> For example, this method was called for token N-1 and updater evaluated the 
> value V1. Then a storage revision update happened. Then, this method is 
> called for token N, updater receives V1 and evaluates V2. After that, this 
> method is called once again for token N, then the updater receives V2 as 
> intermediate result and evaluates V3. Then storage revision update happens 
> and the future for token N completes with value V3. Regardless of order in 
> which this method's calls are made, V3 should be the final result.
> The method should return previous value.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to