Ao Li created RATIS-2485:
----------------------------
Summary: IllegalStateException thrown from
LeaderStateImpl.updateCommit
Key: RATIS-2485
URL: https://issues.apache.org/jira/browse/RATIS-2485
Project: Ratis
Issue Type: Bug
Reporter: Ao Li
I saw the following exception:
{code:java}
│Thread:
Thread[#3973,n1@group-ABB3109A44C1-LeaderStateImpl,5,n1@group-ABB3109A44C1]
│
│java.lang.IllegalStateException: n1@group-ABB3109A44C1-SegmentedRaftLog is
expected to be opened but it is CLOSED
│
│ at org.apache.ratis.util.OpenCloseState.assertOpen(OpenCloseState.java:63)
│
│ at
org.apache.ratis.server.raftlog.RaftLogBase.checkLogState(RaftLogBase.java:112)
│
│ at
org.apache.ratis.server.raftlog.RaftLogBase.appendMetadataImpl(RaftLogBase.java:220)
│
│ at
org.apache.ratis.server.raftlog.RaftLogBase.lambda$appendMetadata$4(RaftLogBase.java:216)
│
│ at
org.apache.ratis.server.raftlog.RaftLogSequentialOps$Runner.runSequentially(RaftLogSequentialOps.java:69)
│
│ at
org.apache.ratis.server.raftlog.RaftLogBase.appendMetadata(RaftLogBase.java:216)
│
│ at
org.apache.ratis.server.impl.LeaderStateImpl.logMetadata(LeaderStateImpl.java:982)
│
│ at
org.apache.ratis.server.impl.LeaderStateImpl.updateCommit(LeaderStateImpl.java:960)
│
│ at
org.apache.ratis.server.impl.LeaderStateImpl.updateCommit(LeaderStateImpl.java:975)
│
│ at
org.apache.ratis.server.impl.LeaderStateImpl.lambda$updateCommit$18(LeaderStateImpl.java:902)
│
│ at java.base/java.util.Optional.ifPresent(Optional.java:178)
│
│ at
org.apache.ratis.server.impl.LeaderStateImpl.updateCommit(LeaderStateImpl.java:902)
│
│ at
org.apache.ratis.server.impl.LeaderStateImpl$StateUpdateEvent.execute(LeaderStateImpl.java:123)
│
│ at
org.apache.ratis.server.impl.LeaderStateImpl$EventProcessor.run(LeaderStateImpl.java:767)
│
│Caused by: org.apache.ratis.util.OpenCloseState$CloseTrace: Close
n1@group-ABB3109A44C1-SegmentedRaftLog
│
│ at
org.apache.ratis.util.OpenCloseState.lambda$close$1(OpenCloseState.java:109)
│
│ at
java.base/java.util.concurrent.atomic.AtomicReference.getAndUpdate(AtomicReference.java:184)
│
│ at org.apache.ratis.util.OpenCloseState.close(OpenCloseState.java:109)
│
│ at org.apache.ratis.server.raftlog.RaftLogBase.close(RaftLogBase.java:380)
│
│ at
org.apache.ratis.server.raftlog.segmented.SegmentedRaftLog.close(SegmentedRaftLog.java:528)
│
│ at org.apache.ratis.server.impl.ServerState.close(ServerState.java:434)
│
│ at
org.apache.ratis.server.impl.RaftServerImpl.lambda$close$1(RaftServerImpl.java:535)
│
│ at
org.apache.ratis.util.LifeCycle.lambda$checkStateAndClose$7(LifeCycle.java:306)
│
│ at org.apache.ratis.util.LifeCycle.checkStateAndClose(LifeCycle.java:326)
│
│ at org.apache.ratis.util.LifeCycle.checkStateAndClose(LifeCycle.java:304)
│
│ at
org.apache.ratis.server.impl.RaftServerImpl.close(RaftServerImpl.java:512)
│
│ at
org.apache.ratis.server.impl.RaftServerProxy$ImplMap.close(RaftServerProxy.java:136)
│
│ at
org.apache.ratis.server.impl.RaftServerProxy$ImplMap.lambda$close$0(RaftServerProxy.java:123)
│
│ at org.apache.ratis.util.ConcurrentUtils.accept(ConcurrentUtils.java:203)
│
│ at
org.apache.ratis.util.ConcurrentUtils.lambda$null$4(ConcurrentUtils.java:182)
│
│ at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)
│
│ at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614)
│
│ at java.base/java.lang.Thread.run(Thread.java:1474)
{code}
with the following scenario:
Thread 1:
Leader shutdown -> SegmentedRaftLog.close()
Thread 2:
LeaderStateImpl$EventProcessor.run() -> StateUpdateEvent.execute() ->
updateCommit() -> logMetadata() -> RaftLogBase.appendMetadata()
I did some searching before creating this issue, but I didn’t find any mention
that the exception can be thrown in the updateCommit() method.
Sorry in advance if this is a dup or expected behavior.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
