forked from adamlaska/boulder
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
124 lines (101 loc) · 3.36 KB
/
main.go
File metadata and controls
124 lines (101 loc) · 3.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package notmain
import (
"flag"
"os"
"google.golang.org/grpc/health"
healthpb "google.golang.org/grpc/health/grpc_health_v1"
"github.com/honeycombio/beeline-go"
"github.com/letsencrypt/boulder/cmd"
"github.com/letsencrypt/boulder/db"
"github.com/letsencrypt/boulder/features"
bgrpc "github.com/letsencrypt/boulder/grpc"
"github.com/letsencrypt/boulder/rocsp"
rocsp_config "github.com/letsencrypt/boulder/rocsp/config"
"github.com/letsencrypt/boulder/sa"
sapb "github.com/letsencrypt/boulder/sa/proto"
)
type Config struct {
SA struct {
cmd.ServiceConfig
DB cmd.DBConfig
ReadOnlyDB cmd.DBConfig
Redis *rocsp_config.RedisConfig
Issuers map[string]int
Features map[string]bool
// Max simultaneous SQL queries caused by a single RPC.
ParallelismPerRPC int
}
Syslog cmd.SyslogConfig
Beeline cmd.BeelineConfig
}
func main() {
grpcAddr := flag.String("addr", "", "gRPC listen address override")
debugAddr := flag.String("debug-addr", "", "Debug server address override")
configFile := flag.String("config", "", "File path to the configuration file for this service")
flag.Parse()
if *configFile == "" {
flag.Usage()
os.Exit(1)
}
var c Config
err := cmd.ReadConfigFile(*configFile, &c)
cmd.FailOnError(err, "Reading JSON config file into config structure")
err = features.Set(c.SA.Features)
cmd.FailOnError(err, "Failed to set feature flags")
if *grpcAddr != "" {
c.SA.GRPC.Address = *grpcAddr
}
if *debugAddr != "" {
c.SA.DebugAddr = *debugAddr
}
bc, err := c.Beeline.Load()
cmd.FailOnError(err, "Failed to load Beeline config")
beeline.Init(bc)
defer beeline.Close()
scope, logger := cmd.StatsAndLogging(c.Syslog, c.SA.DebugAddr)
defer logger.AuditPanic()
logger.Info(cmd.VersionString())
dbMap, err := sa.InitWrappedDb(c.SA.DB, scope, logger)
cmd.FailOnError(err, "While initializing dbMap")
dbReadOnlyURL, err := c.SA.ReadOnlyDB.URL()
cmd.FailOnError(err, "Couldn't load read-only DB URL")
var dbReadOnlyMap *db.WrappedMap
if dbReadOnlyURL == "" {
dbReadOnlyMap = dbMap
} else {
dbReadOnlyMap, err = sa.InitWrappedDb(c.SA.ReadOnlyDB, scope, logger)
cmd.FailOnError(err, "While initializing dbMap")
}
clk := cmd.Clock()
redisConf := c.SA.Redis
var rocspWriteClient *rocsp.WritingClient
if redisConf != nil {
rocspWriteClient, err = rocsp_config.MakeClient(redisConf, clk, scope)
cmd.FailOnError(err, "making Redis client")
}
shortIssuers, err := rocsp_config.LoadIssuers(c.SA.Issuers)
cmd.FailOnError(err, "loading issuers")
parallel := c.SA.ParallelismPerRPC
if parallel < 1 {
parallel = 1
}
sai, err := sa.NewSQLStorageAuthority(dbMap, dbReadOnlyMap, rocspWriteClient, shortIssuers, clk, logger, scope, parallel)
cmd.FailOnError(err, "Failed to create SA impl")
tls, err := c.SA.TLS.Load()
cmd.FailOnError(err, "TLS config")
serverMetrics := bgrpc.NewServerMetrics(scope)
grpcSrv, listener, err := bgrpc.NewServer(c.SA.GRPC, tls, serverMetrics, clk, bgrpc.NoCancelInterceptor)
cmd.FailOnError(err, "Unable to setup SA gRPC server")
sapb.RegisterStorageAuthorityServer(grpcSrv, sai)
hs := health.NewServer()
healthpb.RegisterHealthServer(grpcSrv, hs)
go cmd.CatchSignals(logger, func() {
hs.Shutdown()
grpcSrv.GracefulStop()
})
err = cmd.FilterShutdownErrors(grpcSrv.Serve(listener))
cmd.FailOnError(err, "SA gRPC service failed")
}
func init() {
cmd.RegisterCommand("boulder-sa", main)
}