From fd8ab2f7ac0bc19ff32cf9b1ba8a3e913f14d7dd Mon Sep 17 00:00:00 2001 From: Milas Bowman Date: Fri, 4 Aug 2023 16:58:01 -0400 Subject: [PATCH] watch: enable tar-based syncer by default (#10877) Swap the default implementation now that batching is merged. Keeping the `docker cp` based implementation around for the moment, but it needs to be _explicitly_ disabled now by setting `COMPOSE_EXPERIMENTAL_WATCH_TAR=0`. After the next release, we should remove the `docker cp` implementation entirely. Signed-off-by: Milas Bowman --- pkg/compose/watch.go | 26 ++++++++++++++++++-------- pkg/e2e/watch_test.go | 5 ++--- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/pkg/compose/watch.go b/pkg/compose/watch.go index cc61878fafa..7d7ba4c58a2 100644 --- a/pkg/compose/watch.go +++ b/pkg/compose/watch.go @@ -67,22 +67,32 @@ type fileEvent struct { Action WatchAction } +// getSyncImplementation returns the the tar-based syncer unless it has been explicitly +// disabled with `COMPOSE_EXPERIMENTAL_WATCH_TAR=0`. Note that the absence of the env +// var means enabled. +func (s *composeService) getSyncImplementation(project *types.Project) sync.Syncer { + var useTar bool + if useTarEnv, ok := os.LookupEnv("COMPOSE_EXPERIMENTAL_WATCH_TAR"); ok { + useTar, _ = strconv.ParseBool(useTarEnv) + } else { + useTar = true + } + if useTar { + return sync.NewTar(project.Name, tarDockerClient{s: s}) + } + + return sync.NewDockerCopy(project.Name, s, s.stdinfo()) +} + func (s *composeService) Watch(ctx context.Context, project *types.Project, services []string, _ api.WatchOptions) error { //nolint: gocyclo _, err := s.prepareProjectForBuild(project, nil) if err != nil { return err } - var syncer sync.Syncer - if useTar, _ := strconv.ParseBool(os.Getenv("COMPOSE_EXPERIMENTAL_WATCH_TAR")); useTar { - syncer = sync.NewTar(project.Name, tarDockerClient{s: s}) - } else { - syncer = sync.NewDockerCopy(project.Name, s, s.stdinfo()) - } - if err := project.ForServices(services); err != nil { return err } - + syncer := s.getSyncImplementation(project) eg, ctx := errgroup.WithContext(ctx) watching := false for i := range project.Services { diff --git a/pkg/e2e/watch_test.go b/pkg/e2e/watch_test.go index 9d609724ba1..c109831eb23 100644 --- a/pkg/e2e/watch_test.go +++ b/pkg/e2e/watch_test.go @@ -20,6 +20,7 @@ import ( "fmt" "os" "path/filepath" + "strconv" "strings" "sync/atomic" "testing" @@ -73,9 +74,7 @@ func doTest(t *testing.T, svcName string, tarSync bool) { env := []string{ "COMPOSE_FILE=" + composeFilePath, "COMPOSE_PROJECT_NAME=" + projName, - } - if tarSync { - env = append(env, "COMPOSE_EXPERIMENTAL_WATCH_TAR=1") + "COMPOSE_EXPERIMENTAL_WATCH_TAR=" + strconv.FormatBool(tarSync), } cli := NewCLI(t, WithEnv(env...))