mirror of
https://github.com/odoo/runbot.git
synced 2025-03-27 13:25:47 +07:00
[FIX] runbot: invalidate cache at each commit.
In some rare case db could become inconsistent if some data in cache were used between two _schedule loop turn.
This commit is contained in:
parent
94a680f0c8
commit
5c72655e18
@ -508,6 +508,7 @@ class runbot_build(models.Model):
|
|||||||
|
|
||||||
for build in self:
|
for build in self:
|
||||||
self.env.cr.commit() # commit between each build to minimise transactionnal errors due to state computations
|
self.env.cr.commit() # commit between each build to minimise transactionnal errors due to state computations
|
||||||
|
self.invalidate_cache()
|
||||||
if build.local_state == 'deathrow':
|
if build.local_state == 'deathrow':
|
||||||
build._kill(result='manually_killed')
|
build._kill(result='manually_killed')
|
||||||
continue
|
continue
|
||||||
@ -607,6 +608,8 @@ class runbot_build(models.Model):
|
|||||||
# cleanup only needed if it was not killed
|
# cleanup only needed if it was not killed
|
||||||
if build.local_state == 'done':
|
if build.local_state == 'done':
|
||||||
build._local_cleanup()
|
build._local_cleanup()
|
||||||
|
self.env.cr.commit()
|
||||||
|
self.invalidate_cache()
|
||||||
|
|
||||||
def _path(self, *l, **kw):
|
def _path(self, *l, **kw):
|
||||||
"""Return the repo build path"""
|
"""Return the repo build path"""
|
||||||
@ -794,6 +797,7 @@ class runbot_build(models.Model):
|
|||||||
self.env.cr.commit()
|
self.env.cr.commit()
|
||||||
build._github_status()
|
build._github_status()
|
||||||
build._local_cleanup()
|
build._local_cleanup()
|
||||||
|
self.invalidate_cache()
|
||||||
|
|
||||||
def _ask_kill(self):
|
def _ask_kill(self):
|
||||||
# todo xdo, should we kill or skip children builds? it looks like yes, but we need to be carefull if subbuild can be duplicates
|
# todo xdo, should we kill or skip children builds? it looks like yes, but we need to be carefull if subbuild can be duplicates
|
||||||
|
@ -261,6 +261,7 @@ class ConfigStep(models.Model):
|
|||||||
build_path = build._path()
|
build_path = build._path()
|
||||||
build_port = build.port
|
build_port = build.port
|
||||||
self.env.cr.commit() # commit before docker run to be 100% sure that db state is consistent with dockers
|
self.env.cr.commit() # commit before docker run to be 100% sure that db state is consistent with dockers
|
||||||
|
self.invalidate_cache()
|
||||||
return docker_run(build_odoo_cmd(cmd), log_path, build_path, docker_name, exposed_ports=[build_port, build_port + 1])
|
return docker_run(build_odoo_cmd(cmd), log_path, build_path, docker_name, exposed_ports=[build_port, build_port + 1])
|
||||||
|
|
||||||
def _run_odoo_install(self, build, log_path):
|
def _run_odoo_install(self, build, log_path):
|
||||||
|
@ -370,6 +370,7 @@ class runbot_repo(models.Model):
|
|||||||
build_ids = Build.search(domain_host + [('local_state', 'in', ['testing', 'running', 'deathrow'])])
|
build_ids = Build.search(domain_host + [('local_state', 'in', ['testing', 'running', 'deathrow'])])
|
||||||
build_ids._schedule()
|
build_ids._schedule()
|
||||||
self.env.cr.commit()
|
self.env.cr.commit()
|
||||||
|
self.invalidate_cache()
|
||||||
|
|
||||||
# launch new tests
|
# launch new tests
|
||||||
|
|
||||||
@ -382,6 +383,7 @@ class runbot_repo(models.Model):
|
|||||||
# commit transaction to reduce the critical section duration
|
# commit transaction to reduce the critical section duration
|
||||||
def allocate_builds(where_clause, limit):
|
def allocate_builds(where_clause, limit):
|
||||||
self.env.cr.commit()
|
self.env.cr.commit()
|
||||||
|
self.invalidate_cache()
|
||||||
# self-assign to be sure that another runbot instance cannot self assign the same builds
|
# self-assign to be sure that another runbot instance cannot self assign the same builds
|
||||||
query = """UPDATE
|
query = """UPDATE
|
||||||
runbot_build
|
runbot_build
|
||||||
@ -421,7 +423,6 @@ class runbot_repo(models.Model):
|
|||||||
pending_build = Build.search(domain_host + [('local_state', '=', 'pending')], limit=available_slots)
|
pending_build = Build.search(domain_host + [('local_state', '=', 'pending')], limit=available_slots)
|
||||||
if pending_build:
|
if pending_build:
|
||||||
pending_build._schedule()
|
pending_build._schedule()
|
||||||
self.env.cr.commit()
|
|
||||||
|
|
||||||
# terminate and reap doomed build
|
# terminate and reap doomed build
|
||||||
build_ids = Build.search(domain_host + [('local_state', '=', 'running')]).ids
|
build_ids = Build.search(domain_host + [('local_state', '=', 'running')]).ids
|
||||||
|
Loading…
Reference in New Issue
Block a user