OLD | NEW |
1 import os, re, shutil, signal, subprocess, errno, time, heapq, traceback | 1 import os, re, shutil, signal, subprocess, errno, time, heapq, traceback |
2 import common, logging | 2 import common, logging |
3 from autotest_lib.client.common_lib import error, global_config | 3 from autotest_lib.client.common_lib import error, global_config |
4 from autotest_lib.scheduler import email_manager, drone_utility, drones | 4 from autotest_lib.scheduler import email_manager, drone_utility, drones |
5 from autotest_lib.scheduler import scheduler_config | 5 from autotest_lib.scheduler import scheduler_config |
6 | 6 |
7 | 7 |
8 # results on drones will be placed under the drone_installation_directory in a | 8 # results on drones will be placed under the drone_installation_directory in a |
9 # directory with this name | 9 # directory with this name |
10 _DRONE_RESULTS_DIR_SUFFIX = 'results' | 10 _DRONE_RESULTS_DIR_SUFFIX = 'results' |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 self._attached_files = {} | 152 self._attached_files = {} |
153 # heapq of _DroneHeapWrappers | 153 # heapq of _DroneHeapWrappers |
154 self._drone_queue = [] | 154 self._drone_queue = [] |
155 | 155 |
156 | 156 |
157 def initialize(self, base_results_dir, drone_hostnames, | 157 def initialize(self, base_results_dir, drone_hostnames, |
158 results_repository_hostname): | 158 results_repository_hostname): |
159 self._results_dir = base_results_dir | 159 self._results_dir = base_results_dir |
160 | 160 |
161 for hostname in drone_hostnames: | 161 for hostname in drone_hostnames: |
162 drone = self._add_drone(hostname) | 162 self._add_drone(hostname) |
163 drone.call('initialize', self.absolute_path('')) | |
164 | 163 |
165 if not self._drones: | 164 if not self._drones: |
166 # all drones failed to initialize | 165 # all drones failed to initialize |
167 raise DroneManagerError('No valid drones found') | 166 raise DroneManagerError('No valid drones found') |
168 | 167 |
169 self.refresh_drone_configs() | 168 self.refresh_drone_configs() |
170 | 169 |
171 logging.info('Using results repository on %s', | 170 logging.info('Using results repository on %s', |
172 results_repository_hostname) | 171 results_repository_hostname) |
173 self._results_drone = drones.get_drone(results_repository_hostname) | 172 self._results_drone = drones.get_drone(results_repository_hostname) |
(...skipping 24 matching lines...) Expand all Loading... |
198 """ | 197 """ |
199 pidfile_timeout = global_config.global_config.get_config_value( | 198 pidfile_timeout = global_config.global_config.get_config_value( |
200 scheduler_config.CONFIG_SECTION, 'max_pidfile_refreshes', | 199 scheduler_config.CONFIG_SECTION, 'max_pidfile_refreshes', |
201 type=int, default=2000) | 200 type=int, default=2000) |
202 return pidfile_timeout | 201 return pidfile_timeout |
203 | 202 |
204 | 203 |
205 def _add_drone(self, hostname): | 204 def _add_drone(self, hostname): |
206 logging.info('Adding drone %s' % hostname) | 205 logging.info('Adding drone %s' % hostname) |
207 drone = drones.get_drone(hostname) | 206 drone = drones.get_drone(hostname) |
208 self._drones[drone.hostname] = drone | 207 if drone: |
209 return drone | 208 self._drones[drone.hostname] = drone |
| 209 drone.call('initialize', self.absolute_path('')) |
210 | 210 |
211 | 211 |
212 def _remove_drone(self, hostname): | 212 def _remove_drone(self, hostname): |
213 self._drones.pop(hostname, None) | 213 self._drones.pop(hostname, None) |
214 | 214 |
215 | 215 |
216 def refresh_drone_configs(self): | 216 def refresh_drone_configs(self): |
217 """ | 217 """ |
218 Reread global config options for all drones. | 218 Reread global config options for all drones. |
219 """ | 219 """ |
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
700 | 700 |
701 def instance(): | 701 def instance(): |
702 if _the_instance is None: | 702 if _the_instance is None: |
703 _set_instance(DroneManager()) | 703 _set_instance(DroneManager()) |
704 return _the_instance | 704 return _the_instance |
705 | 705 |
706 | 706 |
707 def _set_instance(instance): # usable for testing | 707 def _set_instance(instance): # usable for testing |
708 global _the_instance | 708 global _the_instance |
709 _the_instance = instance | 709 _the_instance = instance |
OLD | NEW |