preserve worker last_seen on sparse updates (#439)

This commit is contained in:
Fedor Kororkov 2026-05-06 15:49:35 -04:00 committed by GitHub
parent 3083b541df
commit 324a352376
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 38 additions and 1 deletions

View File

@ -104,7 +104,9 @@ func (controller *Controller) updateWorker(ctx *gin.Context) responder.Responder
return responder.Error(err) return responder.Error(err)
} }
dbWorker.LastSeen = userWorker.LastSeen if !userWorker.LastSeen.IsZero() {
dbWorker.LastSeen = userWorker.LastSeen
}
dbWorker.SchedulingPaused = userWorker.SchedulingPaused dbWorker.SchedulingPaused = userWorker.SchedulingPaused
if err := txn.SetWorker(*dbWorker); err != nil { if err := txn.SetWorker(*dbWorker); err != nil {

View File

@ -174,6 +174,41 @@ func TestPortForwarding(t *testing.T) {
require.Contains(t, string(unameOutput), cases.Title(language.English).String(runtime.GOOS)) require.Contains(t, string(unameOutput), cases.Title(language.English).String(runtime.GOOS))
} }
func TestSparseWorkerUpdatePreservesLastSeen(t *testing.T) {
ctx := context.Background()
devClient, _, _ := devcontroller.StartIntegrationTestEnvironmentWithAdditionalOpts(
t,
false,
nil,
true,
nil,
)
lastSeen := time.Now().Add(-time.Minute).UTC().Truncate(time.Microsecond)
_, err := devClient.Workers().Create(ctx, v1.Worker{
Meta: v1.Meta{
Name: "sparse-update-worker",
},
LastSeen: lastSeen,
MachineID: "sparse-update-machine",
})
require.NoError(t, err)
_, err = devClient.Workers().Update(ctx, v1.Worker{
Meta: v1.Meta{
Name: "sparse-update-worker",
},
SchedulingPaused: true,
})
require.NoError(t, err)
worker, err := devClient.Workers().Get(ctx, "sparse-update-worker")
require.NoError(t, err)
require.Equal(t, lastSeen, worker.LastSeen)
require.True(t, worker.SchedulingPaused)
}
// TestSchedulerHealthCheckingNonExistentWorker ensures that scheduler // TestSchedulerHealthCheckingNonExistentWorker ensures that scheduler
// will eventually fail VMs that are scheduled on a worker that was // will eventually fail VMs that are scheduled on a worker that was
// deleted from the API. // deleted from the API.