14714: Removes context from Server functions. Adds sync.Once to setup
authorEric Biagiotti <ebiagiotti@veritasgenetics.com>
Thu, 26 Sep 2019 14:22:12 +0000 (10:22 -0400)
committerEric Biagiotti <ebiagiotti@veritasgenetics.com>
Thu, 26 Sep 2019 18:18:47 +0000 (14:18 -0400)
Arvados-DCO-1.1-Signed-off-by: Eric Biagiotti <ebiagiotti@veritasgenetics.com>

services/keep-balance/balance_run_test.go
services/keep-balance/main.go
services/keep-balance/server.go

index 1478e6e2effb042f20206853c489b4d162fae1a4..3ef3b00077d8d7c396e21aef0cc8b7f7753bc4c5 100644 (file)
@@ -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
 }
 
index 606fde4984537005cc3b5aa032fb208df3bd9225..92ed644b5986c0679e37d5bf5e4ae0f50652db0d 100644 (file)
@@ -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
 }
 
index 23e597c89e63e384aef6ab9dff4ea297f74e76c3..3e665a30d52c5310912164c38164182536b695d9 100644 (file)
@@ -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,