Repository: aurora Updated Branches: refs/heads/master 71bb41c9a -> 38476abdf
Do not reserve agents for updates when constraints change. Reviewed at https://reviews.apache.org/r/63261/ Project: http://git-wip-us.apache.org/repos/asf/aurora/repo Commit: http://git-wip-us.apache.org/repos/asf/aurora/commit/38476abd Tree: http://git-wip-us.apache.org/repos/asf/aurora/tree/38476abd Diff: http://git-wip-us.apache.org/repos/asf/aurora/diff/38476abd Branch: refs/heads/master Commit: 38476abdf1eac5f70ca9ab8a1a871dd34692d24a Parents: 71bb41c Author: David McLaughlin <[email protected]> Authored: Tue Oct 24 15:33:41 2017 -0700 Committer: David McLaughlin <[email protected]> Committed: Tue Oct 24 15:33:41 2017 -0700 ---------------------------------------------------------------------- .../scheduler/updater/InstanceUpdater.java | 7 ++++++- .../scheduler/updater/InstanceUpdaterTest.java | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aurora/blob/38476abd/src/main/java/org/apache/aurora/scheduler/updater/InstanceUpdater.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/updater/InstanceUpdater.java b/src/main/java/org/apache/aurora/scheduler/updater/InstanceUpdater.java index 282ead4..0aa4f36 100644 --- a/src/main/java/org/apache/aurora/scheduler/updater/InstanceUpdater.java +++ b/src/main/java/org/apache/aurora/scheduler/updater/InstanceUpdater.java @@ -123,6 +123,10 @@ class InstanceUpdater implements StateEvaluator<Optional<IScheduledTask>> { .greaterThanOrEqualTo(bagFromResources(desired.getResources())); } + private boolean constraintsMatch(ITaskConfig desired, ITaskConfig existing) { + return desired.getConstraints().equals(existing.getConstraints()); + } + private StateEvaluator.Result handleActualAndDesiredPresent(IScheduledTask actualState) { Preconditions.checkState(desiredState.isPresent()); Preconditions.checkArgument(!actualState.getTaskEvents().isEmpty()); @@ -151,7 +155,8 @@ class InstanceUpdater implements StateEvaluator<Optional<IScheduledTask>> { // This is not the configuration that we would like to run. if (isKillable(status)) { // Task is active, kill it. - if (resourceFits(desiredState.get(), actualState.getAssignedTask().getTask())) { + if (resourceFits(desiredState.get(), actualState.getAssignedTask().getTask()) + && constraintsMatch(desiredState.get(), actualState.getAssignedTask().getTask())) { // If the desired task fits into the existing offer, we reserve the offer. return KILL_TASK_WITH_RESERVATION_AND_EVALUATE_ON_STATE_CHANGE; } else { http://git-wip-us.apache.org/repos/asf/aurora/blob/38476abd/src/test/java/org/apache/aurora/scheduler/updater/InstanceUpdaterTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/updater/InstanceUpdaterTest.java b/src/test/java/org/apache/aurora/scheduler/updater/InstanceUpdaterTest.java index 8832308..30f3e4f 100644 --- a/src/test/java/org/apache/aurora/scheduler/updater/InstanceUpdaterTest.java +++ b/src/test/java/org/apache/aurora/scheduler/updater/InstanceUpdaterTest.java @@ -25,10 +25,13 @@ import org.apache.aurora.common.quantity.Amount; import org.apache.aurora.common.quantity.Time; import org.apache.aurora.common.util.testing.FakeClock; import org.apache.aurora.gen.AssignedTask; +import org.apache.aurora.gen.Constraint; import org.apache.aurora.gen.ScheduleStatus; import org.apache.aurora.gen.ScheduledTask; import org.apache.aurora.gen.TaskConfig; +import org.apache.aurora.gen.TaskConstraint; import org.apache.aurora.gen.TaskEvent; +import org.apache.aurora.gen.ValueConstraint; import org.apache.aurora.scheduler.base.Tasks; import org.apache.aurora.scheduler.storage.entities.IScheduledTask; import org.apache.aurora.scheduler.storage.entities.ITaskConfig; @@ -61,6 +64,9 @@ public class InstanceUpdaterTest { .setResources(ImmutableSet.of(numCpus(1.0)))); private static final ITaskConfig NEW_EXTRA_RESOURCES = ITaskConfig.build(new TaskConfig() .setResources(ImmutableSet.of(numCpus(2.0)))); + private static final ITaskConfig NEW_DIFFERENT_CONSTRAINTS = ITaskConfig.build(new TaskConfig() + .setConstraints(ImmutableSet.of(new Constraint("different", + TaskConstraint.value(new ValueConstraint(false, ImmutableSet.of("test"))))))); private static final Amount<Long, Time> MIN_RUNNING_TIME = Amount.of(1L, Time.MINUTES); private static final Amount<Long, Time> A_LONG_TIME = Amount.of(1L, Time.DAYS); @@ -150,6 +156,20 @@ public class InstanceUpdaterTest { } @Test + public void testUpdateWithConstraintChange() { + TestFixture f = new TestFixture(NEW_DIFFERENT_CONSTRAINTS, 1); + f.setActualState(OLD); + f.evaluate(KILL_TASK_AND_EVALUATE_ON_STATE_CHANGE, RUNNING); + f.evaluate(EVALUATE_ON_STATE_CHANGE, KILLING); + f.evaluate(REPLACE_TASK_AND_EVALUATE_ON_STATE_CHANGE, FINISHED); + f.setActualState(NEW_DIFFERENT_CONSTRAINTS); + f.evaluate(EVALUATE_ON_STATE_CHANGE, PENDING, ASSIGNED, STARTING); + f.evaluate(EVALUATE_AFTER_MIN_RUNNING_MS, RUNNING); + f.advanceTime(MIN_RUNNING_TIME); + f.evaluateCurrentState(SUCCEEDED); + } + + @Test public void testUpdateRetryOnTaskExit() { TestFixture f = new TestFixture(NEW, 1); f.setActualState(OLD);
