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

Vladislav Pyatkov updated IGNITE-19136:
---------------------------------------
    Description: 
*Motivation*
There are several reasons by the replica can respond _ReplicaNotReadyException_ 
(storage recovery has not completed yet, indexes have not created). In this 
case, required sending AwaitReplicaRequest and don't try requesting any more 
until AwaitReplicaResponse doesn't be received.

But the reason is not obvious when we receive a timeout on waiting for the 
replica readiness. The result is an exception, which is easy to confuse with 
that we don't try handling _ReplicaNotReadyException_:
{noformat}
Replica is not ready 
[replicationGroupId=474283c9-a39e-431a-895f-751003052d7a_part_10, 
nodeName=irott_n_1]
  at 
app//org.apache.ignite.internal.replicator.ReplicaManager.sendReplicaUnavailableErrorResponse(ReplicaManager.java:385)
  at 
app//org.apache.ignite.internal.replicator.ReplicaManager.onReplicaMessageReceived(ReplicaManager.java:167)
  at 
app//org.apache.ignite.network.DefaultMessagingService.onMessage(DefaultMessagingService.java:358)
  at 
app//org.apache.ignite.network.DefaultMessagingService.lambda$onMessage$3(DefaultMessagingService.java:314)
  at 
[email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
  at 
[email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
  at [email protected]/java.lang.Thread.run(Thread.java:834)
{noformat}

*Definition of Done*
A massage that describe the situation where we cannot wait of replica for 
timeout.
{noformat}
Could not wait of the replica become ready for the timeout 
[replicationGroupId=474283c9-a39e-431a-895f-751003052d7a_part_10, 
nodeName=irott_n_1, timeout=3000]
{noformat}


  was:
*Motivation*
There are several reasons by the replica can respond _ReplicaNotReadyException_ 
(storage recovery has not completed yet, indexes have not created). In this 
case, required sending AwaitReplicaRequest and don't try requesting any more 
until AwaitReplicaResponse doesn't be received.

But the reason is not obvious when we receive a timeout on waiting for the 
replica readiness. The result is an unhandled exception:
{noformat}
Replica is not ready 
[replicationGroupId=474283c9-a39e-431a-895f-751003052d7a_part_10, 
nodeName=irott_n_1]
  at 
app//org.apache.ignite.internal.replicator.ReplicaManager.sendReplicaUnavailableErrorResponse(ReplicaManager.java:385)
  at 
app//org.apache.ignite.internal.replicator.ReplicaManager.onReplicaMessageReceived(ReplicaManager.java:167)
  at 
app//org.apache.ignite.network.DefaultMessagingService.onMessage(DefaultMessagingService.java:358)
  at 
app//org.apache.ignite.network.DefaultMessagingService.lambda$onMessage$3(DefaultMessagingService.java:314)
  at 
[email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
  at 
[email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
  at [email protected]/java.lang.Thread.run(Thread.java:834)
{noformat}

*Workaround*
Currently, when we use RW transaction before to use RO transaction, the issue 
won't be reproduced. Because RW transaction is waiting for the replica becomes 
ready.

*Definition of Done*
All types of request (RW, RO) should handle _ReplicaNotReadyException_ and wait 
for the replica will be ready to handle them.


> Handling timeout on waiting for replica readiness
> -------------------------------------------------
>
>                 Key: IGNITE-19136
>                 URL: https://issues.apache.org/jira/browse/IGNITE-19136
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Vladislav Pyatkov
>            Priority: Major
>              Labels: ignite-3
>
> *Motivation*
> There are several reasons by the replica can respond 
> _ReplicaNotReadyException_ (storage recovery has not completed yet, indexes 
> have not created). In this case, required sending AwaitReplicaRequest and 
> don't try requesting any more until AwaitReplicaResponse doesn't be received.
> But the reason is not obvious when we receive a timeout on waiting for the 
> replica readiness. The result is an exception, which is easy to confuse with 
> that we don't try handling _ReplicaNotReadyException_:
> {noformat}
> Replica is not ready 
> [replicationGroupId=474283c9-a39e-431a-895f-751003052d7a_part_10, 
> nodeName=irott_n_1]
>   at 
> app//org.apache.ignite.internal.replicator.ReplicaManager.sendReplicaUnavailableErrorResponse(ReplicaManager.java:385)
>   at 
> app//org.apache.ignite.internal.replicator.ReplicaManager.onReplicaMessageReceived(ReplicaManager.java:167)
>   at 
> app//org.apache.ignite.network.DefaultMessagingService.onMessage(DefaultMessagingService.java:358)
>   at 
> app//org.apache.ignite.network.DefaultMessagingService.lambda$onMessage$3(DefaultMessagingService.java:314)
>   at 
> [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
>   at 
> [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
>   at [email protected]/java.lang.Thread.run(Thread.java:834)
> {noformat}
> *Definition of Done*
> A massage that describe the situation where we cannot wait of replica for 
> timeout.
> {noformat}
> Could not wait of the replica become ready for the timeout 
> [replicationGroupId=474283c9-a39e-431a-895f-751003052d7a_part_10, 
> nodeName=irott_n_1, timeout=3000]
> {noformat}



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

Reply via email to