[ 
https://issues.apache.org/jira/browse/HDDS-16029?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ivan Andika updated HDDS-16029:
-------------------------------
    Description: 
An incident is triggered when SCM is stuck when leader transfer is triggered 
while ContainerBalancer is running.
{code:java}
changeToFollower
    -> role.shutdownLeaderState(false); 
      -> stateMachine.leaderEvent().notifyNotLeader(...)
          ->  ContainerBalancer.stop()   < -- blocked here

    -> state.setLeader(null);     
    -> state.updateCurrentTerm(newTerm);        
    -> role.startFollowerState(...); {code}
ContainerBalancer is blocking due to the Thread.join call and will block 
StateMachineUpdater.

The rule of thumb is notification API should NOT be blocking.

!image-2026-07-30-16-42-14-712.png!

  was:
An incident is triggered when SCM is stuck when leader transfer is triggered 
while ContainerBalancer is running.
{code:java}
changeToFollower
    -> role.shutdownLeaderState(false); 
      -> stateMachine.leaderEvent().notifyNotLeader(...)
          ->  ContainerBalancer.stop()   < -- blocked here

    -> state.setLeader(null);     
    -> state.updateCurrentTerm(newTerm);        
    -> role.startFollowerState(...); {code}
ContainerBalancer is blocking due to the Thread.join call and will block 
StateMachineUpdater.

The rule of thumb is notification API should NOT be blocking.


> ContainerBalancer can cause SCM to be stuck
> -------------------------------------------
>
>                 Key: HDDS-16029
>                 URL: https://issues.apache.org/jira/browse/HDDS-16029
>             Project: Apache Ozone
>          Issue Type: Bug
>            Reporter: Ivan Andika
>            Assignee: ChenXi
>            Priority: Major
>         Attachments: image-2026-07-30-16-42-14-712.png
>
>
> An incident is triggered when SCM is stuck when leader transfer is triggered 
> while ContainerBalancer is running.
> {code:java}
> changeToFollower
>     -> role.shutdownLeaderState(false); 
>       -> stateMachine.leaderEvent().notifyNotLeader(...)
>           ->  ContainerBalancer.stop()   < -- blocked here
>     -> state.setLeader(null);     
>     -> state.updateCurrentTerm(newTerm);        
>     -> role.startFollowerState(...); {code}
> ContainerBalancer is blocking due to the Thread.join call and will block 
> StateMachineUpdater.
> The rule of thumb is notification API should NOT be blocking.
> !image-2026-07-30-16-42-14-712.png!



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to