You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Alexander Lapin (Jira)" <ji...@apache.org> on 2023/05/10 19:42:00 UTC

[jira] [Updated] (IGNITE-18859) PendingComparableValuesTracker extension in order to support multiple idependent waiters assosiated with values

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

Alexander Lapin updated IGNITE-18859:
-------------------------------------
    Summary: PendingComparableValuesTracker extension in order to support multiple idependent waiters assosiated with values  (was: PartitionReplicaListener extension in order to support multiple idependent waiters assosiated with values)

> PendingComparableValuesTracker extension in order to support multiple idependent waiters assosiated with values
> ---------------------------------------------------------------------------------------------------------------
>
>                 Key: IGNITE-18859
>                 URL: https://issues.apache.org/jira/browse/IGNITE-18859
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Vladislav Pyatkov
>            Assignee: Alexander Lapin
>            Priority: Major
>              Labels: ignite-3
>          Time Spent: 1h 20m
>  Remaining Estimate: 0h
>
> h3. Motivation
> In order to implement placement driver API that will add an ability to await and get primary replicas in seems reasonable to reuse PendingComparableValuesTracker just because given class provides most of required functionality.
> {code:java}
> /**
>  * Tracker that stores comparable value internally, this value can grow when {@link #update(Comparable)} method is called. The tracker gives
>  * ability to wait for certain value, see {@link #waitFor(Comparable)}.
>  */
> public class PendingComparableValuesTracker<T extends Comparable<T>> implements ManuallyCloseable { {code}
> However some upgrades are needed - see the definition of done section.
> h3. Definition of done
>  * It's required to have an ability to complete pending waiter with specific value propagated to an PendingComparableValuesTracker#update() method.
>  * It's required to support multiple independent waiters associated with same waiter key.
> h3. Implementation notes
> It make sense to extend PendingComparableValuesTracker with a new class that will store multiple independent waiters instead of single one, in other words
> {code:java}
> private final ConcurrentSkipListMap<T, Set<CompletableFuture<R>>> valueFutures = new ConcurrentSkipListMap<>(); {code}
> instead of
> {code:java}
> private final ConcurrentSkipListMap<T, CompletableFuture<R>> valueFutures = new ConcurrentSkipListMap<>();{code}
> In addition to that it makes sense to overload
> {code:java}
> public void update(T newValue) {code}
> with
> {code:java}
> public void update(T newValue, @Nullable R futureResult)  {code}
> in order to retrieve CompletableFuture<R> from  PendingComparableValuesTracker#waitFor() instead of CompletableFuture<Void>. Of course it's valid to have Void as R.
>  



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