Skip to content

Commit ed5362a

Browse files
committed
Simplify daemon error handling and remove unused code.
Signed-off-by: Thomas Hallgren <thomas@tada.se>
1 parent 33e772a commit ed5362a

File tree

9 files changed

+55
-55
lines changed

9 files changed

+55
-55
lines changed

integration_test/tls_test.go

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"context"
55
"fmt"
66
"path/filepath"
7+
"regexp"
8+
"strings"
79
"sync"
810
"time"
911

@@ -200,25 +202,30 @@ func (s *dockerDaemonSuite) Test_TLSAnnotations() {
200202
rq.True(len(si.UserDaemon.Intercepts) == 1)
201203
rq.Equal(si.UserDaemon.Intercepts[0].Name, ttSvc)
202204

203-
args := []string{"curl", "--max-time", "2", "-s", "-w", "\nStatus: %{http_code}\n", "-k"}
204-
if tt.header != "" {
205-
args = append(args, "-H", tt.header)
206-
}
207-
args = append(args, fmt.Sprintf("https://%s", ttSvc))
208-
so, se, err := itest.Telepresence(ctx, args...)
209-
s.NoError(err)
210-
if se != "" {
211-
clog.Error(ctx, se)
212-
}
213-
if tt.errorPattern != "" {
214-
s.Regexp(tt.errorPattern, so)
215-
} else {
216-
s.Contains(so, "HTTP/2.0 GET /")
217-
}
218-
clog.Info(ctx, so)
205+
rq.EventuallyContext(ctx, func() bool {
206+
args := []string{"curl", "--max-time", "2", "-s", "-w", "\nStatus: %{http_code}\n", "-k"}
207+
if tt.header != "" {
208+
args = append(args, "-H", tt.header)
209+
}
210+
args = append(args, fmt.Sprintf("https://%s", ttSvc))
211+
so, se, err := itest.Telepresence(ctx, args...)
212+
if err != nil {
213+
if se != "" {
214+
clog.Error(ctx, se)
215+
}
216+
clog.Error(ctx, err)
217+
return false
218+
}
219+
clog.Info(ctx, so)
220+
if tt.errorPattern != "" {
221+
ok, err := regexp.MatchString(tt.errorPattern, so)
222+
return err == nil && ok
223+
}
224+
return strings.Contains(so, "HTTP/2.0 GET /")
225+
}, 10*time.Second, 3*time.Second, "expected curl response never arrived")
219226

220227
// Terminate the ongoing intercept
221-
so, se, err = itest.Telepresence(ctx, "leave", ttSvc)
228+
so, se, err := itest.Telepresence(ctx, "leave", ttSvc)
222229
if so != "" {
223230
clog.Info(ctx, so)
224231
}

pkg/client/cli/cmd/version.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,13 +141,13 @@ func managerVersion(ctx context.Context) (*common.VersionInfo, error) {
141141
mv, err := userD.TrafficManagerVersion(ctx, &empty.Empty{})
142142
return mv, tpGrpc.FromGRPC(err)
143143
}
144-
return nil, connect.ErrNoUserDaemon
144+
return nil, daemon.ErrNoUserDaemon
145145
}
146146

147147
func trafficAgentFQN(ctx context.Context) (*manager.AgentImageFQN, error) {
148148
if userD := daemon.GetUserClient(ctx); userD != nil {
149149
ai, err := userD.AgentImageFQN(ctx, &empty.Empty{})
150150
return ai, tpGrpc.FromGRPC(err)
151151
}
152-
return nil, connect.ErrNoUserDaemon
152+
return nil, daemon.ErrNoUserDaemon
153153
}

pkg/client/cli/connect/connector.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ import (
4444
"github.com/telepresenceio/telepresence/v2/pkg/types"
4545
)
4646

47-
var ErrNoUserDaemon = errors.New("telepresence user daemon is not running")
48-
4947
//nolint:gochecknoglobals // extension point
5048
var QuitDaemonFuncs = []func(context.Context){
5149
quitHostConnector, quitDockerDaemons,
@@ -83,7 +81,7 @@ func findHostConnectorInfo(ctx context.Context) (*daemon.Info, error) {
8381
return info, nil
8482
}
8583
}
86-
return nil, fs.ErrNotExist
84+
return nil, fmt.Errorf("unable to find host connector info: %w", fs.ErrNotExist)
8785
}
8886

8987
func quitHostConnector(ctx context.Context) {
@@ -158,7 +156,7 @@ func EnsureUserDaemon(ctx context.Context, required bool) (rc context.Context, e
158156
// The RootDaemon must be started if the UserDaemon was started
159157
err = EnsureRootDaemonRunning(ctx)
160158
}
161-
if err != nil && !(errors.Is(err, ErrNoUserDaemon) && !required) {
159+
if err != nil && !(errors.Is(err, daemon.ErrNoUserDaemon) && !required) {
162160
err = progress.MaybeWriteError(ctx, err)
163161
} else if launched {
164162
progress.PrintDone(ctx, "Launched Daemon")
@@ -481,7 +479,7 @@ func findOrLaunchConnectorDaemon(ctx context.Context, daemonID *daemon.Identifie
481479
return ctx, false, errcat.NoDaemonLogs.New(err)
482480
}
483481
if !required {
484-
return ctx, false, ErrNoUserDaemon
482+
return ctx, false, daemon.ErrNoUserDaemon
485483
}
486484
ctx = progress.WithEventId(ctx, daemonID.Name)
487485
progress.Working(ctx, "Launching Daemon")

pkg/client/cli/connect/init_command.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func InitCommand(cmd *cobra.Command) (err error) {
6262
progressStarted = true
6363
ctx, err = EnsureUserDaemon(ctx, v == ann.Required)
6464
if err != nil {
65-
if v == ann.Optional && (errors.Is(err, ErrNoUserDaemon) || errcat.GetCategory(err) == errcat.Config) {
65+
if v == ann.Optional && (errors.Is(err, daemon.ErrNoUserDaemon) || errcat.GetCategory(err) == errcat.Config) {
6666
// This is OK, but further initialization is not possible
6767
err = nil
6868
}

pkg/client/cli/daemon/dial.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ const InfoFileName = "daemon.json"
1111

1212
var ErrNoRootDaemon = errors.New("telepresence root daemon is not running")
1313

14+
var ErrNoUserDaemon = errors.New("telepresence user daemon is not running")
15+
1416
func DialRootDaemon(ctx context.Context, waitForConnect bool) (conn *grpc.ClientConn, err error) {
1517
if ri, err := LoadRootServiceInfo(ctx); err == nil {
1618
return dialDaemon(ctx, "root", ri.DaemonPort)

pkg/client/cli/daemon/info.go

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -194,16 +194,26 @@ func (il *InfoLoader[T]) DialDaemon(ctx context.Context, waitForConnect bool) (c
194194
}
195195
defer cancel()
196196
if err != nil {
197-
return nil, fs.ErrNotExist
197+
return nil, err
198198
}
199+
200+
var daemonName string
201+
var daemonPort uint16
199202
if ii, ok := any(info).(*Info); ok {
200-
conn, err = dialDaemon(ctx, "user", ii.DaemonPort)
203+
daemonName = "user"
204+
daemonPort = ii.DaemonPort
201205
} else {
202-
conn, err = dialDaemon(ctx, "root", (any(info).(*RootInfo)).DaemonPort)
206+
daemonName = "root"
207+
daemonPort = (any(info).(*RootInfo)).DaemonPort
203208
}
209+
conn, err = dialDaemon(ctx, daemonName, daemonPort)
204210
if errors.Is(err, context.DeadlineExceeded) && !waitForConnect {
205211
// A race may occur where the daemon is shutting down. We found the info file, but the daemon has since stopped responding.
206-
err = fs.ErrNotExist
212+
if daemonName == "user" {
213+
err = ErrNoUserDaemon
214+
} else {
215+
err = ErrNoRootDaemon
216+
}
207217
}
208218
return conn, err
209219
}
@@ -252,7 +262,7 @@ func (il *InfoLoader[T]) deleteIfStale(name string, fi fs.FileInfo) error {
252262
if err := cache.DeleteFromUserCache(il.ctx, name); err != nil {
253263
return err
254264
}
255-
return fs.ErrNotExist
265+
return fmt.Errorf("%s: %w (file stale and removed)", name, fs.ErrNotExist)
256266
}
257267
return nil
258268
}
@@ -306,7 +316,12 @@ func (il *InfoLoader[T]) LoadMatchingInfo(match *regexp.Regexp) (*T, error) {
306316
}
307317
switch len(infos) {
308318
case 0:
309-
return nil, os.ErrNotExist
319+
if match == nil {
320+
err = fmt.Errorf("unable to find daemon info matching %s: %w", match, os.ErrNotExist)
321+
} else {
322+
err = fmt.Errorf("unable to find daemon info: %w", os.ErrNotExist)
323+
}
324+
return nil, err
310325
case 1:
311326
return infos[0], nil
312327
default:

pkg/client/cli/docker/compose/config.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"github.com/telepresenceio/clog"
2121
"github.com/telepresenceio/telepresence/cmd/cobraparser/v2/generate"
2222
"github.com/telepresenceio/telepresence/cmd/cobraparser/v2/types"
23-
"github.com/telepresenceio/telepresence/v2/pkg/client/cli/connect"
2423
"github.com/telepresenceio/telepresence/v2/pkg/client/cli/daemon"
2524
"github.com/telepresenceio/telepresence/v2/pkg/client/cli/flags"
2625
"github.com/telepresenceio/telepresence/v2/pkg/client/cli/global"
@@ -256,7 +255,7 @@ func (c *config) run(cmd *cobra.Command) (err error) {
256255
progress.Start(ctx, "Connecting")
257256
existingComposeFile, err := c.connect(ctx, es, connections)
258257
if err != nil {
259-
if c.mustBeConnected && errors.Is(err, connect.ErrNoUserDaemon) {
258+
if c.mustBeConnected && errors.Is(err, daemon.ErrNoUserDaemon) {
260259
// The daemon is not running, although the command expects it to. This means that no services should be running either.
261260
// So let's just run the command without any extensions so that docker compose produces the expected error output.
262261
err = tr.runCommand(ctx, name)

pkg/client/cli/docker/runner.go

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515
"sync/atomic"
1616
"time"
1717

18-
"github.com/cenkalti/backoff/v4"
1918
"github.com/containerd/errdefs"
2019

2120
"github.com/telepresenceio/clog"
@@ -314,23 +313,3 @@ func EnsureStopContainer(ctx context.Context, name, containerID string, volumes
314313
}
315314
done <- err
316315
}
317-
318-
// ReadContainerID reads the containerID that docker run --cidfile <cidfils> writes to a file, and then
319-
// removes the file. It returns fs.ErrNotExist if no such file has been produced within 200 ms.
320-
func ReadContainerID(ctx context.Context, cidFile string) (containerID string, err error) {
321-
defer func() {
322-
_ = os.Remove(cidFile)
323-
}()
324-
err = backoff.Retry(func() error {
325-
cid, err := os.ReadFile(cidFile)
326-
if err != nil {
327-
return err
328-
}
329-
if len(cid) == 0 {
330-
return fs.ErrNotExist
331-
}
332-
containerID = string(cid)
333-
return nil
334-
}, backoff.WithContext(backoff.WithMaxRetries(backoff.NewConstantBackOff(10*time.Millisecond), 200), ctx))
335-
return containerID, err
336-
}

pkg/client/docker/daemon.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ func readPortFile(ctx context.Context, portFile string, configFiles []string) (u
274274
if err := os.Remove(portFile); err != nil {
275275
return 0, err
276276
}
277-
return 0, os.ErrNotExist
277+
return 0, fmt.Errorf("%s: %w", portFile, os.ErrNotExist)
278278
}
279279

280280
func startAuthenticatorService(ctx context.Context, portFile string, kubeFlags map[string]string, configFiles []string) (uint16, error) {

0 commit comments

Comments
 (0)