create a permanent pool instead of 1 per use

This commit is contained in:
Emmanuel Garette 2019-12-27 16:03:42 +01:00
parent 1ed86e035b
commit 5b1cae1567
2 changed files with 7 additions and 11 deletions

View File

@ -92,9 +92,7 @@ class CallDispatcher:
if function_obj['database'] and hasattr(old_risotto_context, 'connection'): if function_obj['database'] and hasattr(old_risotto_context, 'connection'):
risotto_context.connection = old_risotto_context.connection risotto_context.connection = old_risotto_context.connection
if function_obj['database'] and not hasattr(risotto_context, 'connection'): if function_obj['database'] and not hasattr(risotto_context, 'connection'):
db_conf = get_config().get('database') async with self.pool.acquire() as connection:
pool = await asyncpg.create_pool(database=db_conf.get('dbname'), user=db_conf.get('user'))
async with pool.acquire() as connection:
await connection.set_type_codec( await connection.set_type_codec(
'json', 'json',
encoder=dumps, encoder=dumps,
@ -181,9 +179,7 @@ class PublishDispatcher:
if function_obj['database'] and hasattr(old_risotto_context, 'connection'): if function_obj['database'] and hasattr(old_risotto_context, 'connection'):
risotto_context.connection = old_risotto_context.connection risotto_context.connection = old_risotto_context.connection
if function_obj['database'] and not hasattr(risotto_context, 'connection'): if function_obj['database'] and not hasattr(risotto_context, 'connection'):
db_conf = get_config().get('database') async with self.pool.acquire() as connection:
pool = await asyncpg.create_pool(database=db_conf.get('dbname'), user=db_conf.get('user'))
async with pool.acquire() as connection:
await connection.set_type_codec( await connection.set_type_codec(
'json', 'json',
encoder=dumps, encoder=dumps,
@ -283,9 +279,7 @@ class Dispatcher(register.RegisterDispatcher, CallDispatcher, PublishDispatcher)
config: Config, config: Config,
user_login: str, user_login: str,
uri: str) -> None: uri: str) -> None:
db_conf = get_config().get('database') async with self.pool.acquire() as connection:
pool = await asyncpg.create_pool(database=db_conf.get('dbname'), user=db_conf.get('user'))
async with pool.acquire() as connection:
async with connection.transaction(): async with connection.transaction():
# Verify if user exists and get ID # Verify if user exists and get ID
sql = ''' sql = '''

View File

@ -33,6 +33,8 @@ class RegisterDispatcher:
def __init__(self): def __init__(self):
# reference to instanciate module (to inject self in method): {"module_name": instance_of_module} # reference to instanciate module (to inject self in method): {"module_name": instance_of_module}
self.injected_self = {} self.injected_self = {}
# postgresql pool
self.pool = None
# list of uris with informations: {"v1": {"module_name.xxxxx": yyyyyy}} # list of uris with informations: {"v1": {"module_name.xxxxx": yyyyyy}}
self.messages = {} self.messages = {}
# load tiramisu objects # load tiramisu objects
@ -261,8 +263,8 @@ class RegisterDispatcher:
async def load(self): async def load(self):
# valid function's arguments # valid function's arguments
db_conf = get_config().get('database') db_conf = get_config().get('database')
pool = await asyncpg.create_pool(database=db_conf.get('dbname'), user=db_conf.get('user')) self.pool = await asyncpg.create_pool(database=db_conf.get('dbname'), user=db_conf.get('user'))
async with pool.acquire() as connection: async with self.pool.acquire() as connection:
async with connection.transaction(): async with connection.transaction():
for version, messages in self.messages.items(): for version, messages in self.messages.items():
for message, message_infos in messages.items(): for message, message_infos in messages.items():