[
https://issues.apache.org/jira/browse/IGNITE-16678?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alexander Lapin updated IGNITE-16678:
-------------------------------------
Description:
There are three items to fix:
* Request preparation.
** leaderId should contain current leader instead of new one.
** peer parameter that is used as new leader is missing
* invoke sends given request to an inappropriate node: new leader instead of
current one.
* exception response doesn't propagate to client.
In other words instead of
{code:java}
TransferLeaderRequest req = factory.transferLeaderRequest()
.groupId(groupId).leaderId(PeerId.fromPeer(newLeader).toString()).build();
CompletableFuture<NetworkMessage> fut =
cluster.messagingService().invoke(newLeader.address(), req, rpcTimeout);
return fut.thenCompose(resp -> {
if (resp != null) {
RpcRequests.ErrorResponse resp0 = (RpcRequests.ErrorResponse) resp;
if (resp0.errorCode() != RaftError.SUCCESS.getNumber())
CompletableFuture.failedFuture( {code}
we should use
{code:java}
TransferLeaderRequest req = factory.transferLeaderRequest()
.groupId(groupId)
.leaderId(PeerId.fromPeer(leader).toString())
.peerId(PeerId.fromPeer(newLeader).toString())
.build();
CompletableFuture<NetworkMessage> fut =
cluster.messagingService().invoke(leader.address(), req, rpcTimeout);
return fut.thenCompose(resp -> {
if (resp != null) {
RpcRequests.ErrorResponse resp0 = (RpcRequests.ErrorResponse) resp;
if (resp0.errorCode() != RaftError.SUCCESS.getNumber())
return CompletableFuture.failedFuture( {code}
> org.apache.ignite.raft.client.service.RaftGroupService#transferLeadership
> doesn't work
> --------------------------------------------------------------------------------------
>
> Key: IGNITE-16678
> URL: https://issues.apache.org/jira/browse/IGNITE-16678
> Project: Ignite
> Issue Type: Bug
> Reporter: Alexander Lapin
> Priority: Major
> Labels: ignite-3
>
> There are three items to fix:
> * Request preparation.
> ** leaderId should contain current leader instead of new one.
> ** peer parameter that is used as new leader is missing
> * invoke sends given request to an inappropriate node: new leader instead of
> current one.
> * exception response doesn't propagate to client.
> In other words instead of
>
> {code:java}
> TransferLeaderRequest req = factory.transferLeaderRequest()
> .groupId(groupId).leaderId(PeerId.fromPeer(newLeader).toString()).build();
> CompletableFuture<NetworkMessage> fut =
> cluster.messagingService().invoke(newLeader.address(), req, rpcTimeout);
> return fut.thenCompose(resp -> {
> if (resp != null) {
> RpcRequests.ErrorResponse resp0 = (RpcRequests.ErrorResponse) resp;
> if (resp0.errorCode() != RaftError.SUCCESS.getNumber())
> CompletableFuture.failedFuture( {code}
> we should use
>
>
> {code:java}
> TransferLeaderRequest req = factory.transferLeaderRequest()
> .groupId(groupId)
> .leaderId(PeerId.fromPeer(leader).toString())
> .peerId(PeerId.fromPeer(newLeader).toString())
> .build();
> CompletableFuture<NetworkMessage> fut =
> cluster.messagingService().invoke(leader.address(), req, rpcTimeout);
> return fut.thenCompose(resp -> {
> if (resp != null) {
> RpcRequests.ErrorResponse resp0 = (RpcRequests.ErrorResponse) resp;
> if (resp0.errorCode() != RaftError.SUCCESS.getNumber())
> return CompletableFuture.failedFuture( {code}
>
--
This message was sent by Atlassian Jira
(v8.20.1#820001)