Skip to content

Commit

Permalink
watch: enable tar-based syncer by default (docker#10877)
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
milas authored Aug 4, 2023
1 parent b406b39 commit fd8ab2f
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 11 deletions.
26 changes: 18 additions & 8 deletions pkg/compose/watch.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
5 changes: 2 additions & 3 deletions pkg/e2e/watch_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"fmt"
"os"
"path/filepath"
"strconv"
"strings"
"sync/atomic"
"testing"
Expand Down Expand Up @@ -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...))
Expand Down

0 comments on commit fd8ab2f

Please sign in to comment.