You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Roman Puchkovskiy (Jira)" <ji...@apache.org> on 2026/04/09 13:53:00 UTC

[jira] [Commented] (IGNITE-28225) Retry handshake if a network issue appeared

    [ https://issues.apache.org/jira/browse/IGNITE-28225?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18072320#comment-18072320 ] 

Roman Puchkovskiy commented on IGNITE-28225:
--------------------------------------------

Here is a proposal.

All exceptions happening during handshake can be partitioned into 2 classes:
 # 'no use to retry until something changes on the other side' (of I/O exceptions those are ConnectException and NoRouteToHostException; plus HandshakeException that signals that the other side does not understand our handshake protocol); let's call it T (for Terminal)
 # and 'others'; let's call it O

What shoud happen in send/invoke of MessagingService:
 # O we always retry
 # T:
 ## in send by address, never retry, just communicate the exception to the caller
 ## in send/invoke by name, retry until the recipient falls off the Physical Topology (PT); after that, return RecipientLeftException
 ## in send/invoke by ephemeral ID, retry until we know that the ID has become stale (in which case return RecipientLeftException)
 ### in invoke by ephemeral ID, additionally track the timeout (if it's triggered, return TimeoutException just in case, as on the higher level a TimeoutException will be triggered)
 ### in send by ephemeral ID, if we never get information about a node getting stale, we'll retry forever

The last sub-sub-item is unpleasant. But I see that usages of send by ephemeral ID fall into 2 groups:
 # Most of them are for components that operate on the LT (Logical topology) nodes
 # Just one is for cluster initializer

So we could split send-by-ephemeral-ID into 2 methods:
 # Send by ID that respects LT. If keeps retrying T only while the node falls off the LT
 # Send by ID that doesn't care about LT - it would be used by the cluster initializer; there, potential infinite retries don't seem to be a problem

> Retry handshake if a network issue appeared
> -------------------------------------------
>
>                 Key: IGNITE-28225
>                 URL: https://issues.apache.org/jira/browse/IGNITE-28225
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Ivan Bessonov
>            Priority: Major
>              Labels: ignite-3
>
> In `org.apache.ignite.internal.network.DefaultMessagingService#sendViaNetwork` we only retry opening the channel in `sender.send`, while expecting that `channelFuture` must be acquired successfully.
> This might not be the case, we should retry the channel creation with a retry strategy that would depend on a specific API call (send by address / name / ID / etc.)



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