From b6f7979059370d567a8f2d86361db12ced484fb3 Mon Sep 17 00:00:00 2001 From: Istvan Soos Date: Mon, 8 Dec 2025 14:35:32 +0100 Subject: [PATCH] sparse zoneBannedUntil --- app/lib/task/scheduler.dart | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/app/lib/task/scheduler.dart b/app/lib/task/scheduler.dart index 79bf6b9f2..656e49f2f 100644 --- a/app/lib/task/scheduler.dart +++ b/app/lib/task/scheduler.dart @@ -3,6 +3,7 @@ import 'dart:convert'; import 'dart:math'; import 'package:_pub_shared/data/task_payload.dart'; +import 'package:basics/basics.dart'; import 'package:clock/clock.dart'; import 'package:logging/logging.dart' show Logger; import 'package:meta/meta.dart'; @@ -36,18 +37,14 @@ Future<(CreateInstancesState, Duration)> runOneCreateInstancesCycle( }) async { // Map from zone to DateTime when zone is allowed again final zoneBannedUntil = { - for (final zone in compute.zones) zone: DateTime(0), - ...state.zoneBannedUntil, + ...state.zoneBannedUntil.whereValue((v) => v.isAfter(clock.now())), }; void banZone(String zone, {int minutes = 0, int hours = 0, int days = 0}) { - if (!zoneBannedUntil.containsKey(zone)) { - throw ArgumentError.value(zone, 'zone'); - } - final until = clock.now().add( Duration(minutes: minutes, hours: hours, days: days), ); - if (zoneBannedUntil[zone]!.isBefore(until)) { + if (!zoneBannedUntil.containsKey(zone) || + zoneBannedUntil[zone]!.isBefore(until)) { zoneBannedUntil[zone] = until; } } @@ -72,10 +69,7 @@ Future<(CreateInstancesState, Duration)> runOneCreateInstancesCycle( // Determine which zones are not banned final allowedZones = - zoneBannedUntil.entries - .where((e) => e.value.isBefore(clock.now())) - .map((e) => e.key) - .toList() + compute.zones.where((zone) => !zoneBannedUntil.containsKey(zone)).toList() ..shuffle(rng); var nextZoneIndex = 0; String pickZone() => allowedZones[nextZoneIndex++ % allowedZones.length];