mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
fix: exclude provisioner_state from workspace_build_with_user view (#22159)
The provisioner state for a workspace build was being loaded for every long-lived agent rpc connection. Since this state can be anywhere from kilobytes to megabytes this can gradually cause the `coderd` memory footprint to grow over time. It's also a lot of unnecessary allocations for every query that fetches a workspace build since only a few callers ever actually reference the provisioner state. This PR removes it from the returned workspace build and adds a query to fetch the provisioner state explicitly.
This commit is contained in:
@@ -725,11 +725,16 @@ func (s *server) acquireProtoJob(ctx context.Context, job database.ProvisionerJo
|
||||
}
|
||||
}
|
||||
|
||||
provisionerStateRow, err := s.Database.GetWorkspaceBuildProvisionerStateByID(ctx, workspaceBuild.ID)
|
||||
if err != nil {
|
||||
return nil, failJob(fmt.Sprintf("get workspace build provisioner state: %s", err))
|
||||
}
|
||||
|
||||
protoJob.Type = &proto.AcquiredJob_WorkspaceBuild_{
|
||||
WorkspaceBuild: &proto.AcquiredJob_WorkspaceBuild{
|
||||
WorkspaceBuildId: workspaceBuild.ID.String(),
|
||||
WorkspaceName: workspace.Name,
|
||||
State: workspaceBuild.ProvisionerState,
|
||||
State: provisionerStateRow.ProvisionerState,
|
||||
RichParameterValues: convertRichParameterValues(workspaceBuildParameters),
|
||||
PreviousParameterValues: convertRichParameterValues(lastWorkspaceBuildParameters),
|
||||
VariableValues: asVariableValues(templateVariables),
|
||||
|
||||
@@ -1321,7 +1321,9 @@ func TestFailJob(t *testing.T) {
|
||||
<-publishedLogs
|
||||
build, err := db.GetWorkspaceBuildByID(ctx, buildID)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "some state", string(build.ProvisionerState))
|
||||
provisionerStateRow, err := db.GetWorkspaceBuildProvisionerStateByID(ctx, build.ID)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "some state", string(provisionerStateRow.ProvisionerState))
|
||||
require.Len(t, auditor.AuditLogs(), 1)
|
||||
|
||||
// Assert that the workspace_id field get populated
|
||||
|
||||
Reference in New Issue
Block a user