Uploaded image for project: 'Kafka'
  1. Kafka
  2. KAFKA-5027 Kafka Controller Redesign
  3. KAFKA-5258

move all partition and replica state transition rules into their states

    XMLWordPrintableJSON

Details

    • Sub-task
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • None
    • 0.11.0.0
    • 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

          Activity

            People

              onurkaraman Onur Karaman
              onurkaraman Onur Karaman
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: