Add increasing delay on OperationalError
This increase the success rate of retry if the other transaction last. issue8014 review50701002
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user