-
Notifications
You must be signed in to change notification settings - Fork 974
fix: prevent activity bump for prebuilt workspaces #19263
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
also missing tests here
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you check the EXPLAIN
output before and after?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The query already filters by workspace_id
, so the owner_id
predicate is evaluated only after fetching that single row. This means there should be no measurable performance difference.
EXPLAIN
output:
- (before) without prebuild filter: https://explain.dalibo.com/plan/39481703a318fe5b
- (after) with prebuild filter: https://explain.dalibo.com/plan/703fb838d76g86d8
if allowed { | ||
nextAutostart = next | ||
// Prebuilds are not subject to activity-based deadline bumps | ||
if !workspace.IsPrebuild() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
suggestion: invert the logic and continue / return early
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Initially, that was my approach, but this function seems to do a lot of things:
- Update agent stats
- Update prometheus metrics (for observability)
- Activity bump (for lifecycle management)
- Bump workspace
last_used_at
(for usage tracking) - Send
stats_update
notify event (AFAIU this is related with real-time updates on the UI regarding the workspace).
Therefore, I kept all these updates except the activity bump since it was the only related with lifecycle parameters. For the case of prebuilds I believe it should be all or nothing, either this approach or we check if it is a prebuild in the beginning of the function and return early. Not sure what is the workflow that makes more sense here for prebuilds.
## 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.
…vity-bump-prebuilds
…vity-bump-prebuilds
…vity-bump-prebuilds
…vity-bump-prebuilds
Description
This PR ensures that activity-based deadline extensions ("activity bumping") are not applied to prebuilt workspaces. Prebuilds are managed by the reconciliation loop and must not have
deadline
ormax_deadline
values set or extended, as they are not part of the regular lifecycle executor path.Changes
ActivityBumpWorkspace
SQL query to discard prebuilt workspacesRelated with: