[
https://issues.apache.org/jira/browse/RATIS-1942?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17796464#comment-17796464
]
Tsz-wo Sze commented on RATIS-1942:
-----------------------------------
{code}
public void transition(final State to) {
final State from = current.getAndSet(to);
State.validate(name, from, to);
}
{code}
[~adoroszlai], I see the problem now -- the transition method above changes the
state even if validate fails later on. Let's use updateAndGet then?
{code}
@@ -160,8 +160,10 @@ public class LifeCycle {
/** Transition from the current state to the given state. */
public void transition(final State to) {
- final State from = current.getAndSet(to);
- State.validate(name, from, to);
+ current.updateAndGet(from -> {
+ State.validate(name, from, to);
+ return to;
+ });
}
{code}
> GrpcLogAppender has ILLEGAL TRANSITION: STARTING -> STARTING
> ------------------------------------------------------------
>
> Key: RATIS-1942
> URL: https://issues.apache.org/jira/browse/RATIS-1942
> Project: Ratis
> Issue Type: Bug
> Components: gRPC, test
> Reporter: Tsz-wo Sze
> Assignee: Attila Doroszlai
> Priority: Major
> Time Spent: 10m
> Remaining Estimate: 0h
>
> TestRetryCacheWithGrpc has the following exception (although the test may
> pass):
> {code}
> 2023-11-27 11:19:57,509
> [s3@group-F810F08D0B98->s4-GrpcLogAppender-LogAppenderDaemon] WARN
> leader.LogAppenderDaemon (LogAppenderDaemon.java:run(89)) -
> s3@group-F810F08D0B98->s4-GrpcLogAppender-LogAppenderDaemon failed
> java.lang.IllegalStateException: ILLEGAL TRANSITION: In s4, STARTING ->
> STARTING
> at org.apache.ratis.util.Preconditions.assertTrue(Preconditions.java:61)
> at org.apache.ratis.util.LifeCycle$State.validate(LifeCycle.java:121)
> at org.apache.ratis.util.LifeCycle.transition(LifeCycle.java:164)
> at
> org.apache.ratis.util.LifeCycle.startAndTransition(LifeCycle.java:268)
> at
> org.apache.ratis.util.PeerProxyMap$PeerAndProxy.getProxy(PeerProxyMap.java:63)
> at org.apache.ratis.util.PeerProxyMap.getProxy(PeerProxyMap.java:110)
> at
> org.apache.ratis.grpc.server.GrpcLogAppender.getClient(GrpcLogAppender.java:121)
> at
> org.apache.ratis.grpc.server.GrpcLogAppender.appendLog(GrpcLogAppender.java:313)
> at
> org.apache.ratis.grpc.server.GrpcLogAppender.run(GrpcLogAppender.java:181)
> at
> org.apache.ratis.server.leader.LogAppenderDaemon.run(LogAppenderDaemon.java:80)
> at java.lang.Thread.run(Thread.java:750)
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)