[
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)