@@ -29,7 +29,8 @@ def initialize(config, redis: nil)
2929 { }
3030 end
3131
32- @max_duration = config &.suite_max_duration || 120_000
32+ @minimum_max_duration = config &.suite_max_duration || 120_000
33+ @maximum_max_duration = config &.suite_max_duration || 300_000
3334 @fallback_duration = config &.timing_fallback_duration || 100.0
3435 @buffer_percent = config &.suite_buffer_percent || 10
3536
@@ -106,8 +107,8 @@ def calculate_dynamic_max_duration(tests)
106107
107108 puts "parallel_job_count: #{ parallel_job_count } "
108109
109- # If no parallel job count, fall back to configured max_duration
110- return @max_duration unless parallel_job_count && parallel_job_count > 0
110+ # If no parallel job count, fall back to configured minimum max_duration
111+ return @minimum_max_duration unless parallel_job_count && parallel_job_count > 0
111112
112113 # Calculate total duration of all tests
113114 total_duration = tests . sum do |test |
@@ -118,11 +119,12 @@ def calculate_dynamic_max_duration(tests)
118119 # This gives us the target max chunk time
119120 base_max_duration = total_duration . to_f / parallel_job_count
120121
121- puts "base_max_duration: #{ base_max_duration } , @max_duration : #{ @max_duration } "
122+ puts "base_max_duration: #{ base_max_duration } , @minimum_max_duration : #{ @minimum_max_duration } , @maximum_max_duration: #{ @maximum_max_duration } "
122123
123- # Ensure we don't go below a minimum reasonable value
124+ # Ensure we don't go above or below reasonable floor values.
124125 # Use configured max_duration as a floor to prevent extremely small chunks
125- [ base_max_duration , @max_duration ] . max
126+ max_duration = [ base_max_duration , @maximum_max_duration ] . min
127+ [ max_duration , @minimum_max_duration ] . max
126128 end
127129
128130 def create_chunks_for_suite ( suite_name , suite_tests , max_duration )
0 commit comments