@@ -14,9 +14,8 @@ import os
1414import subprocess
1515import sys
1616
17- from datetime import datetime , timedelta
17+ from datetime import timedelta
1818from functools import partial
19- from zoneinfo import ZoneInfo
2019
2120from buildbot .plugins import reporters , schedulers , util
2221from buildbot import locks
@@ -194,57 +193,13 @@ def is_important_change(change):
194193 return any (is_important_file (filename ) for filename in change .files )
195194
196195
197- def is_within_time_range (now , start , end ):
198- if start <= end :
199- return start <= now <= end
200- else :
201- return now >= start or now <= end
202-
203-
204- def get_delay (now , end ):
205- today = datetime .today ()
206- now = datetime .combine (today , now )
207- end = datetime .combine (today , end )
208-
209- if now > end :
210- end += timedelta (days = 1 )
211-
212- difference = end - now
213- return difference .total_seconds ()
214-
215-
216- # Avoid a build to be started between start and end time and delay such build
217- # at end time
218- def no_builds_between (start , end , * , day_of_week = None , tz = None ):
219- start = datetime .strptime (start , "%H:%M" ).time ()
220- end = datetime .strptime (end , "%H:%M" ).time ()
221- def canStartBuild (builder , wfb , request ):
222- now_dt = datetime .now (tz = tz )
223- if day_of_week is not None and now_dt .weekday () != day_of_week :
224- return True
225- now = now_dt .time ()
226- if is_within_time_range (now , start , end ):
227- delay = get_delay (now , end )
228- # Adapted from: https://docs.buildbot.net/current/manual/customization.html#canstartbuild-functions
229- wfb .worker .quarantine_timeout = delay
230- wfb .worker .putInQuarantine ()
231- # This does not take the worker out of quarantine, it only resets
232- # the timeout value to default (restarting the default
233- # exponential backoff)
234- wfb .worker .resetQuarantine ()
235- return False
236- # Schedule the build now
237- return True
238- return canStartBuild
239-
240-
241196github_status_builders = []
242197release_status_builders = []
243198mail_status_builders = []
244199
245200# Regular builders
246201
247- for branch_num , ( git_url , branchname , git_branch ) in enumerate ( git_branches ) :
202+ for git_url , branchname , git_branch in git_branches :
248203 buildernames = []
249204 refleakbuildernames = []
250205 for name , worker , buildfactory , stability , tier in BUILDERS :
@@ -308,24 +263,8 @@ for branch_num, (git_url, branchname, git_branch) in enumerate(git_branches):
308263 locks = [cpulock .access ("counting" )],
309264 )
310265
311- # This worker runs pyperformance at 12am UTC. If a build is scheduled between
312- # 10pm UTC and 2am UTC, it will be delayed to 2am UTC.
313- if worker .name == "diegorusso-aarch64-bigmem" :
314- builder .canStartBuild = no_builds_between ("22:00" , "2:00" )
315-
316- # This worker restarts every day at 9am UTC to work around issues stemming from
317- # failing bigmem tests trashing disk space and fragmenting RAM. Builds scheduled
318- # between 07:20am - 9:20am UTC will be delayed to 9:20am UTC.
319- if worker .name == "ambv-bb-win11" :
320- builder .canStartBuild = no_builds_between ("7:20" , "9:20" )
321-
322- # These workers are reprovisioned every Wednesday at 9am PT. Builds
323- # scheduled between 8am - 10am PT on Wednesdays will be delayed to
324- # 10am PT.
325- if worker .name in ("itamaro-win64-srv-22-aws" , "itamaro-centos-aws" ):
326- builder .canStartBuild = no_builds_between (
327- "8:00" , "10:00" , day_of_week = 2 , tz = ZoneInfo ("America/Los_Angeles" )
328- )
266+ if worker .downtime :
267+ builder .canStartBuild = worker .downtime
329268
330269 c ["builders" ].append (builder )
331270
@@ -397,18 +336,8 @@ for name, worker, buildfactory, stability, tier in BUILDERS:
397336 locks = [cpulock .access ("counting" )],
398337 )
399338
400- # This worker runs pyperformance at 12am. If a build is scheduled between
401- # 10pm and 2am, it will be delayed at 2am.
402- if worker .name == "diegorusso-aarch64-bigmem" :
403- builder .canStartBuild = no_builds_between ("22:00" , "2:00" )
404-
405- # These workers are reprovisioned every Wednesday at 9am PT. Builds
406- # scheduled between 8am - 10am PT on Wednesdays will be delayed to
407- # 10am PT.
408- if worker .name in ("itamaro-win64-srv-22-aws" , "itamaro-centos-aws" ):
409- builder .canStartBuild = no_builds_between (
410- "8:00" , "10:00" , day_of_week = 2 , tz = ZoneInfo ("America/Los_Angeles" )
411- )
339+ if worker .downtime :
340+ builder .canStartBuild = worker .downtime
412341
413342 c ["builders" ].append (builder )
414343
0 commit comments