Hi,

I am going to add the support of  error->drop transition in Helix. The basic 
idea is to remove DROPPED state from state model; instead we add a drop() (or 
cleanup()) abstract method in StateModel. Applications need to implement this 
abstract method to take care of the drop logic. This requires no change on the 
controller side. On the participant side, when the participant receives a 
state-transition message with ToState=DROPPED, it will invoke the drop() method 
in the state model. When the drop() gets executed, the partition will be 
removed from the current state regardless of any errors/exceptions during the 
execution of drop(). This will prevent the infinite loop of calling drop() in 
case of error/exception in the execution of drop(). The advantage of this 
design is that we can remove DROPPED state totally from all state model 
definitions, which keeps the state model simple. The disadvantage is, in drop() 
the application need to take different drop logics based on the current state 
(e.g. MASTER, SLAVE, or ERROR, which will be the FromState in the message). Any 
suggestions?

Thanks,
Jason

Reply via email to