-
Notifications
You must be signed in to change notification settings - Fork 1.8k
/
config.go
104 lines (83 loc) · 3.13 KB
/
config.go
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
// ------------------------------------------------------------
// Copyright (c) Microsoft Corporation and Dapr Contributors.
// Licensed under the MIT License.
// ------------------------------------------------------------
package main
import (
"flag"
"strings"
"github.com/dapr/kit/logger"
"github.com/dapr/dapr/pkg/metrics"
"github.com/dapr/dapr/pkg/placement/raft"
)
const (
defaultCredentialsPath = "/var/run/dapr/credentials"
defaultHealthzPort = 8080
defaultPlacementPort = 50005
defaultReplicationFactor = 100
)
type config struct {
// Raft protocol configurations
raftID string
raftPeerString string
raftPeers []raft.PeerInfo
raftInMemEnabled bool
raftLogStorePath string
// Placement server configurations
placementPort int
healthzPort int
certChainPath string
tlsEnabled bool
replicationFactor int
// Log and metrics configurations
loggerOptions logger.Options
metricsExporter metrics.Exporter
}
func newConfig() *config {
// Default configuration
cfg := config{
raftID: "dapr-placement-0",
raftPeerString: "dapr-placement-0=127.0.0.1:8201",
raftPeers: []raft.PeerInfo{},
raftInMemEnabled: true,
raftLogStorePath: "",
placementPort: defaultPlacementPort,
healthzPort: defaultHealthzPort,
certChainPath: defaultCredentialsPath,
tlsEnabled: false,
}
flag.StringVar(&cfg.raftID, "id", cfg.raftID, "Placement server ID.")
flag.StringVar(&cfg.raftPeerString, "initial-cluster", cfg.raftPeerString, "raft cluster peers")
flag.BoolVar(&cfg.raftInMemEnabled, "inmem-store-enabled", cfg.raftInMemEnabled, "Enable in-memory log and snapshot store unless --raft-logstore-path is set")
flag.StringVar(&cfg.raftLogStorePath, "raft-logstore-path", cfg.raftLogStorePath, "raft log store path.")
flag.IntVar(&cfg.placementPort, "port", cfg.placementPort, "sets the gRPC port for the placement service")
flag.IntVar(&cfg.healthzPort, "healthz-port", cfg.healthzPort, "sets the HTTP port for the healthz server")
flag.StringVar(&cfg.certChainPath, "certchain", cfg.certChainPath, "Path to the credentials directory holding the cert chain")
flag.BoolVar(&cfg.tlsEnabled, "tls-enabled", cfg.tlsEnabled, "Should TLS be enabled for the placement gRPC server")
flag.IntVar(&cfg.replicationFactor, "replicationFactor", defaultReplicationFactor, "sets the replication factor for actor distribution on vnodes")
cfg.loggerOptions = logger.DefaultOptions()
cfg.loggerOptions.AttachCmdFlags(flag.StringVar, flag.BoolVar)
cfg.metricsExporter = metrics.NewExporter(metrics.DefaultMetricNamespace)
cfg.metricsExporter.Options().AttachCmdFlags(flag.StringVar, flag.BoolVar)
flag.Parse()
cfg.raftPeers = parsePeersFromFlag(cfg.raftPeerString)
if cfg.raftLogStorePath != "" {
cfg.raftInMemEnabled = false
}
return &cfg
}
func parsePeersFromFlag(val string) []raft.PeerInfo {
peers := []raft.PeerInfo{}
p := strings.Split(val, ",")
for _, addr := range p {
peer := strings.Split(addr, "=")
if len(peer) != 2 {
continue
}
peers = append(peers, raft.PeerInfo{
ID: strings.TrimSpace(peer[0]),
Address: strings.TrimSpace(peer[1]),
})
}
return peers
}