Skip to content

Conversation

ssncferreira
Copy link
Contributor

@ssncferreira ssncferreira commented Aug 8, 2025

Description

This PR ensures that lifecycle-related changes made via template schedule updates do not affect prebuilt workspaces. Since prebuilds are managed by the reconciliation loop and do not participate in the regular lifecycle executor flow, they must be excluded from any updates triggered by template configuration changes.

This includes changes to TTL, dormant-deletion scheduling, deadline and autostart scheduling.

Changes

  • Updated SQL query UpdateWorkspacesTTLByTemplateID to exclude prebuilt workspaces
  • Updated SQL query UpdateWorkspacesDormantDeletingAtByTemplateID to exclude prebuilt workspaces
  • Updated application-layer logic to skip any updates to lifecycle parameters if a workspace is a prebuild
  • Preserved all existing update behavior for regular user workspaces

This change guarantees that only lifecycle-managed workspaces are affected when template-level configurations are modified, preserving strict boundaries between prebuild and user workspace lifecycles.

Related with:

ssncferreira added a commit that referenced this pull request Aug 13, 2025
## Description

This PR ensures that prebuilt workspaces are properly excluded from the
lifecycle executor and treated as a separate class of workspaces, fully
managed by the prebuild reconciliation loop.

It introduces two lifecycle guarantees:
* When a prebuilt workspace is created (i.e., when the workspace build
completes), all lifecycle-related fields are unset, ensuring the
workspace does not participate in TTL, autostop, autostart, dormancy, or
auto-deletion logic.
* When a prebuilt workspace is claimed, it transitions into a regular
user workspace. At this point, all lifecycle fields are correctly
populated according to template-level configurations, allowing the
workspace to be managed by the lifecycle executor as expected.

## Changes

* Prebuilt workspaces now have all lifecycle-relevant fields unset
during creation
* When a prebuild is claimed:
* Lifecycle fields are set based on template and workspace level
configurations. This ensures a clean transition into the standard
workspace lifecycle flow.
* Updated lifecycle-related SQL update queries to explicitly exclude
prebuilt workspaces.

## Relates 

Related issue: #18898

To reduce the scope of this PR and make the review process more
manageable, the original implementation has been split into the
following focused PRs:
* #19259
* #19263
* #19264
* #19265

These PRs should be considered in conjunction with this one to
understand the complete set of lifecycle separation changes for prebuilt
workspaces.
@ssncferreira ssncferreira force-pushed the ssncferreira/fix-template-update-ignore-prebuilds branch from b08282a to 10fcd6e Compare August 13, 2025 18:12
@ssncferreira ssncferreira marked this pull request as ready for review August 18, 2025 18:06
Copy link
Member

@johnstcn johnstcn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, I see existing tests as well in enterprise/coderd/workspaces_test.go relating to testing dormancy deletion only after claiming.

@ssncferreira
Copy link
Contributor Author

LGTM, I see existing tests as well in enterprise/coderd/workspaces_test.go relating to testing dormancy deletion only after claiming.

The other tests in workspace_test.go focus on the claiming process, ensuring that all lifecycle parameters are properly initialized when a prebuild is claimed. By contrast, these tests cover template scheduling updates, verifying that lifecycle parameters are updated on workspaces only after they have been claimed.

@ssncferreira ssncferreira merged commit d79a779 into main Aug 19, 2025
35 checks passed
@ssncferreira ssncferreira deleted the ssncferreira/fix-template-update-ignore-prebuilds branch August 19, 2025 12:08
@github-actions github-actions bot locked and limited conversation to collaborators Aug 19, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants