Skip to content
File

Blob: chord/config.go

go59 lines
1package chord
2 
3import (
4 "errors"
5 "time"
6 
7 "go.miragespace.co/specter/spec/chord"
8 "go.miragespace.co/specter/spec/protocol"
9 "go.miragespace.co/specter/spec/rpc"
10 "go.miragespace.co/specter/spec/rtt"
11 
12 "go.uber.org/zap"
13)
14 
15type NodeConfig struct {
16 KVProvider chord.KVProvider
17 ChordClient rpc.ChordClient
18 BaseLogger *zap.Logger
19 Identity *protocol.Node
20 NodesRTT rtt.Recorder
21 StabilizeInterval time.Duration
22 FixFingerInterval time.Duration
23 PredecessorCheckInterval time.Duration
24}
25 
26func (c *NodeConfig) Validate() error {
27 if c == nil {
28 return errors.New("nil NodeConfig")
29 }
30 if c.BaseLogger == nil {
31 return errors.New("nil BaseLogger")
32 }
33 if c.Identity == nil {
34 return errors.New("nil Identity")
35 }
36 if c.Identity.GetId() >= (1 << chord.MaxFingerEntries) {
37 return errors.New("invalid Identity ID")
38 }
39 if c.ChordClient == nil {
40 return errors.New("nil ChordClient")
41 }
42 if c.StabilizeInterval <= 0 {
43 return errors.New("invalid StabilizeInterval, must be positive")
44 }
45 if c.FixFingerInterval <= 0 {
46 return errors.New("invalid FixFingerInterval, must be positive")
47 }
48 if c.PredecessorCheckInterval <= 0 {
49 return errors.New("invalid PredecessorCheckInterval, must be positive")
50 }
51 if c.KVProvider == nil {
52 return errors.New("nil KVProvider")
53 }
54 if c.NodesRTT == nil {
55 return errors.New("nil NodesRTT")
56 }
57 return nil
58}