Streamline run log and update handling

This commit is contained in:
npc0-hue
2026-09-03 18:24:39 +08:00
parent 330b1c0130
commit 26c07e232d
3 changed files with 59 additions and 8 deletions
+22 -6
View File
@@ -27,6 +27,7 @@ const (
maxSelfUpdateBytes = int64(512 * 1024 * 1024)
maxSelfUpdateEntries = 8
defaultUpdateHealthWait = 30 * time.Second
selfUpdateProgressEvery = int64(8 * 1024 * 1024)
)
var ErrSelfUpdateRestartRequested = errors.New("Run self-update restart requested")
@@ -217,6 +218,20 @@ func (worker *Worker) downloadRunUpdate(ctx context.Context, assignment protocol
if _, err := file.Seek(offset, io.SeekStart); err != nil {
return err
}
manifest.DownloadedBytes = offset
lastPersistedOffset := offset
persistProgress := func(force bool) error {
if !force && offset < input.SizeBytes && offset-lastPersistedOffset < selfUpdateProgressEvery {
return nil
}
manifest.DownloadedBytes = offset
manifest.UpdatedAt = time.Now().UTC()
if err := persistSelfUpdateManifest(manifestPath, *manifest); err != nil {
return err
}
lastPersistedOffset = offset
return nil
}
for offset < input.SizeBytes {
if ctx.Err() != nil {
return ctx.Err()
@@ -239,16 +254,17 @@ func (worker *Worker) downloadRunUpdate(ctx context.Context, assignment protocol
if _, err := file.Write(chunk.Payload); err != nil {
return err
}
if err := file.Sync(); err != nil {
return err
}
offset += int64(len(chunk.Payload))
manifest.DownloadedBytes = offset
manifest.UpdatedAt = time.Now().UTC()
if err := persistSelfUpdateManifest(manifestPath, *manifest); err != nil {
if err := persistProgress(false); err != nil {
return err
}
}
if err := file.Sync(); err != nil {
return err
}
if err := persistProgress(true); err != nil {
return err
}
if err := file.Close(); err != nil {
return err
}