[
https://issues.apache.org/jira/browse/RATIS-2203?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17905778#comment-17905778
]
Song Ziyang commented on RATIS-2203:
------------------------------------
I spent some time investigating this issue, and it seems the root cause might
be related to the bootstrapping process. I have created a new issue
https://issues.apache.org/jira/browse/RATIS-2208 for further tracking. Will
come back once 2208 is resolved.
> Fixed issue where Ratis member changes are stuck
> ------------------------------------------------
>
> Key: RATIS-2203
> URL: https://issues.apache.org/jira/browse/RATIS-2203
> Project: Ratis
> Issue Type: Improvement
> Reporter: Xinyu Tan
> Assignee: Xinyu Tan
> Priority: Major
>
> Currently, in IoTDB, we use ratisclient to submit membership change requests,
> and rely on the
> [retrypolicy|https://github.com/apache/iotdb/blob/master/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RatisClient.java#L236-L249]
> to ensure that membership change requests with longer durations can
> eventually be successfully completed.
> In a recent test, we discovered that Ratis might get stuck during a
> membership change. After a series of troubleshooting steps, we have mostly
> determined that this is a bug in the Ratis core.
> Now, I will list the logs of the leader and the new replica to see if we can
> analyze the cause of the error together.
> leader
> {code:java}
> 2024-11-29 11:50:49,166 [19-server-thread1] INFO
> o.a.r.s.i.RaftServerImpl:1296 - 19@group-000200000061: receive
> setConfiguration
> SetConfigurationRequest:client-5FD616FE3614->19@group-000200000061, cid=1,
> seq=null, RW, null, SET_UNCONDITIONALLY, servers:[4|172.16.2.3:10750,
> 19|172.16.2.18:10750], listeners:[]
> 2024-11-29 11:50:49,168 [19-server-thread1] INFO
> o.a.r.s.i.LeaderStateImpl:485 - 19@group-000200000061-LeaderStateImpl:
> startSetConfiguration
> SetConfigurationRequest:client-5FD616FE3614->19@group-000200000061, cid=1,
> seq=null, RW, null, SET_UNCONDITIONALLY, servers:[4|172.16.2.3:10750,
> 19|172.16.2.18:10750], listeners:[]
> 2024-11-29 11:50:49,208
> [19@group-000200000061->4-GrpcLogAppender-LogAppenderDaemon] INFO
> o.a.r.s.i.FollowerInfoImpl:154 - Follower 19@group-000200000061->4
> acknowledged installing snapshot
> 2024-11-29 11:50:49,215
> [19@group-000200000061->4-GrpcLogAppender-LogAppenderDaemon] INFO
> o.a.r.g.s.GrpcServerProtocolClient:65 - Build channel for 4|172.16.2.3:10750
> 2024-11-29 11:50:59,412 [timer2] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out appendEntries,
> errorCount=1,
> request=AppendEntriesRequest:cid=1,entriesCount=9198,entries=(t:1,
> i:0)...(t:1, i:9197)
> 2024-11-29 11:50:59,732 [timer3] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out HEARTBEAT appendEntries,
> errorCount=2, request=AppendEntriesRequest:cid=2,entriesCount=0
> 2024-11-29 11:51:00,238 [timer4] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out HEARTBEAT appendEntries,
> errorCount=3, request=AppendEntriesRequest:cid=3,entriesCount=0
> 2024-11-29 11:51:00,740 [timer5] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out HEARTBEAT appendEntries,
> errorCount=4, request=AppendEntriesRequest:cid=4,entriesCount=0
> 2024-11-29 11:51:01,906 [timer6] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out HEARTBEAT appendEntries,
> errorCount=5, request=AppendEntriesRequest:cid=6,entriesCount=0
> 2024-11-29 11:51:02,406 [timer7] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out HEARTBEAT appendEntries,
> errorCount=6, request=AppendEntriesRequest:cid=7,entriesCount=0
> 2024-11-29 11:51:02,908 [timer0] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out HEARTBEAT appendEntries,
> errorCount=7, request=AppendEntriesRequest:cid=8,entriesCount=0
> 2024-11-29 11:51:03,086 [19-server-thread1] INFO
> o.a.r.s.i.RaftServerImpl:1296 - 19@group-000200000061: receive
> setConfiguration
> SetConfigurationRequest:client-5FD616FE3614->19@group-000200000061, cid=1,
> seq=null, RW, null, SET_UNCONDITIONALLY, servers:[4|172.16.2.3:10750,
> 19|172.16.2.18:10750], listeners:[]
> 2024-11-29 11:51:03,410 [timer1] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out HEARTBEAT appendEntries,
> errorCount=8, request=AppendEntriesRequest:cid=9,entriesCount=0
> 2024-11-29 11:51:03,912 [timer2] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out HEARTBEAT appendEntries,
> errorCount=9, request=AppendEntriesRequest:cid=10,entriesCount=0
> 2024-11-29 11:51:04,414 [timer3] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out HEARTBEAT appendEntries,
> errorCount=10, request=AppendEntriesRequest:cid=11,entriesCount=0
> 2024-11-29 11:51:04,914 [timer4] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out HEARTBEAT appendEntries,
> errorCount=11, request=AppendEntriesRequest:cid=12,entriesCount=0
> 2024-11-29 11:51:05,415 [timer5] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out HEARTBEAT appendEntries,
> errorCount=12, request=AppendEntriesRequest:cid=13,entriesCount=0
> 2024-11-29 11:51:05,916 [timer6] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out HEARTBEAT appendEntries,
> errorCount=13, request=AppendEntriesRequest:cid=14,entriesCount=0
> 2024-11-29 11:51:06,418 [timer7] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out HEARTBEAT appendEntries,
> errorCount=14, request=AppendEntriesRequest:cid=15,entriesCount=0
> 2024-11-29 11:51:06,683
> [19@group-000200000061->4-GrpcLogAppender-LogAppenderDaemon] WARN
> o.a.r.g.s.GrpcLogAppender:293 - 19@group-000200000061->4-GrpcLogAppender:
> Wait interrupted by java.lang.InterruptedException
> 2024-11-29 11:51:06,921 [timer0] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out HEARTBEAT appendEntries,
> errorCount=15, request=AppendEntriesRequest:cid=16,entriesCount=0
> 2024-11-29 11:51:07,134 [19-server-thread1] INFO
> o.a.r.s.i.RaftServerImpl:1296 - 19@group-000200000061: receive
> setConfiguration
> SetConfigurationRequest:client-5FD616FE3614->19@group-000200000061, cid=1,
> seq=null, RW, null, SET_UNCONDITIONALLY, servers:[4|172.16.2.3:10750,
> 19|172.16.2.18:10750], listeners:[]
> 2024-11-29 11:51:07,135 [19-server-thread1] INFO
> o.a.r.s.i.LeaderStateImpl:485 - 19@group-000200000061-LeaderStateImpl:
> startSetConfiguration
> SetConfigurationRequest:client-5FD616FE3614->19@group-000200000061, cid=1,
> seq=null, RW, null, SET_UNCONDITIONALLY, servers:[4|172.16.2.3:10750,
> 19|172.16.2.18:10750], listeners:[]
> 2024-11-29 11:51:07,137
> [19@group-000200000061->4-GrpcLogAppender-LogAppenderDaemon] INFO
> o.a.r.s.i.FollowerInfoImpl:154 - Follower 19@group-000200000061->4
> acknowledged installing snapshot
> 2024-11-29 11:51:07,421 [timer1] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out HEARTBEAT appendEntries,
> errorCount=16, request=AppendEntriesRequest:cid=17,entriesCount=0
> 2024-11-29 11:51:07,924 [timer2] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out HEARTBEAT appendEntries,
> errorCount=17, request=AppendEntriesRequest:cid=18,entriesCount=0
> 2024-11-29 11:51:08,426 [timer3] WARN o.a.r.g.s.GrpcLogAppender:441 -
> 19@group-000200000061->4-GrpcLogAppender: Timed out HEARTBEAT appendEntries,
> errorCount=18, request=AppendEntriesRequest:cid=19,entriesCount=0
> 2024-11-29 11:51:08,950 [grpc-default-executor-5] WARN
> o.a.r.g.s.GrpcLogAppender$AppendLogResponseHandler:519 -
> 19@group-000200000061->4-AppendLogResponseHandler: received INCONSISTENCY
> reply with nextIndex 1, errorCount=1,
> request=AppendEntriesRequest:cid=1,entriesCount=9198,entries=(t:1,
> i:0)...(t:1, i:9197)
> 2024-11-29 11:51:08,951 [grpc-default-executor-5] INFO
> o.a.r.s.i.FollowerInfoImpl:70 - 19@group-000200000061->4: setNextIndex
> nextIndex: updateUnconditionally 9198 -> 1
> 2024-11-29 11:51:08,972 [grpc-default-executor-5] INFO
> o.a.r.g.s.GrpcLogAppender$AppendLogResponseHandler:550 -
> 19@group-000200000061->4-AppendLogResponseHandler: follower responses
> appendEntries COMPLETED
> 2024-11-29 11:51:08,975 [grpc-default-executor-5] INFO
> o.a.r.s.i.FollowerInfoImpl:70 - 19@group-000200000061->4: computeNextIndex
> nextIndex: updateUnconditionally 9198 -> 0
> 2024-11-29 11:51:09,015 [grpc-default-executor-5] WARN
> o.a.r.g.s.GrpcLogAppender$AppendLogResponseHandler:519 -
> 19@group-000200000061->4-AppendLogResponseHandler: received INCONSISTENCY
> reply with nextIndex 9198, errorCount=1,
> request=AppendEntriesRequest:cid=6,entriesCount=9197,entries=(t:1,
> i:1)...(t:1, i:9197)
> 2024-11-29 11:51:09,022 [grpc-default-executor-1] INFO
> o.a.r.g.s.GrpcLogAppender$AppendLogResponseHandler:550 -
> 19@group-000200000061->4-AppendLogResponseHandler: follower responses
> appendEntries COMPLETED
> {code}
> new adding follower
> {code:java}
> 2024-11-29 11:50:46,528 [4-groupManagement] INFO
> o.a.r.s.i.RaftServerImpl:405 - 4@group-000200000061: Successfully started.
> 2024-11-29 11:50:46,915 [4-server-thread1] INFO
> o.a.r.s.i.RaftServerImpl:1296 - 4@group-000200000061: receive
> setConfiguration
> SetConfigurationRequest:client-5FD616FE3614->4@group-000200000061, cid=1,
> seq=null, RW, null, SET_UNCONDITIONALLY, servers:[4|172.16.2.3:10750,
> 19|172.16.2.18:10750], listeners:[]
> 2024-11-29 11:50:50,886 [4-server-thread1] INFO o.a.r.s.i.RaftServerImpl:562
> - 4@group-000200000061: set firstElectionSinceStartup to false for
> appendEntries
> 2024-11-29 11:50:50,886 [4-server-thread1] INFO
> o.a.i.d.c.s.s.SchemaRegionStateMachine:75 - Current node [nodeId: 4] is no
> longer the schema region leader [regionId: SchemaRegion[97]], the new leader
> is [nodeId:19]
> 2024-11-29 11:50:50,886 [4-server-thread1] INFO o.a.r.s.impl.ServerState:272
> - 4@group-000200000061: change Leader from null to 19 at term 1 for
> appendEntries, leader elected after 4575ms
> 2024-11-29 11:50:50,887 [4-server-thread2] INFO o.a.r.s.impl.ServerState:386
> - 4@group-000200000061: set configuration conf: {index: 0,
> cur=peers:[19|172.16.2.18:10750]|listeners:[], old=null}
> 2024-11-29 11:50:50,887 [4-server-thread2] INFO
> o.a.r.s.r.s.SegmentedRaftLogWorker:438 -
> 4@group-000200000061-SegmentedRaftLogWorker: Starting segment from index:0
> 2024-11-29 11:50:50,888 [4@group-000200000061-SegmentedRaftLogWorker] INFO
> o.a.r.s.r.s.BufferedWriteChannel:61 - open log_inprogress_0 at position 0
> 2024-11-29 11:50:56,801 [4@group-000200000061-SegmentedRaftLogWorker] INFO
> o.a.r.s.r.s.SegmentedRaftLogWorker$StartLogSegment:645 -
> 4@group-000200000061-SegmentedRaftLogWorker: created new log segment
> /data1/iotdb/tablev2_rc5_1128_1fc99a6_1rep/data/datanode/consensus/schema_region/47474747-4747-4747-4747-000200000061/current/log_inprogress_0
>
> 2024-11-29 11:51:01,063 [4-server-thread21] INFO
> o.a.r.s.i.RaftServerImpl:1296 - 4@group-000200000061: receive
> setConfiguration
> SetConfigurationRequest:client-5FD616FE3614->4@group-000200000061, cid=1,
> seq=null, RW, null, SET_UNCONDITIONALLY, servers:[4|172.16.2.3:10750,
> 19|172.16.2.18:10750], listeners:[]
> 2024-11-29 11:51:05,118 [4-server-thread21] INFO
> o.a.r.s.i.RaftServerImpl:1296 - 4@group-000200000061: receive
> setConfiguration
> SetConfigurationRequest:client-5FD616FE3614->4@group-000200000061, cid=1,
> seq=null, RW, null, SET_UNCONDITIONALLY, servers:[4|172.16.2.3:10750,
> 19|172.16.2.18:10750], listeners:[]
> 2024-11-29 11:51:08,942 [4-server-thread22] INFO
> o.a.r.s.i.RaftServerImpl:1638 - 4@group-000200000061: Failed appendEntries as
> the first entry (index 0) already exists (snapshotIndex: -1, commitIndex: 0)
> 2024-11-29 11:51:08,943 [4-server-thread22] INFO
> o.a.r.s.i.RaftServerImpl:1580 - 4@group-000200000061: appendEntries* reply
> 19<-4#1:FAIL-t1,INCONSISTENCY,nextIndex=1,followerCommit=-1,matchIndex=-1
> 2024-11-29 11:51:09,003 [4-server-thread2] INFO
> o.a.r.s.i.RaftServerImpl:1638 - 4@group-000200000061: Failed appendEntries as
> the first entry (index 1) already exists (snapshotIndex: -1, commitIndex:
> 9197)
> 2024-11-29 11:51:09,004 [4-server-thread2] INFO
> o.a.r.s.i.RaftServerImpl:1580 - 4@group-000200000061: appendEntries* reply
> 19<-4#6:FAIL-t1,INCONSISTENCY,nextIndex=9198,followerCommit=9197,matchIndex=-1
>
> {code}
> From the logs, we can see that the synchronization link from the leader to
> the new follower has been closed, so the logs cannot be committed. This
> causes the membership change thread to be stuck indefinitely while waiting
> for the follower to catch up.
> Based on the logs above, I have a few suspicions:
> - Why is the gRPC stream API on the leader side being completed? I haven't
> seen any place on the follower side where this function is called.
> - The commitIndex obtained in the checkInconsistentAppendEntries function on
> the follower side seems inconsistent with the one obtained in
> appendEntriesAsync. For example, in the following two lines of logs, the same
> thread gets a commitIndex of -1 outside the lock, and an index of 0 inside
> the lock. This causes the subsequent synchronization to be completely stuck.
> I'm not sure if this is a concurrency issue, but perhaps we should move this
> line inside the
> [lock|ttps://github.com/apache/ratis/blob/master/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java#L1591]?
> {code:java}
> 2024-11-29 11:51:08,942 [4-server-thread22] INFO
> o.a.r.s.i.RaftServerImpl:1638 - 4@group-000200000061: Failed appendEntries as
> the first entry (index 0) already exists (snapshotIndex: -1, commitIndex: 0)
> 2024-11-29 11:51:08,943 [4-server-thread22] INFO
> o.a.r.s.i.RaftServerImpl:1580 - 4@group-000200000061: appendEntries* reply
> 19<-4#1:FAIL-t1,INCONSISTENCY,nextIndex=1,followerCommit=-1,matchIndex=-1
> {code}
> What's your opinion? [~szetszwo]
--
This message was sent by Atlassian Jira
(v8.20.10#820010)