| Index: scheduler/monitor_db_cleanup.py | 
| diff --git a/scheduler/monitor_db_cleanup.py b/scheduler/monitor_db_cleanup.py | 
| index 60b02f76ab2ebbd10b3c85413bd2fdc12e89fd81..d8bab116c6d145c647106780d5f0144269765ae9 100644 | 
| --- a/scheduler/monitor_db_cleanup.py | 
| +++ b/scheduler/monitor_db_cleanup.py | 
| @@ -3,7 +3,7 @@ Autotest AFE Cleanup used by the scheduler | 
| """ | 
|  | 
|  | 
| -import datetime, time, logging | 
| +import datetime, time, logging, random | 
| from autotest_lib.database import database_connection | 
| from autotest_lib.frontend.afe import models | 
| from autotest_lib.scheduler import email_manager, scheduler_config | 
| @@ -162,6 +162,14 @@ class UserCleanup(PeriodicCleanup): | 
| return (self._last_reverify_time + reverify_period_sec) <= time.time() | 
|  | 
|  | 
| +    def _choose_subset_of_hosts_to_reverify(self, hosts): | 
| +        """Given hosts needing verification, return a subset to reverify.""" | 
| +        max_at_once = scheduler_config.config.reverify_max_hosts_at_once | 
| +        if (max_at_once > 0 and len(hosts) > max_at_once): | 
| +            return random.sample(hosts, max_at_once) | 
| +        return sorted(hosts) | 
| + | 
| + | 
| def _reverify_dead_hosts(self): | 
| if not self._should_reverify_hosts_now(): | 
| return | 
| @@ -177,8 +185,11 @@ class UserCleanup(PeriodicCleanup): | 
| if not hosts: | 
| return | 
|  | 
| -        logging.info('Reverifying dead hosts %s' | 
| -                     % ', '.join(host.hostname for host in hosts)) | 
| +        hosts = list(hosts) | 
| +        total_hosts = len(hosts) | 
| +        hosts = self._choose_subset_of_hosts_to_reverify(hosts) | 
| +        logging.info('Reverifying dead hosts (%d of %d) %s', len(hosts), | 
| +                     total_hosts, ', '.join(host.hostname for host in hosts)) | 
| for host in hosts: | 
| models.SpecialTask.schedule_special_task( | 
| host=host, task=models.SpecialTask.Task.VERIFY) | 
|  |