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

Attila Doroszlai commented on RATIS-1942:
-----------------------------------------

On second look {{transitionIfValid}} is not good for this, since the caller 
needs to get an exception.

We could prevent the {{EXCEPTION -> STARTING}} transition from being applied 
(and thus the {{STARTING -> STARTING}} transitions) by this change:

{code}
diff --git ratis-common/src/main/java/org/apache/ratis/util/LifeCycle.java 
ratis-common/src/main/java/org/apache/ratis/util/LifeCycle.java
index d543d588..bba8e61c 100644
--- ratis-common/src/main/java/org/apache/ratis/util/LifeCycle.java
+++ ratis-common/src/main/java/org/apache/ratis/util/LifeCycle.java
@@ -265,7 +265,7 @@ public class LifeCycle {
   public final <T extends Throwable> void startAndTransition(
       CheckedRunnable<T> startImpl, Class<? extends Throwable>... 
exceptionClasses)
       throws T {
-    transition(State.STARTING);
+    transition(any -> State.STARTING);
     try {
       startImpl.run();
       transition(State.RUNNING);
{code}

because {{transition(UnaryOperator)}} first validates and only then updates the 
state.  So after the first exception, it would stay in EXCEPTION state.

> 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