Skip to content
This repository has been archived by the owner on Jan 30, 2020. It is now read-only.

agent,engine: fix bugs in rescheduling for replaced units #1698

Merged

Commits on Nov 4, 2016

  1. agent,engine: use tri-state job schedule actions

    So far decide() returns a bool variable to determine whether it's
    possible to schedule or not. Reschedule was not handled in a proper way.
    So let's create a new tri-state for job.JobAction, i.e.
    JobActionSchedule, JobActionUnschedule, and JobActionReschedule.
    And return the tri-state variable instead of bool.
    
    That way AbleToRun() can check return values from HasConflict() and
    HasReplace() in a correct manner.
    Dongsu Park committed Nov 4, 2016
    Configuration menu
    Copy the full SHA
    ec664a4 View commit details
    Browse the repository at this point in the history
  2. engine: fix bugs in rescheduling for replaced units

    While the 'Replaces' option has been supported since
    coreos#1572, the engine didn't actually
    unschedule units to be replaced. It was a bug.
    
    So let's implement GetReplacedUnit() to expose the replaced unit from
    AgentState to the engine reconciler. And make the engine reconciler
    unschedule the replaced unit, and schedule the current unit.
    The engine scheduler's decision structure needs to have a helper for
    the rescheduling case, by simply scheduling the replaced unit to a
    free machine.
    Dongsu Park committed Nov 4, 2016
    Configuration menu
    Copy the full SHA
    13ba083 View commit details
    Browse the repository at this point in the history
  3. agent: update unit tests in agent reconciler_test

    Now that the AbleToRun() returns JobAction instead of bool,
    unit tests also need to be changed.
    Dongsu Park committed Nov 4, 2016
    Configuration menu
    Copy the full SHA
    3df0ec2 View commit details
    Browse the repository at this point in the history
  4. functional: make TestScheduleReplace() do correct tests

    For correct tests, TestScheduleReplace() now does the following tests.
    
    * Start 4 units. replace.0 on m0, replace.[12] on m1, and replace-kick0
      on m0. Doing that we could trigger a situation of unit replacement.
    * Ensure that machine of kick0 unit is not the same as that of unit 0,
      also that machine of kick0 is the same as the original machine m0.
    * Make use of WaitForState() to avoid races with unit state publisher.
    Dongsu Park committed Nov 4, 2016
    Configuration menu
    Copy the full SHA
    f382b13 View commit details
    Browse the repository at this point in the history