Commit 23831f12 authored by Rafael Monnerat's avatar Rafael Monnerat

slapos_cloud: Protect supply against multiple calls on the same request

  This prevents +2 supplies on the request creates more them one software installation with same url on a compute  node.
parent 1c887e1a
......@@ -14,7 +14,7 @@ except KeyError:
tag = "%s_%s_inProgress" % (compute_node.getUid(),
software_release_url)
if (portal.portal_activities.countMessageWithTag(tag) > 0):
if (portal.portal_activities.countMessageWithTag(tag) > 0 or compute_node.REQUEST.get(tag) == tag):
# The software instance is already under creation but can not be fetched from catalog
# As it is not possible to fetch informations, it is better to raise an error
raise NotImplementedError(tag)
......@@ -41,7 +41,7 @@ else:
if (state == "destroyed"):
# No need to create destroyed subscription.
return
software_installation_reference = "SOFTINSTALL-%s" % context.getPortalObject().portal_ids\
software_installation_reference = "SOFTINSTALL-%s" % portal.portal_ids\
.generateNewId(id_group='slap_software_installation_reference', id_generator='uid')
software_installation = portal.getDefaultModule(portal_type=software_installation_portal_type).newContent(
portal_type=software_installation_portal_type,
......@@ -51,6 +51,7 @@ else:
follow_up_value=compute_node.getFollowUpValue(),
activate_kw={'tag': tag}
)
compute_node.REQUEST.set(tag, tag)
# Change desired state
if (state == "available"):
......@@ -67,4 +68,4 @@ if validation_state == 'draft':
portal.portal_workflow.doActionFor(software_installation,
'validate_action')
context.REQUEST.set('software_installation_url', software_installation.getRelativeUrl())
compute_node.REQUEST.set('software_installation_url', software_installation.getRelativeUrl())
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