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

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

We should also change compareAndTransition similarly.
{code:java}
@@ -226,11 +228,14 @@ public class LifeCycle {
    * @return true iff the current state is equal to the specified from state.
    */
   public boolean compareAndTransition(final State from, final State to) {
-    if (current.compareAndSet(from, to)) {
+    final State previous = current.getAndUpdate(state -> {
+      if (state != from) {
+        return state;
+      }
       State.validate(name, from, to);
-      return true;
-    }
-    return false;
+      return to;
+    });
+    return previous == from;
   }
{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)

Reply via email to