Streamline run log and update handling
This commit is contained in:
+22
-6
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user