Add increasing delay on OperationalError

This increase the success rate of retry if the other transaction last.

issue8014
review50701002
This commit is contained in:
Cédric Krier
2019-02-04 22:23:12 +01:00
parent 88b1272d95
commit 0b6c923834
4 changed files with 15 additions and 3 deletions
+1
View File
@@ -1,3 +1,4 @@
* Add increasing delay on database operational error retry
* Allows to lock records for update
* Remove _nocache on Transaction
* Make Cache transactional
+5 -1
View File
@@ -4,6 +4,7 @@
import http.client
import logging
import pydoc
import time
try:
from http import HTTPStatus
except ImportError:
@@ -169,7 +170,10 @@ def _dispatch(request, pool, *args, **kwargs):
obj, method, args, kwargs, username, request.remote_addr, request.path)
logger.info(log_message, *log_args)
for count in range(config.getint('database', 'retry'), -1, -1):
retry = config.getint('database', 'retry')
for count in range(retry, -1, -1):
if count != retry:
time.sleep(0.02 * (retry - count))
with Transaction().start(pool.database_name, user,
readonly=rpc.readonly) as transaction:
try:
+5 -1
View File
@@ -3,6 +3,7 @@
import base64
import gzip
import logging
import time
from io import BytesIO
from functools import wraps
try:
@@ -145,7 +146,10 @@ def with_transaction(readonly=None):
else:
readonly_ = True
context = {'_request': request.context}
for count in range(config.getint('database', 'retry'), -1, -1):
retry = config.getint('database', 'retry')
for count in range(retry, -1, -1):
if count != retry:
time.sleep(0.02 * (retry - count))
with Transaction().start(
pool.database_name, 0, readonly=readonly_,
context=context) as transaction:
+4 -1
View File
@@ -100,7 +100,10 @@ def run_task(pool, task_id):
Queue = pool.get('ir.queue')
logger.info('task "%d" started', task_id)
try:
for count in range(config.getint('database', 'retry'), -1, -1):
retry = config.getint('database', 'retry')
for count in range(retry, -1, -1):
if count != retry:
time.sleep(0.02 * (retry - count))
with Transaction().start(pool.database_name, 0) as transaction:
try:
Queue(task_id).run()