From 244a5e8d72e89f9f0e6ded73038109f1e4ebbada Mon Sep 17 00:00:00 2001 From: Alessio Ababilov Date: Fri, 10 Aug 2012 11:06:56 +0300 Subject: Revert "Remove unused add_network_to_project() method" This reverts commit d8e39cb775a872c46d067bee8febc40dee799369. Change-Id: I22f0692814ff029b4960ab32cbee63bbf4922106 --- nova/db/sqlalchemy/api.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'nova/db') diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index 2993aaaf3..a55e7ab80 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -1995,12 +1995,20 @@ def key_pair_count_by_user(context, user_id): @require_admin_context -def network_associate(context, project_id): +def network_associate(context, project_id, force=False): """Associate a project with a network. called by project_get_networks under certain conditions + and network manager add_network_to_project() only associate if the project doesn't already have a network + or if force is True + + force solves race condition where a fresh project has multiple instance + builds simultaneously picked up by multiple network hosts which attempt + to associate the project with multiple networks + force should only be used as a direct consequence of user request + all automated requests should not use force """ session = get_session() with session.begin(): @@ -2012,10 +2020,13 @@ def network_associate(context, project_id): with_lockmode('update').\ first() - # find out if project has a network - network_ref = network_query(project_id) - if not network_ref: - # project doesn't have a network so associate with a new network + if not force: + # find out if project has a network + network_ref = network_query(project_id) + + if force or not network_ref: + # in force mode or project doesn't have a network so associate + # with a new network # get new network network_ref = network_query(None) -- cgit