Skip to content

Commit ac05572

Browse files
committed
fix: Avoid sync retry if file/directory was not found
Signed-off-by: Suleiman Dibirov <idsulik@gmail.com>
1 parent a65fe4b commit ac05572

File tree

1 file changed

+35
-20
lines changed

1 file changed

+35
-20
lines changed

pkg/skaffold/runner/dev.go

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@ import (
2121
"fmt"
2222
"io"
2323
"strconv"
24+
"strings"
2425
"time"
2526

2627
"github.com/cenkalti/backoff/v4"
28+
"go.opentelemetry.io/otel/trace"
2729

2830
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/constants"
2931
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/event"
@@ -93,29 +95,16 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error {
9395
instrumentation.AddDevIteration("sync")
9496
meterUpdated = true
9597

96-
syncHandler := func(s *sync.Item) error {
97-
fileCount := len(s.Copy) + len(s.Delete)
98-
output.Default.Fprintf(out, "Syncing %d files for %s\n", fileCount, s.Image)
99-
fileSyncInProgress(fileCount, s.Image)
100-
101-
if err := r.deployer.GetSyncer().Sync(childCtx, out, s); err != nil {
102-
log.Entry(ctx).Warn("Skipping deploy due to sync error:", err)
103-
fileSyncFailed(fileCount, s.Image, err)
104-
event.DevLoopFailedInPhase(r.devIteration, constants.Sync, err)
105-
eventV2.TaskFailed(constants.DevLoop, err)
106-
endTrace(instrumentation.TraceEndError(err))
107-
108-
return err
109-
}
110-
111-
fileSyncSucceeded(fileCount, s.Image)
112-
113-
return nil
114-
}
98+
syncHandler := r.getSyncHandler(ctx, childCtx, out, endTrace)
11599
for _, s := range r.changeSet.NeedsResync() {
116100
err := backoff.Retry(
117101
func() error {
118-
return syncHandler(s)
102+
err := syncHandler(s)
103+
if err == nil || strings.Contains(err.Error(), "no such file or directory") {
104+
return nil
105+
}
106+
107+
return err
119108
}, backoff.WithContext(opts, childCtx),
120109
)
121110

@@ -232,6 +221,32 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error {
232221
return nil
233222
}
234223

224+
func (r *SkaffoldRunner) getSyncHandler(
225+
ctx, childCtx context.Context,
226+
out io.Writer,
227+
endTrace func(options ...trace.SpanEndOption),
228+
) func(s *sync.Item) error {
229+
return func(s *sync.Item) error {
230+
fileCount := len(s.Copy) + len(s.Delete)
231+
output.Default.Fprintf(out, "Syncing %d files for %s\n", fileCount, s.Image)
232+
fileSyncInProgress(fileCount, s.Image)
233+
234+
if err := r.deployer.GetSyncer().Sync(childCtx, out, s); err != nil {
235+
log.Entry(ctx).Warn("Skipping deploy due to sync error:", err)
236+
fileSyncFailed(fileCount, s.Image, err)
237+
event.DevLoopFailedInPhase(r.devIteration, constants.Sync, err)
238+
eventV2.TaskFailed(constants.DevLoop, err)
239+
endTrace(instrumentation.TraceEndError(err))
240+
241+
return err
242+
}
243+
244+
fileSyncSucceeded(fileCount, s.Image)
245+
246+
return nil
247+
}
248+
}
249+
235250
// Dev watches for changes and runs the skaffold build, test and deploy
236251
// config until interrupted by the user.
237252
func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*latest.Artifact) error {

0 commit comments

Comments
 (0)