@@ -69,18 +69,21 @@ def __init__(self, change_set: ChangeSet):
6969 self .resolved_parameters = dict ()
7070 self ._deferred_actions = list ()
7171
72- # TODO: use a structured type for the return value
7372 def execute (self ) -> ChangeSetModelExecutorResult :
73+ # constructive process
7474 self .process ()
7575
76+ # perform all deferred actions such as deletions. These must happen in reverse from their
77+ # defined order so that resource dependencies are honoured
78+ # TODO: errors will stop all rollbacks; get parity on this behaviour
7679 for action in self ._deferred_actions [::- 1 ]:
7780 action ()
7881
7982 return ChangeSetModelExecutorResult (
8083 resources = self .resources , parameters = self .resolved_parameters , outputs = self .outputs
8184 )
8285
83- def _defer (self , action : DeferredAction ):
86+ def _defer_action (self , action : DeferredAction ):
8487 self ._deferred_actions .append (action )
8588
8689 def visit_node_parameter (self , node_parameter : NodeParameter ) -> PreprocEntityDelta :
@@ -279,7 +282,6 @@ def perform_deletion():
279282 before_properties = before_properties ,
280283 after_properties = None ,
281284 )
282- # Register a Create for the next type.
283285 self ._process_event (
284286 ChangeAction .Modify ,
285287 name ,
@@ -288,7 +290,7 @@ def perform_deletion():
288290 resource_type = before .resource_type ,
289291 )
290292
291- self ._defer (perform_deletion )
293+ self ._defer_action (perform_deletion )
292294
293295 event = self ._execute_resource_action (
294296 action = ChangeAction .Add ,
@@ -332,7 +334,7 @@ def perform_deletion():
332334 resource_type = before .resource_type ,
333335 )
334336
335- self ._defer (perform_deletion )
337+ self ._defer_action (perform_deletion )
336338 elif not is_nothing (after ):
337339 # Case: addition
338340 self ._process_event (
0 commit comments