From ae03057c03ca6b8543c93a4b3938ba06dad41571 Mon Sep 17 00:00:00 2001 From: Eric Biagiotti Date: Thu, 26 Sep 2019 10:22:12 -0400 Subject: [PATCH] 14714: Removes context from Server functions. Adds sync.Once to setup Arvados-DCO-1.1-Signed-off-by: Eric Biagiotti --- services/keep-balance/balance_run_test.go | 3 +- services/keep-balance/main.go | 8 ++++- services/keep-balance/server.go | 40 ++++++++++------------- 3 files changed, 26 insertions(+), 25 deletions(-) diff --git a/services/keep-balance/balance_run_test.go b/services/keep-balance/balance_run_test.go index 1478e6e2ef..3ef3b00077 100644 --- a/services/keep-balance/balance_run_test.go +++ b/services/keep-balance/balance_run_test.go @@ -5,7 +5,6 @@ package main import ( - "context" "encoding/json" "fmt" "io" @@ -319,7 +318,7 @@ func (s *runSuite) newServer(options *RunOptions) *Server { Logger: options.Logger, Dumper: options.Dumper, } - srv.init(context.Background()) + srv.setup() return srv } diff --git a/services/keep-balance/main.go b/services/keep-balance/main.go index 606fde4984..92ed644b59 100644 --- a/services/keep-balance/main.go +++ b/services/keep-balance/main.go @@ -41,14 +41,20 @@ func newHandler(ctx context.Context, cluster *arvados.Cluster, _ string) service debugf = log.Printf } + if options.Logger == nil { + options.Logger = ctxlog.FromContext(ctx) + } + srv := &Server{ Cluster: cluster, ArvClient: ac, RunOptions: options, Metrics: newMetrics(), + Logger: options.Logger, + Dumper: options.Dumper, } - go srv.Start(ctx) + srv.Start() return srv } diff --git a/services/keep-balance/server.go b/services/keep-balance/server.go index 23e597c89e..3e665a30d5 100644 --- a/services/keep-balance/server.go +++ b/services/keep-balance/server.go @@ -5,16 +5,15 @@ package main import ( - "context" "net/http" "os" "os/signal" + "sync" "syscall" "time" "git.curoverse.com/arvados.git/sdk/go/arvados" "git.curoverse.com/arvados.git/sdk/go/auth" - "git.curoverse.com/arvados.git/sdk/go/ctxlog" "github.com/julienschmidt/httprouter" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/sirupsen/logrus" @@ -48,6 +47,7 @@ type Server struct { Metrics *metrics httpHandler http.Handler + setupOnce sync.Once Logger logrus.FieldLogger Dumper logrus.FieldLogger @@ -64,28 +64,12 @@ func (srv *Server) CheckHealth() error { } // Start sets up and runs the balancer. -func (srv *Server) Start(ctx context.Context) { - srv.init(ctx) - - var err error - if srv.RunOptions.Once { - _, err = srv.runOnce() - } else { - err = srv.runForever(nil) - } - if err != nil { - srv.Logger.Error(err) - } +func (srv *Server) Start() { + srv.setupOnce.Do(srv.setup) + go srv.run() } -func (srv *Server) init(ctx context.Context) { - if srv.RunOptions.Logger == nil { - srv.RunOptions.Logger = ctxlog.FromContext(ctx) - } - - srv.Logger = srv.RunOptions.Logger - srv.Dumper = srv.RunOptions.Dumper - +func (srv *Server) setup() { if srv.Cluster.ManagementToken == "" { srv.httpHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { http.Error(w, "Management API authentication is not configured", http.StatusForbidden) @@ -101,6 +85,18 @@ func (srv *Server) init(ctx context.Context) { } } +func (srv *Server) run() { + var err error + if srv.RunOptions.Once { + _, err = srv.runOnce() + } else { + err = srv.runForever(nil) + } + if err != nil { + srv.Logger.Error(err) + } +} + func (srv *Server) runOnce() (*Balancer, error) { bal := &Balancer{ Logger: srv.Logger, -- 2.30.2