Skip to content

Commit aed7c30

Browse files
committed
fix pr suggestions and improve start loop
1 parent c03bb7d commit aed7c30

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

agent/agentcontainers/api.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,14 @@ func (api *API) start() {
152152
for {
153153
event, err := api.watcher.Next(api.ctx)
154154
if err != nil {
155-
if errors.Is(err, context.Canceled) {
155+
if errors.Is(err, watcher.ErrWatcherClosed) {
156156
api.logger.Debug(api.ctx, "watcher closed")
157157
return
158158
}
159+
if api.ctx.Err() != nil {
160+
api.logger.Debug(api.ctx, "api context canceled")
161+
return
162+
}
159163
api.logger.Error(api.ctx, "watcher error waiting for next event", slog.Error(err))
160164
continue
161165
}

agent/agentcontainers/watcher/watcher.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import (
1414
"golang.org/x/xerrors"
1515
)
1616

17+
var ErrWatcherClosed = xerrors.New("watcher closed")
18+
1719
// Watcher defines an interface for monitoring file system changes.
1820
// Implementations track file modifications and provide an event stream
1921
// that clients can consume to react to changes.
@@ -63,28 +65,36 @@ func (f *fsnotifyWatcher) Remove(file string) error {
6365
return nil
6466
}
6567

66-
func (f *fsnotifyWatcher) Next(ctx context.Context) (*fsnotify.Event, error) {
68+
func (f *fsnotifyWatcher) Next(ctx context.Context) (event *fsnotify.Event, err error) {
69+
defer func() {
70+
if ctx.Err() != nil {
71+
event = nil
72+
err = ctx.Err()
73+
}
74+
}()
75+
6776
select {
6877
case <-ctx.Done():
6978
return nil, ctx.Err()
7079
case event, ok := <-f.Events:
7180
if !ok {
72-
return nil, xerrors.New("watcher closed")
81+
return nil, ErrWatcherClosed
7382
}
7483
return &event, nil
7584
case err, ok := <-f.Errors:
7685
if !ok {
77-
return nil, xerrors.New("watcher closed")
86+
return nil, ErrWatcherClosed
7887
}
7988
return nil, xerrors.Errorf("watcher error: %w", err)
8089
case <-f.closed:
81-
return nil, xerrors.New("watcher closed")
90+
return nil, ErrWatcherClosed
8291
}
8392
}
8493

8594
func (f *fsnotifyWatcher) Close() (err error) {
95+
err = ErrWatcherClosed
8696
f.closeOnce.Do(func() {
87-
if err := f.Watcher.Close(); err != nil {
97+
if err = f.Watcher.Close(); err != nil {
8898
err = xerrors.Errorf("close watcher: %w", err)
8999
}
90100
close(f.closed)

0 commit comments

Comments
 (0)