Commit b7720e45 authored by Rafael Monnerat's avatar Rafael Monnerat :ghost:

slapos_cloud: Allow a instance request something out of the it's tree

Due race conditions resilience can unlink instances from a "dead" runner0 to relink it later (on the new runner0). We should allow relink if the instances are active.

This would fix resilience takeover in general.
parent de1b51e4
No related merge requests found
Pipeline #8944 failed with stage
in 0 seconds
......@@ -113,11 +113,18 @@ else:
# Update the predecessor category of the previous requester
predecessor = request_software_instance.getPredecessorRelatedValue(portal_type="Software Instance")
if (predecessor is None):
if (requester_instance.getPortalType() != "Hosting Subscription"):
# Check if the precessor is a Hosting Subscription
hosting_subscription_precessesor = request_software_instance.getPredecessorRelatedValue(portal_type="Hosting Subscription")
if (requester_instance.getPortalType() != "Hosting Subscription" and hosting_subscription_precessesor is not None):
raise ValueError('It is disallowed to request root software instance %s' % request_software_instance.getRelativeUrl())
else:
predecessor = requester_instance
# It was a loose node, so check if it ok:
if request_software_instance.getUid() not in graph:
graph[request_software_instance.getUid()] = request_software_instance.getPredecessorUidList()
predecessor_uid_list = predecessor.getPredecessorUidList()
if request_software_instance.getUid() in predecessor_uid_list:
predecessor_uid_list.remove(request_software_instance.getUid())
predecessor.edit(predecessor_uid_list=predecessor_uid_list)
graph[predecessor.getUid()] = predecessor_uid_list
......
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