=== modified file 'lava_dispatcher/client/base.py'
@@ -422,13 +422,37 @@
Reboot the system to the test image
"""
logging.info("Boot the test image")
-
- self._boot_linaro_image()
- timeout = self.config.boot_linaro_timeout
- TESTER_PS1_PATTERN = self.target_device.deployment_data['TESTER_PS1_PATTERN']
- wait_for_prompt(self.proc, TESTER_PS1_PATTERN, timeout=timeout)
- self.setup_proxy(TESTER_PS1_PATTERN)
- logging.info("System is in test image now")
+ boot_attempts = self.config.boot_retries
+ attempts = 0
+ in_linaro_image = False
+ while (attempts < boot_attempts) and (not in_linaro_image):
+ logging.info("Booting the test image. Attempt: %d" % attempts + 1)
+ try:
+ self._boot_linaro_image()
+ except (OperationFailed, pexpect.TIMEOUT) as e:
+ msg = "Boot linaro image failed: %s" % e
+ logging.info(msg)
+ attempts += 1
+ continue
+
+ timeout = self.config.boot_linaro_timeout
+ TESTER_PS1_PATTERN = self.target_device.deployment_data['TESTER_PS1_PATTERN']
+ try:
+ wait_for_prompt(self.proc, TESTER_PS1_PATTERN, timeout=timeout)
+ except (pexpect.TIMEOUT) as e:
+ msg = "Timeout waiting for boot prompt: %s" % e
+ logging.info(msg)
+ attempts += 1
+ continue
+
+ self.setup_proxy(TESTER_PS1_PATTERN)
+ logging.info("System is in test image now")
+ in_linaro_image = True
+
+ if not in_linaro_image:
+ msg = "Could not get master image booted properly"
+ logging.critical(msg)
+ raise CriticalError(msg)
def get_www_scratch_dir(self):
""" returns a temporary directory available for downloads that gets
@@ -449,27 +473,74 @@
def boot_linaro_android_image(self, adb_check=False):
"""Reboot the system to the test android image."""
- self._boot_linaro_android_image()
- TESTER_PS1_PATTERN = self.target_device.deployment_data['TESTER_PS1_PATTERN']
- timeout = self.config.android_boot_prompt_timeout
- try:
- wait_for_prompt(self.proc, TESTER_PS1_PATTERN, timeout=timeout)
- except pexpect.TIMEOUT:
+ boot_attempts = self.config.boot_retries
+ attempts = 0
+ in_linaro_android_image = False
+
+ while (attempts < boot_attempts) and (not in_linaro_android_image):
+ logging.info("Booting the android test image. Attempt: %d" % attempts + 1)
+ try:
+ self._boot_linaro_android_image()
+ except (OperationFailed, pexpect.TIMEOUT) as e:
+ msg = "Failed to boot Linaro Android Image: %s" % e
+ logging.info(msg)
+ attempts += 1
+ continue
+
+ TESTER_PS1_PATTERN = self.target_device.deployment_data['TESTER_PS1_PATTERN']
+ timeout = self.config.android_boot_prompt_timeout
+ try:
+ wait_for_prompt(self.proc, TESTER_PS1_PATTERN, timeout=timeout)
+ except pexpect.TIMEOUT:
+ msg = "Timeout waiting for boot prompt"
+ logging.info(msg)
+ attempts += 1
+ continue
+
+ #TODO: set up proxy
+
+ if not self.config.android_adb_over_usb:
+ try:
+ self._disable_adb_over_usb()
+ except (OperationFailed, pexpect.TIMEOUT) as e:
+ msg = "Failed to disable adb: %s" % e
+ logging.info(msg)
+ attempts += 1
+ continue
+
+ if self.config.android_disable_suspend:
+ try:
+ self._disable_suspend()
+ except (OperationFailed, pexpect.TIMEOUT) as e:
+ msg = "Failed to disable suspend: %s" % e
+ logging.info(msg)
+ attempts += 1
+ continue
+
+ if self.config.enable_network_after_boot_android:
+ time.sleep(1)
+ try:
+ self._enable_network()
+ except (OperationFailed, pexpect.TIMEOUT) as e:
+ msg = "Failed to enable network: %s" % e
+ logging.info(msg)
+ attempts += 1
+ continue
+
+ if self.config.android_adb_over_tcp:
+ try:
+ self._enable_adb_over_tcp()
+ except (OperationFailed, pexpect.TIMEOUT) as e:
+ msg = "Failed to enable adp over tcp: %s" % e
+ logging.info(msg)
+ attempts += 1
+ continue
+
+ in_linaro_image = True
+
+ if not in_linaro_android_image:
raise OperationFailed("booting into android test image failed")
- #TODO: set up proxy
-
- if not self.config.android_adb_over_usb:
- self._disable_adb_over_usb()
-
- if self.config.android_disable_suspend:
- self._disable_suspend()
-
- if self.config.enable_network_after_boot_android:
- time.sleep(1)
- self._enable_network()
-
- if self.config.android_adb_over_tcp:
- self._enable_adb_over_tcp()
+
#check if the adb connection can be created.
#by adb connect dev_ip command
=== modified file 'lava_dispatcher/default-config/lava-dispatcher/device-defaults.conf'
@@ -131,3 +131,6 @@
# obtained from boot.txt or uEnv.txt and others. Can be overridden in device
# specific config file.
testboot_offset = 2
+=======
+# How many times the dispatcher should try to reboot master and test images before failing
+boot_retries = 3
=== modified file 'lava_dispatcher/device/master.py'
@@ -394,10 +394,11 @@
"""
reboot the system, and check that we are in a master shell
"""
- attempts = 3
+ boot_attempts = self.config.boot_retries
+ attempts = 0
in_master_image = False
- while (attempts > 0) and (not in_master_image):
- logging.info("Booting the system master image")
+ while (attempts < boot_attempts) and (not in_master_image):
+ logging.info("Booting the system master image. Attempt: %d" % attempts + 1)
try:
self._soft_reboot()
self._wait_for_master_boot()
@@ -409,7 +410,7 @@
except (OperationFailed, pexpect.TIMEOUT) as e:
msg = "Hard reboot into master image failed: %s" % e
logging.warning(msg)
- attempts = attempts - 1
+ attempts += 1
continue
try:
@@ -419,7 +420,7 @@
except pexpect.TIMEOUT as e:
msg = "Failed to get command line prompt: " % e
logging.warning(msg)
- attempts = attempts - 1
+ attempts += 1
continue
runner = MasterCommandRunner(self)
@@ -429,7 +430,7 @@
except NetworkError as e:
msg = "Failed to get network up: " % e
logging.warning(msg)
- attempts = attempts - 1
+ attempts += 1
continue
lava_proxy = self.context.config.lava_proxy