| OLD | NEW |
| 1 #!/usr/bin/python -u | 1 #!/usr/bin/python -u |
| 2 | 2 |
| 3 """ | 3 """ |
| 4 Autotest scheduler | 4 Autotest scheduler |
| 5 """ | 5 """ |
| 6 | 6 |
| 7 | 7 |
| 8 import common | 8 import common |
| 9 import datetime, errno, optparse, os, pwd, Queue, re, shutil, signal | 9 import datetime, errno, optparse, os, pwd, Queue, re, shutil, signal |
| 10 import smtplib, socket, stat, subprocess, sys, tempfile, time, traceback, urllib | 10 import smtplib, socket, stat, subprocess, sys, tempfile, time, traceback, urllib |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 autoserv_argv += ['--image', job.update_image_path] | 255 autoserv_argv += ['--image', job.update_image_path] |
| 256 if verbose: | 256 if verbose: |
| 257 autoserv_argv.append('--verbose') | 257 autoserv_argv.append('--verbose') |
| 258 return autoserv_argv + extra_args | 258 return autoserv_argv + extra_args |
| 259 | 259 |
| 260 | 260 |
| 261 class SchedulerError(Exception): | 261 class SchedulerError(Exception): |
| 262 """Raised by HostScheduler when an inconsistent state occurs.""" | 262 """Raised by HostScheduler when an inconsistent state occurs.""" |
| 263 | 263 |
| 264 | 264 |
| 265 class HostScheduler(metahost_scheduler.HostSchedulingUtility): | 265 class BaseHostScheduler(metahost_scheduler.HostSchedulingUtility): |
| 266 """Handles the logic for choosing when to run jobs and on which hosts. | 266 """Handles the logic for choosing when to run jobs and on which hosts. |
| 267 | 267 |
| 268 This class makes several queries to the database on each tick, building up | 268 This class makes several queries to the database on each tick, building up |
| 269 some auxiliary data structures and using them to determine which hosts are | 269 some auxiliary data structures and using them to determine which hosts are |
| 270 eligible to run which jobs, taking into account all the various factors that | 270 eligible to run which jobs, taking into account all the various factors that |
| 271 affect that. | 271 affect that. |
| 272 | 272 |
| 273 In the past this was done with one or two very large, complex database | 273 In the past this was done with one or two very large, complex database |
| 274 queries. It has proven much simpler and faster to build these auxiliary | 274 queries. It has proven much simpler and faster to build these auxiliary |
| 275 data structures and perform the logic in Python. | 275 data structures and perform the logic in Python. |
| (...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 658 host_list = [] | 658 host_list = [] |
| 659 for host in eligible_hosts_in_group: | 659 for host in eligible_hosts_in_group: |
| 660 hosts_in_label.discard(host.id) | 660 hosts_in_label.discard(host.id) |
| 661 self._hosts_available.pop(host.id) | 661 self._hosts_available.pop(host.id) |
| 662 host_list.append(host) | 662 host_list.append(host) |
| 663 return host_list | 663 return host_list |
| 664 | 664 |
| 665 return [] | 665 return [] |
| 666 | 666 |
| 667 | 667 |
| 668 site_host_scheduler = utils.import_site_class(__file__, |
| 669 "autotest_lib.scheduler.site_host_scheduler", |
| 670 "site_host_scheduler", BaseHostScheduler) |
| 671 |
| 672 |
| 673 class HostScheduler(site_host_scheduler): |
| 674 pass |
| 675 |
| 676 |
| 668 class Dispatcher(object): | 677 class Dispatcher(object): |
| 669 def __init__(self): | 678 def __init__(self): |
| 670 self._agents = [] | 679 self._agents = [] |
| 671 self._last_clean_time = time.time() | 680 self._last_clean_time = time.time() |
| 672 self._host_scheduler = HostScheduler() | 681 self._host_scheduler = HostScheduler() |
| 673 user_cleanup_time = scheduler_config.config.clean_interval | 682 user_cleanup_time = scheduler_config.config.clean_interval |
| 674 self._periodic_cleanup = monitor_db_cleanup.UserCleanup( | 683 self._periodic_cleanup = monitor_db_cleanup.UserCleanup( |
| 675 _db, user_cleanup_time) | 684 _db, user_cleanup_time) |
| 676 self._24hr_upkeep = monitor_db_cleanup.TwentyFourHourUpkeep(_db) | 685 self._24hr_upkeep = monitor_db_cleanup.TwentyFourHourUpkeep(_db) |
| 677 self._host_agents = {} | 686 self._host_agents = {} |
| (...skipping 1922 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2600 paired_process = self._paired_with_monitor().get_process() | 2609 paired_process = self._paired_with_monitor().get_process() |
| 2601 _drone_manager.write_lines_to_file( | 2610 _drone_manager.write_lines_to_file( |
| 2602 failed_file, ['Archiving failed with exit code %s' | 2611 failed_file, ['Archiving failed with exit code %s' |
| 2603 % self.monitor.exit_code()], | 2612 % self.monitor.exit_code()], |
| 2604 paired_with_process=paired_process) | 2613 paired_with_process=paired_process) |
| 2605 self._set_all_statuses(self._final_status()) | 2614 self._set_all_statuses(self._final_status()) |
| 2606 | 2615 |
| 2607 | 2616 |
| 2608 if __name__ == '__main__': | 2617 if __name__ == '__main__': |
| 2609 main() | 2618 main() |
| OLD | NEW |