Revision 40a815f8 snf-cyclades-app/synnefo/logic/backend.py
b/snf-cyclades-app/synnefo/logic/backend.py | ||
---|---|---|
243 | 243 |
db_nics = dict([(nic.id, nic) |
244 | 244 |
for nic in vm.nics.prefetch_related("ips__subnet")]) |
245 | 245 |
|
246 |
# Get X-Lock on backend before getting X-Lock on network IP pools, to |
|
247 |
# guarantee that no deadlock will occur with Backend allocator. |
|
248 |
Backend.objects.select_for_update().get(id=vm.backend_id) |
|
249 |
|
|
250 | 246 |
for nic_name in set(db_nics.keys()) | set(ganeti_nics.keys()): |
251 | 247 |
db_nic = db_nics.get(nic_name) |
252 | 248 |
ganeti_nic = ganeti_nics.get(nic_name) |
... | ... | |
813 | 809 |
and the IDs of the Ganeti job to create the network. |
814 | 810 |
|
815 | 811 |
""" |
816 |
network = Network.objects.select_for_update().get(id=network_id) |
|
817 |
bnet, created = BackendNetwork.objects.get_or_create(backend=backend, |
|
818 |
network=network) |
|
819 | 812 |
job_ids = [] |
820 |
if bnet.operstate != "ACTIVE": |
|
813 |
try: |
|
814 |
bnet = BackendNetwork.objects.select_related("network")\ |
|
815 |
.get(backend=backend, network=network_id) |
|
816 |
if bnet.operstate != "ACTIVE": |
|
817 |
job_ids = create_network(bnet.network, backend, connect=True) |
|
818 |
except BackendNetwork.DoesNotExist: |
|
819 |
network = Network.objects.select_for_update().get(id=network_id) |
|
820 |
bnet = BackendNetwork.objects.create(backend=backend, network=network) |
|
821 | 821 |
job_ids = create_network(network, backend, connect=True) |
822 | 822 |
|
823 | 823 |
return bnet, job_ids |
Also available in: Unified diff