Details
-
Sub-task
-
Status: Resolved
-
Minor
-
Resolution: Fixed
-
None
-
None
-
None
Description
Today the PartitionStateMachine and ReplicaStateMachine defines and asserts the valid state transitions inline for each state, looking something like:
private def handleStateChange(...) { targetState match { case stateA => { assertValidPreviousStates(topicAndPartition, List(stateX, stateY, stateZ), stateA) // actual work } case stateB => { assertValidPreviousStates(topicAndPartition, List(stateD, stateE), stateB) // actual work } } }
It would be cleaner to move all partition and replica state transition rules into their states and simply do the assertion at the top of the handleStateChange method like so:
private def handleStateChange(...) { assertValidTransition(targetState) targetState match { case stateA => { // actual work } case stateB => { // actual work } } } sealed trait State { def state: Byte def validPreviousStates: Set[State] } case object StateA extends State { val state: Byte = 1 val validPreviousStates: Set[State] = Set(StateX) } case object StateB extends State { val state: Byte = 2 val validPreviousStates: Set[State] = Set(StateX, StateY, StateZ) }
Attachments
Issue Links
- links to