changeset 9c2b17ecf341 in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset;node=9c2b17ecf341
description:
Add increasing delay on OperationalError
This increase the success rate of retry if the other transaction last.
issue8014
review50701002
diffstat:
CHANGELOG | 1 +
trytond/protocols/dispatcher.py | 6 +++++-
trytond/protocols/wrappers.py | 6 +++++-
trytond/worker.py | 5 ++++-
4 files changed, 15 insertions(+), 3 deletions(-)
diffs (69 lines):
diff -r 7c73ae565b76 -r 9c2b17ecf341 CHANGELOG
--- a/CHANGELOG Mon Feb 04 22:19:37 2019 +0100
+++ b/CHANGELOG Mon Feb 04 22:23:12 2019 +0100
@@ -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
diff -r 7c73ae565b76 -r 9c2b17ecf341 trytond/protocols/dispatcher.py
--- a/trytond/protocols/dispatcher.py Mon Feb 04 22:19:37 2019 +0100
+++ b/trytond/protocols/dispatcher.py Mon Feb 04 22:23:12 2019 +0100
@@ -4,6 +4,7 @@
import http.client
import logging
import pydoc
+import time
try:
from http import HTTPStatus
except ImportError:
@@ -169,7 +170,10 @@
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:
diff -r 7c73ae565b76 -r 9c2b17ecf341 trytond/protocols/wrappers.py
--- a/trytond/protocols/wrappers.py Mon Feb 04 22:19:37 2019 +0100
+++ b/trytond/protocols/wrappers.py Mon Feb 04 22:23:12 2019 +0100
@@ -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 @@
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:
diff -r 7c73ae565b76 -r 9c2b17ecf341 trytond/worker.py
--- a/trytond/worker.py Mon Feb 04 22:19:37 2019 +0100
+++ b/trytond/worker.py Mon Feb 04 22:23:12 2019 +0100
@@ -100,7 +100,10 @@
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()