Merge lp:~le-chi-thu/lava-dispatcher/add-deploy-retry into lp:lava-dispatcher

Proposed by Le Chi Thu
Status: Merged
Approved by: Michael Hudson-Doyle
Approved revision: 301
Merged at revision: 300
Proposed branch: lp:~le-chi-thu/lava-dispatcher/add-deploy-retry
Merge into: lp:lava-dispatcher
Diff against target: 72 lines (+34/-5)
2 files modified
doc/changes.rst (+1/-0)
lava_dispatcher/client/master.py (+33/-5)
To merge this branch: bzr merge lp:~le-chi-thu/lava-dispatcher/add-deploy-retry
Reviewer Review Type Date Requested Status
Michael Hudson-Doyle (community) Approve
Review via email: mp+107293@code.launchpad.net

Description of the change

Added retry when deploy image.

To post a comment you must log in.
Revision history for this message
Michael Hudson-Doyle (mwhudson) wrote :

Looks good, thanks for this.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'doc/changes.rst'
2--- doc/changes.rst 2012-05-23 21:49:59 +0000
3+++ doc/changes.rst 2012-05-24 21:49:18 +0000
4@@ -3,6 +3,7 @@
5
6 * Fixed reboot issues
7 * Skip raising exception on the home screen has not displayed for health check jobs
8+* Retry deployment if failed.
9
10 .. _version_0_7_1:
11
12
13=== modified file 'lava_dispatcher/client/master.py'
14--- lava_dispatcher/client/master.py 2012-05-22 13:03:31 +0000
15+++ lava_dispatcher/client/master.py 2012-05-24 21:49:18 +0000
16@@ -67,16 +67,43 @@
17 if rc:
18 raise RuntimeError("Failed to create tarball: %s" % tarfile)
19
20-def _deploy_tarball_to_board(session, tarball_url, dest, timeout=-1):
21+def _deploy_tarball_to_board(session, tarball_url, dest, timeout=-1, num_retry=2):
22 decompression_char = ''
23 if tarball_url.endswith('.gz') or tarball_url.endswith('.tgz'):
24 decompression_char = 'z'
25 elif tarball_url.endswith('.bz2'):
26 decompression_char = 'j'
27- session.run(
28- 'wget --no-proxy --connect-timeout=30 -S -O- %s --progress=dot -e dotbytes=2M | tar --numeric-owner -C %s -x%sf -' % (
29- tarball_url, dest, decompression_char),
30- timeout=timeout)
31+
32+ deploy_ok=False
33+
34+ while (num_retry > 0 and not deploy_ok):
35+ try:
36+ session._empty_pexpect_buffer()
37+ session._client.proc.sendline(
38+ 'wget --no-proxy --connect-timeout=30 -S -O- %s --progress=dot -e dotbytes=2M |'
39+ 'tar --numeric-owner -C %s -x%sf -'
40+ % (tarball_url, dest, decompression_char))
41+
42+ match_id = session._client.proc.expect(["tar: Error", "unexpected end of file",
43+ "tar: Unexpected EOF in archive",session._prompt_str], timeout=timeout)
44+ if match_id != 3:
45+ logging.warning("Deploy %s failed. %d retry left." %(tarball_url, num_retry-1))
46+ else:
47+ deploy_ok=True
48+ except:
49+ logging.warning("Deploy %s failed. %d retry left." %(tarball_url, num_retry-1))
50+ # do some delay before retry
51+ if (num_retry > 1 and not deploy_ok):
52+ sleep_time=5*60
53+ logging.info("Wait %d second before retry" % sleep_time)
54+ time.sleep(sleep_time)
55+ # send CTRL C to exit last command.
56+ session._client.proc.sendline("\003")
57+ session._client.proc.sendline("echo 'retry left %s'" % num_retry-1)
58+ num_retry = num_retry - 1
59+
60+ if not deploy_ok:
61+ raise Exception("Deploy tarball (%s) to board failed" % tarball_url);
62
63 def _deploy_linaro_rootfs(session, rootfs):
64 logging.info("Deploying linaro image")
65@@ -754,6 +781,7 @@
66 self.proc.sendline("hardreset")
67 # after hardreset empty the pexpect buffer
68 self._empty_pexpect_buffer()
69+
70 def _empty_pexpect_buffer(self):
71 """Make sure there is nothing in the pexpect buffer."""
72 index = 0

Subscribers

People subscribed via source and target branches