From b855e33327f93d0ca387acd6c16c5945e772c5cb Mon Sep 17 00:00:00 2001 From: Adam Chalmers Date: Wed, 30 Dec 2020 13:48:19 -0600 Subject: [PATCH] TUN-3706: Quit if any origin service fails to start --- cmd/cloudflared/tunnel/cmd.go | 4 +++- ingress/ingress.go | 10 ++++++++-- origin/proxy_test.go | 4 ++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/cmd/cloudflared/tunnel/cmd.go b/cmd/cloudflared/tunnel/cmd.go index 8994e3ad..4c5a41b5 100644 --- a/cmd/cloudflared/tunnel/cmd.go +++ b/cmd/cloudflared/tunnel/cmd.go @@ -339,7 +339,9 @@ func StartServer( errC <- metrics.ServeMetrics(metricsListener, shutdownC, readinessCh, log) }() - ingressRules.StartOrigins(&wg, log, shutdownC, errC) + if err := ingressRules.StartOrigins(&wg, log, shutdownC, errC); err != nil { + return err + } reconnectCh := make(chan origin.ReconnectSignal, 1) if c.IsSet("stdin-control") { diff --git a/ingress/ingress.go b/ingress/ingress.go index dcf70ae1..eeaa2184 100644 --- a/ingress/ingress.go +++ b/ingress/ingress.go @@ -113,12 +113,18 @@ func (ing Ingress) IsEmpty() bool { } // StartOrigins will start any origin services managed by cloudflared, e.g. proxy servers or Hello World. -func (ing Ingress) StartOrigins(wg *sync.WaitGroup, log *zerolog.Logger, shutdownC <-chan struct{}, errC chan error) { +func (ing Ingress) StartOrigins( + wg *sync.WaitGroup, + log *zerolog.Logger, + shutdownC <-chan struct{}, + errC chan error, +) error { for _, rule := range ing.Rules { if err := rule.Service.start(wg, log, shutdownC, errC, rule.Config); err != nil { - log.Error().Msgf("Error starting local service %s: %s", rule.Service, err) + return errors.Wrapf(err, "Error starting local service %s", rule.Service) } } + return nil } // CatchAll returns the catch-all rule (i.e. the last rule) diff --git a/origin/proxy_test.go b/origin/proxy_test.go index 6e07a559..193764f0 100644 --- a/origin/proxy_test.go +++ b/origin/proxy_test.go @@ -123,7 +123,7 @@ func TestProxySingleOrigin(t *testing.T) { var wg sync.WaitGroup errC := make(chan error) - ingressRule.StartOrigins(&wg, &log, ctx.Done(), errC) + require.NoError(t, ingressRule.StartOrigins(&wg, &log, ctx.Done(), errC)) client := NewClient(ingressRule, testTags, &log) t.Run("testProxyHTTP", testProxyHTTP(t, client)) @@ -256,7 +256,7 @@ func TestProxyMultipleOrigins(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) errC := make(chan error) var wg sync.WaitGroup - ingress.StartOrigins(&wg, &log, ctx.Done(), errC) + require.NoError(t, ingress.StartOrigins(&wg, &log, ctx.Done(), errC)) client := NewClient(ingress, testTags, &log)