Skip to content

Commit eff4920

Browse files
committed
fix: remove mutex from updateApp & updateSystem
1 parent e1943c8 commit eff4920

File tree

5 files changed

+34
-17
lines changed

5 files changed

+34
-17
lines changed

internal/ota/app.go

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,15 @@ package ota
22

33
import (
44
"context"
5-
"fmt"
65
"time"
7-
8-
"github.com/rs/zerolog"
96
)
107

118
const (
129
appUpdatePath = "/userdata/jetkvm/jetkvm_app.update"
1310
)
1411

15-
func (s *State) componentUpdateError(prefix string, err error, l *zerolog.Logger) error {
16-
if l == nil {
17-
l = s.l
18-
}
19-
l.Error().Err(err).Msg(prefix)
20-
s.error = fmt.Sprintf("%s: %v", prefix, err)
21-
return err
22-
}
23-
12+
// DO NOT call it directly, it's not thread safe
13+
// Mutex is currently held by the caller, e.g. doUpdate
2414
func (s *State) updateApp(ctx context.Context, appUpdate *componentUpdateStatus) error {
2515
l := s.l.With().Str("path", appUpdatePath).Logger()
2616

internal/ota/errors.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,22 @@
11
package ota
22

3-
import "errors"
3+
import (
4+
"errors"
5+
"fmt"
6+
7+
"github.com/rs/zerolog"
8+
)
49

510
var (
611
// ErrVersionNotFound is returned when the specified version is not found
712
ErrVersionNotFound = errors.New("specified version not found")
813
)
14+
15+
func (s *State) componentUpdateError(prefix string, err error, l *zerolog.Logger) error {
16+
if l == nil {
17+
l = s.l
18+
}
19+
l.Error().Err(err).Msg(prefix)
20+
s.error = fmt.Sprintf("%s: %v", prefix, err)
21+
return err
22+
}

internal/ota/ota.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,8 @@ func (s *State) doUpdate(ctx context.Context, params UpdateParams) error {
171171
s.triggerComponentUpdateState("system", systemUpdate)
172172
}
173173

174+
scopedLogger.Trace().Bool("pending", appUpdate.pending).Msg("Checking for app update")
175+
174176
if appUpdate.pending {
175177
scopedLogger.Info().
176178
Str("url", appUpdate.url).
@@ -184,6 +186,8 @@ func (s *State) doUpdate(ctx context.Context, params UpdateParams) error {
184186
scopedLogger.Info().Msg("App is up to date")
185187
}
186188

189+
scopedLogger.Trace().Bool("pending", systemUpdate.pending).Msg("Checking for system update")
190+
187191
if systemUpdate.pending {
188192
if err := s.updateSystem(ctx, systemUpdate); err != nil {
189193
return s.componentUpdateError("Error updating system", err, &scopedLogger)

internal/ota/sys.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,9 @@ const (
1111
systemUpdatePath = "/userdata/jetkvm/update_system.tar"
1212
)
1313

14+
// DO NOT call it directly, it's not thread safe
15+
// Mutex is currently held by the caller, e.g. doUpdate
1416
func (s *State) updateSystem(ctx context.Context, systemUpdate *componentUpdateStatus) error {
15-
s.mu.Lock()
16-
defer s.mu.Unlock()
17-
1817
l := s.l.With().Str("path", systemUpdatePath).Logger()
1918

2019
if err := s.downloadFile(ctx, systemUpdatePath, systemUpdate.url, "system"); err != nil {

internal/ota/utils.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ func syncFilesystem() error {
2626
}
2727

2828
func (s *State) downloadFile(ctx context.Context, path string, url string, component string) error {
29+
logger := s.l.With().Str("path", path).Str("url", url).Str("component", component).Logger()
30+
31+
logger.Trace().Msg("downloading file")
32+
2933
componentUpdate, ok := s.componentUpdateStatuses[component]
3034
if !ok {
3135
return fmt.Errorf("component %s not found", component)
@@ -34,30 +38,35 @@ func (s *State) downloadFile(ctx context.Context, path string, url string, compo
3438
downloadProgress := componentUpdate.downloadProgress
3539

3640
if _, err := os.Stat(path); err == nil {
41+
logger.Trace().Msg("removing existing file")
3742
if err := os.Remove(path); err != nil {
3843
return fmt.Errorf("error removing existing file: %w", err)
3944
}
4045
}
4146

4247
unverifiedPath := path + ".unverified"
4348
if _, err := os.Stat(unverifiedPath); err == nil {
49+
logger.Trace().Msg("removing existing unverified file")
4450
if err := os.Remove(unverifiedPath); err != nil {
4551
return fmt.Errorf("error removing existing unverified file: %w", err)
4652
}
4753
}
4854

55+
logger.Trace().Msg("creating unverified file")
4956
file, err := os.Create(unverifiedPath)
5057
if err != nil {
5158
return fmt.Errorf("error creating file: %w", err)
5259
}
5360
defer file.Close()
5461

62+
logger.Trace().Msg("creating request")
5563
req, err := http.NewRequestWithContext(ctx, "GET", url, nil)
5664
if err != nil {
5765
return fmt.Errorf("error creating request: %w", err)
5866
}
5967

6068
client := s.client()
69+
logger.Trace().Msg("starting download")
6170
resp, err := client.Do(req)
6271
if err != nil {
6372
return fmt.Errorf("error downloading file: %w", err)
@@ -100,15 +109,16 @@ func (s *State) downloadFile(ctx context.Context, path string, url string, compo
100109
}
101110
}
102111

112+
logger.Trace().Msg("download finished")
103113
file.Close()
104114

115+
logger.Trace().Msg("syncing filesystem")
105116
if err := syncFilesystem(); err != nil {
106117
return fmt.Errorf("error syncing filesystem: %w", err)
107118
}
108119

109120
return nil
110121
}
111-
112122
func (s *State) verifyFile(path string, expectedHash string, verifyProgress *float32) error {
113123
l := s.l.With().Str("path", path).Logger()
114124

0 commit comments

Comments
 (0)