Ensure cleanup of Stack in foreground deletion #760
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
There's two edge cases where a Stack could become stuck in a deleting state, and this PR addresses both.
Update
object. The stack controller processes the 'current update' (if any) before doing anything else. The stack keeps the name of the current update in its status block, and performs a lookup of the named Update object to check its progress. If the update doesn't exist, it assumes a cache miss and simply requeues. Let's imagine that the update was actually deleted, e.g. via cascading foreground delete. In that case, the stack freezes up.Workspace
object. The stack controller strictly handles workspace setup before kicking off an update, and doesn't re-create the workspace if it were to disappear while the update is in progress. If the workspace goes missing, e.g. due to foreground delete, then the Update blocks indefinitely and likewise does the Stack.An additional constraint is that completed
Update
objects serve as a useful historical record, and would ideally not be garbage-collected when the associatedWorkspace
is deleted. It is desirable that a user be able to delete an idle workspace, and one would not want to discard the history in that case.Proposed changes
Update
object, to ensure that it doesn't disappear while a Stack is waiting for its completion. Once complete, the finalizer is removed and the completed Update object is then targetable by a cleanup routine.Related issues (optional)
Closes #753