-
Notifications
You must be signed in to change notification settings - Fork 48
/
etcddb_conf.go
125 lines (105 loc) · 3.97 KB
/
etcddb_conf.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package etcddb
import (
"strings"
"time"
"github.com/singnet/snet-daemon/blockchain"
"github.com/singnet/snet-daemon/config"
"github.com/spf13/viper"
"go.uber.org/zap"
)
// EtcdClientConf config
// ConnectionTimeout - timeout for failing to establish a connection
// RequestTimeout - per request timeout
// Endpoints - cluster endpoints
type EtcdClientConf struct {
ConnectionTimeout time.Duration `json:"connection_timeout" mapstructure:"connection_timeout"`
RequestTimeout time.Duration `json:"request_timeout" mapstructure:"request_timeout"`
HotReload bool `json:"hot_reload" mapstructure:"hot_reload"`
Endpoints []string
}
// GetEtcdClientConf returns EtcdClientConf from viper and ipfs metadata
// The DefaultEtcdClientConf is used in case the PAYMENT_CHANNEL_STORAGE_CLIENT field
// if ConnectionTimeout or RequestTimeout are set in the config, they will be taken from there
func GetEtcdClientConf(vip *viper.Viper, metaData *blockchain.OrganizationMetaData) (conf *EtcdClientConf, err error) {
conf = &EtcdClientConf{
ConnectionTimeout: metaData.GetConnectionTimeOut(),
RequestTimeout: metaData.GetRequestTimeOut(),
HotReload: true,
Endpoints: metaData.GetPaymentStorageEndPoints(),
}
if vip == nil {
return
}
confFromVip := &EtcdClientConf{}
subVip := config.SubWithDefault(vip, config.PaymentChannelStorageClientKey)
err = subVip.Unmarshal(confFromVip)
if confFromVip.RequestTimeout != 0 {
conf.RequestTimeout = confFromVip.RequestTimeout
}
if confFromVip.ConnectionTimeout != 0 {
conf.ConnectionTimeout = confFromVip.ConnectionTimeout
}
conf.HotReload = confFromVip.HotReload
zap.L().Info("Etcd client hot reload", zap.Bool("enable", conf.HotReload))
return
}
func normalizeDefaultConf(conf string) string {
return strings.Replace(conf, "_", "", -1)
}
// EtcdServerConf contains embedded etcd server config
// ID - unique name of the etcd server node
// Scheme - URL schema used to create client and peer and urls
// Host - host where the etcd server is executed
// ClientPort - port to listen clients, used together with
//
// Schema and host to compose listen-client-urls (see link below)
//
// PeerPort - port to listen etcd peers, used together with
//
// Schema and host to compose listen-client-urls (see link below)
//
// Token - unique initial cluster token. Using unique token etcd can generate unique
//
// cluster IDs and member IDs for the clusters even if they otherwise have
// the exact same configuration. This can protect etcd from
// cross-cluster-interaction, which might corrupt the clusters.
//
// StartupTimeout - time to wait the etcd server successfully started
// Enabled - enable running embedded etcd server
// For more details see etcd Clustering Guide link:
// https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/clustering.md
type EtcdServerConf struct {
ID string
Scheme string
Host string
ClientPort int `json:"client_port" mapstructure:"CLIENT_PORT"`
PeerPort int `json:"peer_port" mapstructure:"PEER_PORT"`
Token string
Cluster string
StartupTimeout time.Duration `json:"startup_timeout" mapstructure:"startup_timeout"`
Enabled bool
DataDir string `json:"data_dir" mapstructure:"DATA_DIR"`
LogLevel string `json:"log_level" mapstructure:"LOG_LEVEL"`
LogOutputs []string `json:"log_outputs" mapstructure:"LOG_OUTPUTS"`
}
// GetEtcdServerConf gets EtcdServerConf from viper
// The DefaultEtcdServerConf is used in case the PAYMENT_CHANNEL_STORAGE_SERVER field
// is not set in the configuration file
func GetEtcdServerConf(vip *viper.Viper) (conf *EtcdServerConf, err error) {
key := config.PaymentChannelStorageServerKey
conf = &EtcdServerConf{}
subVip := config.SubWithDefault(vip, key)
err = subVip.Unmarshal(conf)
if err != nil {
return
}
if !vip.InConfig(strings.ToLower(key)) {
return
}
conf.Enabled = true
err = vip.UnmarshalKey(key, conf)
if err != nil {
return
}
return
}