This is an automated email from the ASF dual-hosted git repository.

gyfora pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/flink-kubernetes-operator.git


The following commit(s) were added to refs/heads/main by this push:
     new d4e583dbe [FLINK-39743] [flink-autoscaler] Fix incorrect expected 
processing rate computation
d4e583dbe is described below

commit d4e583dbe2bc334415af9eaa996f96268a0c4280
Author: Devika Sudheer <[email protected]>
AuthorDate: Tue Jun 16 22:11:01 2026 -0700

    [FLINK-39743] [flink-autoscaler] Fix incorrect expected processing rate 
computation
---
 .../apache/flink/autoscaler/JobVertexScaler.java   | 11 +++--
 .../flink/autoscaler/JobVertexScalerTest.java      | 56 ++++++++++++++++++++++
 .../flink/autoscaler/ScalingExecutorTest.java      |  2 +-
 3 files changed, 63 insertions(+), 6 deletions(-)

diff --git 
a/flink-autoscaler/src/main/java/org/apache/flink/autoscaler/JobVertexScaler.java
 
b/flink-autoscaler/src/main/java/org/apache/flink/autoscaler/JobVertexScaler.java
index 395a873d8..d634de261 100644
--- 
a/flink-autoscaler/src/main/java/org/apache/flink/autoscaler/JobVertexScaler.java
+++ 
b/flink-autoscaler/src/main/java/org/apache/flink/autoscaler/JobVertexScaler.java
@@ -226,10 +226,6 @@ public class JobVertexScaler<KEY, Context extends 
JobAutoScalerContext<KEY>> {
             scaleFactor = maxScaleFactor;
         }
 
-        // Cap target capacity according to the capped scale factor
-        double cappedTargetCapacity = averageTrueProcessingRate * scaleFactor;
-        LOG.debug("Capped target processing capacity for {} is {}", vertex, 
cappedTargetCapacity);
-
         int newParallelism =
                 scale(
                         vertex,
@@ -250,10 +246,15 @@ public class JobVertexScaler<KEY, Context extends 
JobAutoScalerContext<KEY>> {
             return ParallelismChange.noChange(currentParallelism);
         }
 
+        // Cap expected target processing rate according to the capped scale 
factor
+        double expectedProcessingRate =
+                (averageTrueProcessingRate / currentParallelism) * 
newParallelism;
+        LOG.debug("Expected target processing rate for {} is {}", vertex, 
expectedProcessingRate);
+
         // We record our expectations for this scaling operation
         evaluatedMetrics.put(
                 ScalingMetric.EXPECTED_PROCESSING_RATE,
-                EvaluatedScalingMetric.of(cappedTargetCapacity));
+                EvaluatedScalingMetric.of(expectedProcessingRate));
 
         return detectBlockScaling(
                 context,
diff --git 
a/flink-autoscaler/src/test/java/org/apache/flink/autoscaler/JobVertexScalerTest.java
 
b/flink-autoscaler/src/test/java/org/apache/flink/autoscaler/JobVertexScalerTest.java
index 22963c46f..2e7a43331 100644
--- 
a/flink-autoscaler/src/test/java/org/apache/flink/autoscaler/JobVertexScalerTest.java
+++ 
b/flink-autoscaler/src/test/java/org/apache/flink/autoscaler/JobVertexScalerTest.java
@@ -827,6 +827,62 @@ public class JobVertexScalerTest {
         
assertTrue(evaluated.containsKey(ScalingMetric.EXPECTED_PROCESSING_RATE));
     }
 
+    @Test
+    public void testExpectedProcessingRateComputation() {
+        var jobVertexID = new JobVertexID();
+        conf.set(UTILIZATION_TARGET, 1.0);
+        conf.set(AutoScalerOptions.SCALE_DOWN_INTERVAL, Duration.ZERO);
+        var delayedScaleDown = new DelayedScaleDown();
+        var history = new TreeMap<Instant, ScalingSummary>();
+
+        // Max scale-up factor caps raw target parallelism 200 to 15
+        conf.set(AutoScalerOptions.MAX_SCALE_UP_FACTOR, 0.5);
+        var evaluated = evaluated(10, 200, 10);
+        assertEquals(
+                ParallelismChange.build(15, 10, true),
+                vertexScaler.computeScaleTargetParallelism(
+                        context,
+                        jobVertexID,
+                        NOT_ADJUST_INPUTS,
+                        evaluated,
+                        history,
+                        restartTime,
+                        delayedScaleDown));
+        assertEquals(15.0, 
evaluated.get(ScalingMetric.EXPECTED_PROCESSING_RATE).getCurrent());
+
+        // Key-group alignment rounds raw target parallelism 3.33 up to 4
+        conf.set(AutoScalerOptions.MAX_SCALE_UP_FACTOR, (double) 
Integer.MAX_VALUE);
+        conf.set(UTILIZATION_TARGET, 0.6);
+        evaluated = evaluated(2, 100, 100);
+        assertEquals(
+                ParallelismChange.build(4, 2, true),
+                vertexScaler.computeScaleTargetParallelism(
+                        context,
+                        jobVertexID,
+                        NOT_ADJUST_INPUTS,
+                        evaluated,
+                        history,
+                        restartTime,
+                        delayedScaleDown));
+        assertEquals(200.0, 
evaluated.get(ScalingMetric.EXPECTED_PROCESSING_RATE).getCurrent());
+
+        // Source-partition count caps raw target parallelism 200 to 150
+        conf.set(UTILIZATION_TARGET, 1.0);
+        evaluated = evaluated(10, 200, 100);
+        evaluated.put(ScalingMetric.NUM_SOURCE_PARTITIONS, 
EvaluatedScalingMetric.of(15));
+        assertEquals(
+                ParallelismChange.build(15, 10, true),
+                vertexScaler.computeScaleTargetParallelism(
+                        context,
+                        jobVertexID,
+                        NOT_ADJUST_INPUTS,
+                        evaluated,
+                        history,
+                        restartTime,
+                        delayedScaleDown));
+        assertEquals(150.0, 
evaluated.get(ScalingMetric.EXPECTED_PROCESSING_RATE).getCurrent());
+    }
+
     @ParameterizedTest
     @MethodSource("adjustmentInputsProvider")
     public void testSendingIneffectiveScalingEvents(Collection<ShipStrategy> 
inputShipStrategies) {
diff --git 
a/flink-autoscaler/src/test/java/org/apache/flink/autoscaler/ScalingExecutorTest.java
 
b/flink-autoscaler/src/test/java/org/apache/flink/autoscaler/ScalingExecutorTest.java
index 1b1a10c14..ac07e1a32 100644
--- 
a/flink-autoscaler/src/test/java/org/apache/flink/autoscaler/ScalingExecutorTest.java
+++ 
b/flink-autoscaler/src/test/java/org/apache/flink/autoscaler/ScalingExecutorTest.java
@@ -724,7 +724,7 @@ public class ScalingExecutorTest {
                                         1,
                                         2,
                                         100.0,
-                                        157.0,
+                                        200.0,
                                         110.0)));
         assertTrue(
                 event.getMessage()

Reply via email to