From d9fd399e43462d53990787fc9ed93081feee8851 Mon Sep 17 00:00:00 2001 From: yusing Date: Sun, 22 Sep 2024 05:01:36 +0800 Subject: [PATCH] fix stuck loading in some scenerios for ls-* command line options --- src/config/config.go | 2 +- src/main.go | 7 ++++--- src/proxy/provider/provider.go | 11 +++++++---- src/watcher/docker_watcher.go | 2 +- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/config/config.go b/src/config/config.go index 3b05e29..1fdbcfc 100644 --- a/src/config/config.go +++ b/src/config/config.go @@ -249,7 +249,7 @@ func (cfg *Config) loadProviders(providers *M.ProxyProviders) (res E.NestedError for name, dockerHost := range providers.Docker { p, err := PR.NewDockerProvider(name, dockerHost) if err != nil { - b.Add(err.Subject(dockerHost)) + b.Add(err.Subjectf("%s (%s)", name, dockerHost)) continue } cfg.proxyProviders.Store(p.GetName(), p) diff --git a/src/main.go b/src/main.go index 1b0bac2..0a62db0 100755 --- a/src/main.go +++ b/src/main.go @@ -80,8 +80,6 @@ func main() { return } - cfg.StartProxyProviders() - if args.Command == common.CommandListRoutes { printJSON(cfg.RoutesByAlias()) return @@ -92,6 +90,8 @@ func main() { return } + cfg.StartProxyProviders() + if err.HasError() { l.Warn(err) } @@ -177,10 +177,11 @@ func main() { close(done) }() + timeout := time.After(time.Duration(cfg.Value().TimeoutShutdown) * time.Second) select { case <-done: logrus.Info("shutdown complete") - case <-time.After(time.Duration(cfg.Value().TimeoutShutdown) * time.Second): + case <-timeout: logrus.Info("timeout waiting for shutdown") } } diff --git a/src/proxy/provider/provider.go b/src/proxy/provider/provider.go index 1910c1e..54ff119 100644 --- a/src/proxy/provider/provider.go +++ b/src/proxy/provider/provider.go @@ -143,10 +143,13 @@ func (p *Provider) GetRoute(alias string) (R.Route, bool) { } func (p *Provider) LoadRoutes() E.NestedError { - routes, err := p.LoadRoutesImpl() - p.routes = routes - p.l.Infof("loaded %d routes", routes.Size()) - return err + var err E.NestedError + p.routes, err = p.LoadRoutesImpl() + if p.routes.Size() > 0 { + p.l.Infof("loaded %d routes", p.routes.Size()) + return err + } + return E.FailWith("loading routes", err) } func (p *Provider) watchEvents() { diff --git a/src/watcher/docker_watcher.go b/src/watcher/docker_watcher.go index 942e46f..9135c95 100644 --- a/src/watcher/docker_watcher.go +++ b/src/watcher/docker_watcher.go @@ -72,9 +72,9 @@ func (w DockerWatcher) EventsWithOptions(ctx context.Context, options DockerList if !w.client.Connected() { var err E.NestedError + attempts := 0 for { w.client, err = D.ConnectClient(w.host) - attempts := 0 if err != nil { break }