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

Ivan Artiukhov commented on IGNITE-23642:
-----------------------------------------

I cannot reproduce the issue on the latest nightly build. I suggest to close 
this ticket.

> Unable to start a node due to too many assignments recovered
> ------------------------------------------------------------
>
>                 Key: IGNITE-23642
>                 URL: https://issues.apache.org/jira/browse/IGNITE-23642
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Roman Puchkovskiy
>            Assignee:  Kirill Sizov
>            Priority: Major
>              Labels: ignite-3
>
> There is a cluster with 3 nodes and 1200 partitions in total (400 per node). 
> When the cluster is restarted, each node recovers the Metastorage 
> successfully, its leader is elected, then partitions recovery is started. 
> This results in a lot of exceptions like the following in logs:
>  
> {code:java}
> 2024-11-08 13:23:28:845 +0000 [INFO][%node1%tableManager-io-15][NodeImpl] 
> Node <48_part_3/node1> start vote and grant vote self, term=1.
> 2024-11-08 13:23:28:846 +0000 
> [ERROR][%node1%Raft-Group-Client-14][RebalanceUtil] Exception on updating 
> assignments for [tableId=38, name=INVENTORY, partition=23]
> java.util.concurrent.CompletionException: 
> java.util.concurrent.TimeoutException: Send with retry timed out [retryCount 
> = 7, groupId = metastorage_group, traceId = 
> 5f329100-3de7-4ab8-a796-9969b7b91b22].
>         at 
> java.base/java.util.concurrent.CompletableFuture.encodeThrowable(Unknown 
> Source)
>         at 
> java.base/java.util.concurrent.CompletableFuture.completeThrowable(Unknown 
> Source)
>         at 
> java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown 
> Source)
>         at 
> java.base/java.util.concurrent.CompletableFuture.postComplete(Unknown Source)
>         at 
> java.base/java.util.concurrent.CompletableFuture.completeExceptionally(Unknown
>  Source)
>         at 
> org.apache.ignite.internal.raft.RaftGroupServiceImpl.sendWithRetry(RaftGroupServiceImpl.java:559)
>         at 
> org.apache.ignite.internal.raft.RaftGroupServiceImpl.lambda$scheduleRetry$40(RaftGroupServiceImpl.java:750)
>         at 
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
>         at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
>         at 
> java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown
>  Source)
>         at 
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
>         at 
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
>         at java.base/java.lang.Thread.run(Unknown Source){code}
>  
> Also, there is another stack trace:
>  
> {code:java}
> 2024-11-08 13:27:03:523 +0000 
> [WARNING][%node1%rebalance-scheduler-11][RebalanceRaftGroupEventsListener] 
> Unable to start rebalance [tablePartitionId, term=44_part_45] 
> java.util.concurrent.ExecutionException: 
> java.util.concurrent.TimeoutException: Send with retry timed out [retryCount 
> = 7, groupId = metastorage_group, traceId = 
> d52b447e-3c40-4f4b-9c67-863be811b0cb]. 
> at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source) 
> at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source) at 
> org.apache.ignite.internal.distributionzones.rebalance.RebalanceRaftGroupEventsListener.lambda$onLeaderElected$0(RebalanceRaftGroupEventsListener.java:167)
>  
> at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown 
> Source) 
> at java.base/java.util.concurrent.FutureTask.run(Unknown Source) 
> at 
> java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown
>  Source) 
> at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown 
> Source) 
> at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown 
> Source) 
> at java.base/java.lang.Thread.run(Unknown Source) 
> Caused by: java.util.concurrent.TimeoutException: Send with retry timed out 
> [retryCount = 7, groupId = metastorage_group, traceId = 
> d52b447e-3c40-4f4b-9c67-863be811b0cb]. at 
> org.apache.ignite.internal.raft.RaftGroupServiceImpl.sendWithRetry(RaftGroupServiceImpl.java:559)
>  
> at 
> org.apache.ignite.internal.raft.RaftGroupServiceImpl.lambda$scheduleRetry$40(RaftGroupServiceImpl.java:750)
>  ... 6 more{code}
>  
> It seems that an avalanche of Metastorage accesses by hundreds of starting 
> partitions overloads the Metastorage leader, so recovery fails with 
> TimeoutExceptions.
> We could probably solve this by establishing some kind of rate limiting on 
> Metastorage accesses. We could implement this just for the recovery procedure 
> or for normal operation as well.
> High-priority accesses (Metastorage SafeTime propagation, Lease updates) 
> should not be subject to rate limiting.



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

Reply via email to