[ https://issues.apache.org/jira/browse/IGNITE-19428?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17724806#comment-17724806 ]
Denis Chudov commented on IGNITE-19428: --------------------------------------- [~alapin] LGTM. > Implement placement driver API > ------------------------------ > > Key: IGNITE-19428 > URL: https://issues.apache.org/jira/browse/IGNITE-19428 > Project: Ignite > Issue Type: Improvement > Reporter: Alexander Lapin > Assignee: Alexander Lapin > Priority: Major > Labels: iep-101, ignite-3 > > h3. Motivation > In order to implement RW part of tx protocol it's required to check whether > we touch same primary replica that was previously enlisted and await primary > replica appearance on group readiness. Currently it's implemented using same > raft-leader check on top of retry logic with throttling which is inefficient > and doesn't support overall idea of hiding replication protocol details under > replicas umbrella. > h3. Definition of done > Long story short, it's required to implement following API (exact one or > similar) > {code:java} > /** > * Returns a future for the primary replica for the specified replication > group whose expiration time (the right border of the > * corresponding lease interval) is greater than or equal to the > timestamp passed as a parameter. Please pay attention that there are > * no restriction on the lease start time (left border), it can either be > less or greater than or equal to proposed timestamp. > * Given method will await for an appropriate primary replica appearance > if there's no already existing one. Such awaiting logic is > * unbounded, so it's mandatory to use explicit await termination like > {@code orTimeout}. > * > * @param replicationGroupId Replication group id. > * @param timestamp Timestamp reference value. > * @return Primary replica future. > */ > public CompletableFuture<ReplicaMeta> > awaitPrimaryReplica(ReplicationGroupId replicationGroupId, HybridTimestamp > timestamp) { > return CompletableFuture.completedFuture(null); > } > /** > * Same as {@link > PlacementDriverManager#awaitPrimaryReplica(ReplicationGroupId, > HybridTimestamp)} despite the fact that given method > * won't await for an appropriate primary replica appearance if there's > no already existing one, in that case null will be returned. > * > * @param replicationGroupId Replication group id. > * @param timestamp Timestamp reference value. > * @return Primary replica future. > */ > public CompletableFuture<ReplicaMeta> > getPrimaryReplica(ReplicationGroupId replicationGroupId, HybridTimestamp > timestamp) { > return CompletableFuture.completedFuture(null); > } {code} > h3. Implementation Notes > Seems reasonable to reuse PendingComparableValuesTracker logic in order to > implement aforementioned API. Some PendingComparableValuesTracker > enhancement are required though, see > https://issues.apache.org/jira/browse/IGNITE-18859 for more details. -- This message was sent by Atlassian Jira (v8.20.10#820010)