diff --git a/mantis-server/mantis-server-worker/src/main/java/io/mantisrx/server/worker/jobmaster/JobAutoScaler.java b/mantis-server/mantis-server-worker/src/main/java/io/mantisrx/server/worker/jobmaster/JobAutoScaler.java index 073cc053c..6eb201370 100644 --- a/mantis-server/mantis-server-worker/src/main/java/io/mantisrx/server/worker/jobmaster/JobAutoScaler.java +++ b/mantis-server/mantis-server-worker/src/main/java/io/mantisrx/server/worker/jobmaster/JobAutoScaler.java @@ -149,14 +149,32 @@ void start() { clutchCustomConfiguration.isPresent())) { ClutchConfiguration config = null; - int minSize = stageSchedulingInfo.getScalingPolicy().getMin(); - int maxSize = stageSchedulingInfo.getScalingPolicy().getMax(); + int minSize = 0; + int maxSize = 0; boolean useJsonConfigBased = false; boolean useClutch = false; boolean useClutchRps = false; boolean useClutchExperimental = false; // Determine which type of scaler to use. + if (stageSchedulingInfo.getScalingPolicy() != null) { + minSize = stageSchedulingInfo.getScalingPolicy().getMin(); + maxSize = stageSchedulingInfo.getScalingPolicy().getMax(); + if (stageSchedulingInfo.getScalingPolicy().getStrategies() != null) { + Set<StageScalingPolicy.ScalingReason> reasons = stageSchedulingInfo.getScalingPolicy().getStrategies() + .values() + .stream() + .map(StageScalingPolicy.Strategy::getReason) + .collect(Collectors.toSet()); + if (reasons.contains(StageScalingPolicy.ScalingReason.Clutch)) { + useClutch = true; + } else if (reasons.contains(StageScalingPolicy.ScalingReason.ClutchExperimental)) { + useClutchExperimental = true; + } else if (reasons.contains(StageScalingPolicy.ScalingReason.ClutchRps)) { + useClutchRps = true; + } + } + } if (clutchCustomConfiguration.isPresent()) { try { config = getClutchConfiguration(clutchCustomConfiguration.get()).get(stage); @@ -179,21 +197,6 @@ void start() { } } } - if (stageSchedulingInfo.getScalingPolicy() != null && - stageSchedulingInfo.getScalingPolicy().getStrategies() != null) { - Set<StageScalingPolicy.ScalingReason> reasons = stageSchedulingInfo.getScalingPolicy().getStrategies() - .values() - .stream() - .map(StageScalingPolicy.Strategy::getReason) - .collect(Collectors.toSet()); - if (reasons.contains(StageScalingPolicy.ScalingReason.Clutch)) { - useClutch = true; - } else if (reasons.contains(StageScalingPolicy.ScalingReason.ClutchExperimental)) { - useClutchExperimental = true; - } else if (reasons.contains(StageScalingPolicy.ScalingReason.ClutchRps)) { - useClutchRps = true; - } - } int initialSize = stageSchedulingInfo.getNumberOfInstances(); StageScaler scaler = new StageScaler(stage, stageSchedulingInfo); diff --git a/mantis-server/mantis-server-worker/src/main/java/io/mantisrx/server/worker/jobmaster/clutch/rps/RpsClutchConfigurationSelector.java b/mantis-server/mantis-server-worker/src/main/java/io/mantisrx/server/worker/jobmaster/clutch/rps/RpsClutchConfigurationSelector.java index 1daa95230..a22e7eb8a 100644 --- a/mantis-server/mantis-server-worker/src/main/java/io/mantisrx/server/worker/jobmaster/clutch/rps/RpsClutchConfigurationSelector.java +++ b/mantis-server/mantis-server-worker/src/main/java/io/mantisrx/server/worker/jobmaster/clutch/rps/RpsClutchConfigurationSelector.java @@ -42,6 +42,7 @@ public RpsClutchConfigurationSelector(Integer stageNumber, StageSchedulingInfo s @Override public ClutchConfiguration apply(Map<Clutch.Metric, UpdateDoublesSketch> sketches) { double setPoint = getSetpoint(sketches); + Tuple2<Double, Double> rope = getRope().map(x -> x * setPoint, y -> y * setPoint); // Gain - number of ticks within the cooldown period. This is the minimum number of times PID output will accumulate // before an action is taken. @@ -60,7 +61,7 @@ public ClutchConfiguration apply(Map<Clutch.Metric, UpdateDoublesSketch> sketche .integralDecay(INTEGRAL_DECAY) .minSize(getMinSize()) .maxSize(getMaxSize()) - .rope(getRope()) + .rope(rope) .cooldownInterval(getCooldownSecs()) .cooldownUnits(TimeUnit.SECONDS) .build(); diff --git a/mantis-server/mantis-server-worker/src/test/java/io/mantisrx/server/worker/jobmaster/clutch/rps/RpsClutchConfigurationSelectorTest.java b/mantis-server/mantis-server-worker/src/test/java/io/mantisrx/server/worker/jobmaster/clutch/rps/RpsClutchConfigurationSelectorTest.java index 99fae422e..2af74238b 100644 --- a/mantis-server/mantis-server-worker/src/test/java/io/mantisrx/server/worker/jobmaster/clutch/rps/RpsClutchConfigurationSelectorTest.java +++ b/mantis-server/mantis-server-worker/src/test/java/io/mantisrx/server/worker/jobmaster/clutch/rps/RpsClutchConfigurationSelectorTest.java @@ -55,7 +55,7 @@ public void testApply() { assertEquals(100.0, config.getSetPoint(), 1e-10); assertEquals(1, config.getMinSize()); assertEquals(10, config.getMaxSize()); - assertEquals(Tuple.of(0.2, 0.1), config.getRope()); + assertEquals(Tuple.of(20.0, 10.0), config.getRope()); assertEquals(300L, config.getCooldownInterval()); } @@ -76,7 +76,7 @@ public void testScalingPolicyFallback() { assertEquals(100.0, config.getSetPoint(), 1e-10); assertEquals(2, config.getMinSize()); assertEquals(9, config.getMaxSize()); - assertEquals(Tuple.of(0.3, 0.0), config.getRope()); + assertEquals(Tuple.of(30.0, 0.0), config.getRope()); assertEquals(400L, config.getCooldownInterval()); }