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

Tsz-wo Sze commented on RATIS-2485:
-----------------------------------

[~aoli-al], Thanks for reporting this issue!

This is okay since it happens after RaftServerImpl.close.  By design, we allow 
RaftServerImpl.close at any time.

One thing we could improve is to log the message in a better way.

> 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
>            Priority: Major
>
> I saw the following exception:
> {code:java}
> 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)

Reply via email to