Commit 4f133d81 authored by Kazuhiko Shiozaki's avatar Kazuhiko Shiozaki

ERP5Site: force READ-COMMITTED isolation for cmf_activity_sql_connection.

parent e0b4a5bb
......@@ -50,6 +50,7 @@ from Products.ERP5Type.mixin.response_header_generator import ResponseHeaderGene
from zLOG import LOG, INFO, WARNING, ERROR
from zExceptions import BadRequest
import os
import re
import warnings
import transaction
from App.config import getConfiguration
......@@ -84,7 +85,7 @@ def manage_addERP5Site(self,
validate_email=0,
erp5_catalog_storage='erp5_mysql_innodb_catalog',
erp5_sql_connection_string=default_sql_connection_string,
cmf_activity_sql_connection_string=default_sql_connection_string,
cmf_activity_sql_connection_string='!READ-COMMITTED %s' % default_sql_connection_string,
bt5_repository_url='',
bt5='',
id_store_interval='',
......@@ -2281,7 +2282,8 @@ class ERP5Generator(PortalGenerator):
# The only difference compared to activity connection is the
# minus prepended to the connection string.
if id == 'erp5_sql_transactionless_connection':
connection_string = '-' + p.cmf_activity_sql_connection_string
# omit isolation-level and add '-' sign in front of the database.
connection_string = re.sub(r'((?:[%*][^ ]+ )*)(![^ ]+ )?(.+)', r'\1-\3', p.cmf_activity_sql_connection_string)
else:
connection_string = getattr(p, id + '_string')
manage_add(id, title, connection_string, **kw)
......
......@@ -102,17 +102,22 @@ def _getConnectionStringDict():
connection_string_dict = {}
default = os.environ.get('erp5_sql_connection_string')
for connection in ('erp5_sql_connection_string',
'erp5_sql_deferred_connection_string',
# default value for transactionless is derived from value
# for cmf_activity, so process it last
'cmf_activity_sql_connection_string'):
'erp5_sql_deferred_connection_string'):
connection_string = os.environ.get(connection, default)
if connection_string:
connection_string_dict[connection] = connection_string
connection = 'cmf_activity_sql_connection_string'
# force READ-COMMITTED isolation-level.
connection_string_dict[connection] = \
os.environ.get(connection, re.sub(
r'((?:[%*][^ ]+ )*)(![^ ]+ )?(.+)', r'\1!READ-COMMITTED \3', connection_string_dict['erp5_sql_connection_string']))
# default value for transactionless is derived from value
# for cmf_activity, so process it last
connection = 'erp5_sql_transactionless_connection_string'
if os.environ.get(connection, connection_string):
# omit isolation-level and add '-' sign in front of the database.
connection_string_dict[connection] = \
os.environ.get(connection, '-' + connection_string)
os.environ.get(connection, re.sub(
r'((?:[%*][^ ]+ )*)(![^ ]+ )?(.+)', r'\1-\3', connection_string_dict['cmf_activity_sql_connection_string']))
return connection_string_dict
def _getConversionServerUrlList():
......
......@@ -65,7 +65,7 @@ Options:
--cmf_activity_sql_connection_string=STRING
ZSQL Connection string for
cmf_activity_sql_connection (if unset, defaults to
erp5_sql_connection_string)
erp5_sql_connection_string with "!READ-COMMITTED")
--extra_sql_connection_string_list=STRING
Used when 2 or more ZSQL connection strings are
needed. By defaut, it will take the last four
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment