[IMP] runbot_merge: split tagging cron out of main progress cron

They're completely independent (or should be), and there's no reason
for the tagging cron to extend the "lifetime" of the main cron's
transaction (and thus extend the odds of racey behaviour).
This commit is contained in:
Xavier Morel 2018-10-12 15:54:14 +02:00
parent f238304c44
commit 5ec2c12454
3 changed files with 23 additions and 1 deletions

View File

@ -9,7 +9,17 @@
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<record model="ir.cron" id="fetch_prs_cron">
<record model="ir.cron" id="feedback_cron">
<field name="name">Send feedback to PR</field>
<field name="model_id" ref="model_runbot_merge_project"/>
<field name="state">code</field>
<field name="code">model._send_feedback()</field>
<field name="interval_number">1</field>
<field name="interval_type">minutes</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<record model="ir.cron" id="fetch_prs_cron">
<field name="name">Check for PRs to fetch</field>
<field name="model_id" ref="model_runbot_merge_project"/>
<field name="state">code</field>

View File

@ -242,7 +242,12 @@ class Project(models.Model):
})
logger.info("Created staging %s (%s)", st, staged)
# I have no idea why this is necessary for tests to pass, the only
# DB update done not through the ORM is when receiving a notification
# that a PR has been closed
self.invalidate_cache()
def _send_feedback(self):
Repos = self.env['runbot_merge.repository']
ghs = {}
# noinspection SqlResolve

View File

@ -31,6 +31,7 @@ def test_trivial_flow(env, repo):
])
assert pr.state == 'opened'
env['runbot_merge.project']._check_progress()
env['runbot_merge.project']._send_feedback()
assert pr1.labels == {'seen 🙂'}
# nothing happened
@ -42,6 +43,7 @@ def test_trivial_flow(env, repo):
repo.post_status(c1, 'success', 'ci/runbot')
assert pr.state == 'validated'
env['runbot_merge.project']._check_progress()
env['runbot_merge.project']._send_feedback()
assert pr1.labels == {'seen 🙂', 'CI 🤖'}
pr1.post_comment('hansen r+', 'reviewer')
@ -50,6 +52,7 @@ def test_trivial_flow(env, repo):
# can't check labels here as running the cron will stage it
env['runbot_merge.project']._check_progress()
env['runbot_merge.project']._send_feedback()
assert pr.staging_id
assert pr1.labels == {'seen 🙂', 'CI 🤖', 'r+ 👌', 'merging 👷'}
@ -60,6 +63,7 @@ def test_trivial_flow(env, repo):
assert re.match('^force rebuild', staging_head.message)
env['runbot_merge.project']._check_progress()
env['runbot_merge.project']._send_feedback()
assert pr.state == 'merged'
assert pr1.labels == {'seen 🙂', 'CI 🤖', 'r+ 👌', 'merged 🎉'}
@ -235,6 +239,7 @@ def test_staging_conflict(env, repo):
repo.post_status(c3, 'success', 'ci/runbot')
pr2.post_comment('hansen r+', "reviewer")
env['runbot_merge.project']._check_progress()
env['runbot_merge.project']._send_feedback()
p_2 = env['runbot_merge.pull_requests'].search([
('repository.name', '=', repo.name),
('number', '=', pr2.number)
@ -306,6 +311,7 @@ def test_staging_merge_fail(env, repo, users):
prx.post_comment('hansen r+', "reviewer")
env['runbot_merge.project']._check_progress()
env['runbot_merge.project']._send_feedback()
pr1 = env['runbot_merge.pull_requests'].search([
('repository.name', '=', repo.name),
('number', '=', prx.number)
@ -502,6 +508,7 @@ def test_edit(env, repo):
prx.base = '2.0'
assert not pr.exists()
env['runbot_merge.project']._check_progress()
env['runbot_merge.project']._send_feedback()
assert prx.labels == set()
prx.base = '1.0'