Merge lp:~cjwatson/launchpad/job-retry-no-oops into lp:launchpad

Proposed by Colin Watson
Status: Rejected
Rejected by: Colin Watson
Proposed branch: lp:~cjwatson/launchpad/job-retry-no-oops
Merge into: lp:launchpad
Diff against target: 66 lines (+18/-4)
2 files modified
constraints.txt (+1/-1)
lib/lp/services/job/tests/test_runner.py (+17/-3)
To merge this branch: bzr merge lp:~cjwatson/launchpad/job-retry-no-oops
Reviewer Review Type Date Requested Status
Launchpad code reviewers Pending
Review via email: mp+372556@code.launchpad.net

Commit message

Upgrade to lazr.jobrunner 0.16, and test for lack of OOPSes on retry.

Description of the change

lazr.jobrunner 0.16 also adds Python 3 support, although we'll need to upgrade to Celery 4.3 or newer before being able to take advantage of that.

The retry OOPS fix comes from https://code.launchpad.net/~cjwatson/lazr.jobrunner/quieter-retry-handling/+merge/369697 (merged).

To post a comment you must log in.
Revision history for this message
Colin Watson (cjwatson) wrote :

Unmerged revisions

19047. By Colin Watson

Upgrade to lazr.jobrunner 0.16, and test for lack of OOPSes on retry.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'constraints.txt'
2--- constraints.txt 2019-08-23 11:40:51 +0000
3+++ constraints.txt 2019-09-10 15:10:56 +0000
4@@ -286,7 +286,7 @@
5 lazr.config==2.2.1
6 lazr.delegates==2.0.4
7 lazr.enum==1.1.3
8-lazr.jobrunner==0.14
9+lazr.jobrunner==0.16
10 lazr.lifecycle==1.1
11 lazr.restful==0.20.1
12 lazr.restfulclient==0.13.2
13
14=== modified file 'lib/lp/services/job/tests/test_runner.py'
15--- lib/lp/services/job/tests/test_runner.py 2018-03-30 20:42:14 +0000
16+++ lib/lp/services/job/tests/test_runner.py 2019-09-10 15:10:56 +0000
17@@ -44,6 +44,7 @@
18 TwistedJobRunner,
19 )
20 from lp.services.log.logger import BufferLogger
21+from lp.services.scripts.logger import OopsHandler
22 from lp.services.timeline.requesttimeline import get_request_timeline
23 from lp.services.timeout import (
24 get_default_timeout_function,
25@@ -366,18 +367,29 @@
26
27 def test_runJobHandleErrors_user_error_no_oops(self):
28 """If the job raises a user error, there is no oops."""
29+ logging.getLogger().addHandler(OopsHandler('test_runner'))
30 job = RaisingJobUserError('boom')
31 runner = JobRunner([job])
32 runner.runJobHandleError(job)
33 self.assertEqual(0, len(self.oopses))
34
35+ def test_runJobHandleErrors_retry_error_no_oops(self):
36+ """If the job raises a retry error, there is no oops."""
37+ logging.getLogger().addHandler(OopsHandler('test_runner'))
38+ job = RaisingRetryJob('completion')
39+ runner = JobRunner([job])
40+ runner.runJobHandleError(job)
41+ self.assertEqual(0, len(self.oopses))
42+
43 def test_runJob_raising_retry_error(self):
44 """If a job raises a retry_error, it should be re-queued."""
45 job = RaisingRetryJob('completion')
46- runner = JobRunner([job])
47+ logger = BufferLogger()
48+ logger.setLevel(logging.INFO)
49+ runner = JobRunner([job], logger=logger)
50 self.assertIs(None, job.scheduled_start)
51- with self.expectedLog('Scheduling retry due to RetryError'):
52- runner.runJob(job, None)
53+ self.addCleanup(lambda: self.addDetail('log', logger.content))
54+ runner.runJob(job, None)
55 self.assertEqual(JobStatus.WAITING, job.status)
56 expected_delay = datetime.now(UTC) + timedelta(minutes=10)
57 self.assertThat(
58@@ -388,6 +400,8 @@
59 self.assertIsNone(job.lease_expires)
60 self.assertNotIn(job, runner.completed_jobs)
61 self.assertIn(job, runner.incomplete_jobs)
62+ self.assertIn(
63+ 'Scheduling retry due to RetryError', logger.getLogBuffer())
64
65 def test_runJob_exceeding_max_retries(self):
66 """If a job exceeds maximum retries, it should raise normally."""