This is an automated email from the ASF dual-hosted git repository. tkalkirill pushed a commit to branch ignite-26721 in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit dfd878d523139542f73d485274317753f8a326c6 Author: Kirill Tkalenko <[email protected]> AuthorDate: Mon Oct 20 12:56:21 2025 +0300 IGNITE-26721 wip --- .../ignite/internal/raft/RaftGroupServiceImpl.java | 21 +++++++++++++++++---- .../apache/ignite/internal/raft/RetryContext.java | 16 +++++++++++++++- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/modules/raft/src/main/java/org/apache/ignite/internal/raft/RaftGroupServiceImpl.java b/modules/raft/src/main/java/org/apache/ignite/internal/raft/RaftGroupServiceImpl.java index 27b8873491d..7ca0971886f 100644 --- a/modules/raft/src/main/java/org/apache/ignite/internal/raft/RaftGroupServiceImpl.java +++ b/modules/raft/src/main/java/org/apache/ignite/internal/raft/RaftGroupServiceImpl.java @@ -500,7 +500,7 @@ public class RaftGroupServiceImpl implements RaftGroupService { .forced(forced) .build(); - return sendWithRetry(peer, requestFactory, false) + return sendWithRetry(peer, -1, Long.MAX_VALUE, NO_DESCRIPTION, requestFactory, false) .thenAccept(resp -> {}); } @@ -604,7 +604,7 @@ public class RaftGroupServiceImpl implements RaftGroupService { Function<Peer, ? extends NetworkMessage> requestFactory, boolean throttleOnOverload ) { - return sendWithRetry(peer, defaultTimeout(), NO_DESCRIPTION, requestFactory, throttleOnOverload); + return sendWithRetry(peer, defaultTimeout(), -1, NO_DESCRIPTION, requestFactory, throttleOnOverload); } private <R extends NetworkMessage> CompletableFuture<R> sendWithRetry( @@ -613,6 +613,17 @@ public class RaftGroupServiceImpl implements RaftGroupService { Supplier<String> originDescription, Function<Peer, ? extends NetworkMessage> requestFactory, boolean throttleOnOverload + ) { + return sendWithRetry(peer, timeoutMillis, -1, originDescription, requestFactory, throttleOnOverload); + } + + private <R extends NetworkMessage> CompletableFuture<R> sendWithRetry( + Peer peer, + long timeoutMillis, + long responseTimeoutMillis, + Supplier<String> originDescription, + Function<Peer, ? extends NetworkMessage> requestFactory, + boolean throttleOnOverload ) { var future = new CompletableFuture<R>(); @@ -636,7 +647,7 @@ public class RaftGroupServiceImpl implements RaftGroupService { } long stopTime = timeoutMillis >= 0 ? currentTimeMillis() + timeoutMillis : Long.MAX_VALUE; - var context = new RetryContext(groupId, peer, originDescription, requestFactory, stopTime); + var context = new RetryContext(groupId, peer, originDescription, requestFactory, stopTime, responseTimeoutMillis); sendWithRetry(future, context, peerThrottlingContextHolder); @@ -689,7 +700,9 @@ public class RaftGroupServiceImpl implements RaftGroupService { } peerThrottlingContextHolder.beforeRequest(); - long responseTimeout = peerThrottlingContextHolder.peerRequestTimeoutMillis(); + + long responseTimeout = retryContext.responseTimeoutMillis() == -1 + ? peerThrottlingContextHolder.peerRequestTimeoutMillis() : retryContext.responseTimeoutMillis(); resolvePeer(retryContext.targetPeer()) .thenCompose(node -> cluster.messagingService() diff --git a/modules/raft/src/main/java/org/apache/ignite/internal/raft/RetryContext.java b/modules/raft/src/main/java/org/apache/ignite/internal/raft/RetryContext.java index e1974cf1301..fe2a7dfbad3 100644 --- a/modules/raft/src/main/java/org/apache/ignite/internal/raft/RetryContext.java +++ b/modules/raft/src/main/java/org/apache/ignite/internal/raft/RetryContext.java @@ -92,6 +92,8 @@ class RetryContext { private long attemptStartTime; + private final long responseTimeoutMillis; + /** * Creates a context. * @@ -101,13 +103,16 @@ class RetryContext { * this request is independent. * @param requestFactory Factory for creating requests to the target peer. * @param stopTime Timestamp that denotes the point in time up to which retry attempts will be made. + * @param responseTimeoutMillis Response timeout for each attempt (up to {@code stopTime}) in milliseconds, {@code -1} if using + * {@link ThrottlingContextHolder#peerRequestTimeoutMillis} (default). */ RetryContext( String groupId, Peer targetPeer, Supplier<String> originDescription, Function<Peer, ? extends NetworkMessage> requestFactory, - long stopTime + long stopTime, + long responseTimeoutMillis ) { this.groupId = groupId; this.targetPeer = targetPeer; @@ -118,6 +123,7 @@ class RetryContext { this.startTime = System.currentTimeMillis(); this.attemptScheduleTime = this.startTime; this.attemptStartTime = this.startTime; + this.responseTimeoutMillis = responseTimeoutMillis; } Peer targetPeer() { @@ -241,4 +247,12 @@ class RetryContext { return "[time=" + timestamp + ", msg=" + reason + "]"; } } + + /** + * Returns response timeout for each attempt (up to {@code stopTime}) in milliseconds, {@code -1} if using + * {@link ThrottlingContextHolder#peerRequestTimeoutMillis} (default). + */ + long responseTimeoutMillis() { + return responseTimeoutMillis; + } }
