Skip to content

Commit aaee018

Browse files
author
auxten
committed
add ServerRole to proto.Node, default is Unknown, implement ServerRole.MarshalYAML ServerRole.UnmarshalYAML
1 parent ffebc37 commit aaee018

7 files changed

Lines changed: 97 additions & 30 deletions

File tree

proto/nodeinfo.go

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package proto
1818

1919
import (
20+
"strings"
2021
"time"
2122

2223
"gitlab.com/thunderdb/ThunderDB/crypto/asymmetric"
@@ -66,6 +67,7 @@ func (k *NodeKey) Less(y *NodeKey) bool {
6667
// Node is all node info struct
6768
type Node struct {
6869
ID NodeID
70+
Role ServerRole
6971
Addr string
7072
PublicKey *asymmetric.PublicKey
7173
Nonce mine.Uint256
@@ -132,8 +134,10 @@ type AddrAndGas struct {
132134
type ServerRole int
133135

134136
const (
137+
// Unknown is the zero value
138+
Unknown ServerRole = iota
135139
// Leader is a server that have the ability to organize committing requests.
136-
Leader ServerRole = iota
140+
Leader
137141
// Follower is a server that follow the leader log commits.
138142
Follower
139143
// Miner is a server that run sql database
@@ -155,3 +159,43 @@ func (s ServerRole) String() string {
155159
}
156160
return "Unknown"
157161
}
162+
163+
// MarshalYAML implements the yaml.Marshaler interface.
164+
func (s ServerRole) MarshalYAML() (interface{}, error) {
165+
return s.String(), nil
166+
}
167+
168+
// UnmarshalYAML implements the yaml.Unmarshaler interface.
169+
func (s *ServerRole) UnmarshalYAML(unmarshal func(interface{}) error) error {
170+
var str string
171+
if err := unmarshal(&str); err != nil {
172+
return err
173+
}
174+
dur, err := parseServerRole(str)
175+
if err != nil {
176+
return err
177+
}
178+
*s = dur
179+
180+
return nil
181+
}
182+
183+
func parseServerRole(roleStr string) (role ServerRole, err error) {
184+
185+
switch strings.ToLower(roleStr) {
186+
case "leader":
187+
role = Leader
188+
return
189+
case "follower":
190+
role = Follower
191+
return
192+
case "miner":
193+
role = Miner
194+
return
195+
case "client":
196+
role = Client
197+
return
198+
}
199+
200+
return Unknown, nil
201+
}

proto/nodeinfo_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@
1717
package proto
1818

1919
import (
20+
"strings"
2021
"testing"
2122

2223
"time"
2324

2425
. "github.com/smartystreets/goconvey/convey"
2526
"gitlab.com/thunderdb/ThunderDB/crypto/hash"
27+
"gopkg.in/yaml.v2"
2628
)
2729

2830
func TestNode_InitNodeCryptoInfo(t *testing.T) {
@@ -64,6 +66,27 @@ func TestNodeKey_Less(t *testing.T) {
6466
})
6567
}
6668

69+
func unmarshalAndMarshal(str string) string {
70+
var role ServerRole
71+
yaml.Unmarshal([]byte(str), &role)
72+
ret, _ := yaml.Marshal(role)
73+
74+
return strings.TrimSpace(string(ret))
75+
}
76+
77+
func TestServerRole_MarshalYAML(t *testing.T) {
78+
Convey("marshal unmarshal yaml", t, func() {
79+
var role ServerRole
80+
s, _ := role.MarshalYAML()
81+
So(s, ShouldResemble, "Unknown")
82+
So(unmarshalAndMarshal("unknown"), ShouldEqual, "Unknown")
83+
So(unmarshalAndMarshal("leader"), ShouldEqual, "Leader")
84+
So(unmarshalAndMarshal("follower"), ShouldEqual, "Follower")
85+
So(unmarshalAndMarshal("miner"), ShouldEqual, "Miner")
86+
So(unmarshalAndMarshal("client"), ShouldEqual, "Client")
87+
})
88+
}
89+
6790
func TestNodeID_ToRawNodeID(t *testing.T) {
6891
Convey("NodeID to RawNodeID", t, func() {
6992
k1 := RawNodeID{

test/node_0/config.yaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,52 +25,52 @@ knownnodes:
2525
c: 0
2626
d: 0
2727
addr: 127.0.0.1:2122
28-
role: 0
28+
role: Leader
2929
- id: 00000381d46fd6cf7742d7fb94e2422033af989c0e348b5781b3219599a3af35
3030
nonce:
3131
a: 478373
3232
b: 0
3333
c: 0
3434
d: 2305843009893772025
3535
addr: 127.0.0.1:2121
36-
role: 1
36+
role: Follower
3737
- id: 000000172580063ded88e010556b0aca2851265be8845b1ef397e8fce6ab5582
3838
nonce:
3939
a: 259939
4040
b: 0
4141
c: 0
4242
d: 2305843012544226372
4343
addr: 127.0.0.1:2120
44-
role: 1
44+
role: Follower
4545
- id: 00000f3b43288fe99831eb533ab77ec455d13e11fc38ec35a42d4edd17aa320d
4646
nonce:
4747
a: 22403
4848
b: 0
4949
c: 0
5050
d: 0
5151
addr: ""
52-
role: 3
52+
role: Client
5353
- id: 000005aa62048f85da4ae9698ed59c14ec0d48a88a07c15a32265634e7e64ade
5454
nonce:
5555
a: 567323
5656
b: 0
5757
c: 0
5858
d: 3104982049
5959
addr: 127.0.0.1:2144
60-
role: 2
60+
role: Miner
6161
- id: 000005f4f22c06f76c43c4f48d5a7ec1309cc94030cbf9ebae814172884ac8b5
6262
nonce:
6363
a: 240524
6464
b: 0
6565
c: 0
6666
d: 2305843010430351476
6767
addr: 127.0.0.1:2145
68-
role: 2
68+
role: Miner
6969
- id: 000003f49592f83d0473bddb70d543f1096b4ffed5e5f942a3117e256b7052b8
7070
nonce:
7171
a: 606016
7272
b: 0
7373
c: 0
7474
d: 13835058056920509601
7575
addr: 127.0.0.1:2146
76-
role: 2
76+
role: Miner

test/node_1/config.yaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,52 +25,52 @@ knownnodes:
2525
c: 0
2626
d: 0
2727
addr: 127.0.0.1:2122
28-
role: 0
28+
role: Leader
2929
- id: 00000381d46fd6cf7742d7fb94e2422033af989c0e348b5781b3219599a3af35
3030
nonce:
3131
a: 478373
3232
b: 0
3333
c: 0
3434
d: 2305843009893772025
3535
addr: 127.0.0.1:2121
36-
role: 1
36+
role: Follower
3737
- id: 000000172580063ded88e010556b0aca2851265be8845b1ef397e8fce6ab5582
3838
nonce:
3939
a: 259939
4040
b: 0
4141
c: 0
4242
d: 2305843012544226372
4343
addr: 127.0.0.1:2120
44-
role: 1
44+
role: Follower
4545
- id: 00000f3b43288fe99831eb533ab77ec455d13e11fc38ec35a42d4edd17aa320d
4646
nonce:
4747
a: 22403
4848
b: 0
4949
c: 0
5050
d: 0
5151
addr: ""
52-
role: 3
52+
role: Client
5353
- id: 000005aa62048f85da4ae9698ed59c14ec0d48a88a07c15a32265634e7e64ade
5454
nonce:
5555
a: 567323
5656
b: 0
5757
c: 0
5858
d: 3104982049
5959
addr: 127.0.0.1:2144
60-
role: 2
60+
role: Miner
6161
- id: 000005f4f22c06f76c43c4f48d5a7ec1309cc94030cbf9ebae814172884ac8b5
6262
nonce:
6363
a: 240524
6464
b: 0
6565
c: 0
6666
d: 2305843010430351476
6767
addr: 127.0.0.1:2145
68-
role: 2
68+
role: Miner
6969
- id: 000003f49592f83d0473bddb70d543f1096b4ffed5e5f942a3117e256b7052b8
7070
nonce:
7171
a: 606016
7272
b: 0
7373
c: 0
7474
d: 13835058056920509601
7575
addr: 127.0.0.1:2146
76-
role: 2
76+
role: Miner

test/node_2/config.yaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,52 +25,52 @@ knownnodes:
2525
c: 0
2626
d: 0
2727
addr: 127.0.0.1:2122
28-
role: 0
28+
role: Leader
2929
- id: 00000381d46fd6cf7742d7fb94e2422033af989c0e348b5781b3219599a3af35
3030
nonce:
3131
a: 478373
3232
b: 0
3333
c: 0
3434
d: 2305843009893772025
3535
addr: 127.0.0.1:2121
36-
role: 1
36+
role: Follower
3737
- id: 000000172580063ded88e010556b0aca2851265be8845b1ef397e8fce6ab5582
3838
nonce:
3939
a: 259939
4040
b: 0
4141
c: 0
4242
d: 2305843012544226372
4343
addr: 127.0.0.1:2120
44-
role: 1
44+
role: Follower
4545
- id: 00000f3b43288fe99831eb533ab77ec455d13e11fc38ec35a42d4edd17aa320d
4646
nonce:
4747
a: 22403
4848
b: 0
4949
c: 0
5050
d: 0
5151
addr: ""
52-
role: 3
52+
role: Client
5353
- id: 000005aa62048f85da4ae9698ed59c14ec0d48a88a07c15a32265634e7e64ade
5454
nonce:
5555
a: 567323
5656
b: 0
5757
c: 0
5858
d: 3104982049
5959
addr: 127.0.0.1:2144
60-
role: 2
60+
role: Miner
6161
- id: 000005f4f22c06f76c43c4f48d5a7ec1309cc94030cbf9ebae814172884ac8b5
6262
nonce:
6363
a: 240524
6464
b: 0
6565
c: 0
6666
d: 2305843010430351476
6767
addr: 127.0.0.1:2145
68-
role: 2
68+
role: Miner
6969
- id: 000003f49592f83d0473bddb70d543f1096b4ffed5e5f942a3117e256b7052b8
7070
nonce:
7171
a: 606016
7272
b: 0
7373
c: 0
7474
d: 13835058056920509601
7575
addr: 127.0.0.1:2146
76-
role: 2
76+
role: Miner

test/node_c/config.yaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,52 +25,52 @@ knownnodes:
2525
c: 0
2626
d: 0
2727
addr: 127.0.0.1:2122
28-
role: 0
28+
role: Leader
2929
- id: 00000381d46fd6cf7742d7fb94e2422033af989c0e348b5781b3219599a3af35
3030
nonce:
3131
a: 478373
3232
b: 0
3333
c: 0
3434
d: 2305843009893772025
3535
addr: 127.0.0.1:2121
36-
role: 1
36+
role: Follower
3737
- id: 000000172580063ded88e010556b0aca2851265be8845b1ef397e8fce6ab5582
3838
nonce:
3939
a: 259939
4040
b: 0
4141
c: 0
4242
d: 2305843012544226372
4343
addr: 127.0.0.1:2120
44-
role: 1
44+
role: Follower
4545
- id: 00000f3b43288fe99831eb533ab77ec455d13e11fc38ec35a42d4edd17aa320d
4646
nonce:
4747
a: 22403
4848
b: 0
4949
c: 0
5050
d: 0
5151
addr: ""
52-
role: 3
52+
role: Client
5353
- id: 000005aa62048f85da4ae9698ed59c14ec0d48a88a07c15a32265634e7e64ade
5454
nonce:
5555
a: 567323
5656
b: 0
5757
c: 0
5858
d: 3104982049
5959
addr: 127.0.0.1:2144
60-
role: 2
60+
role: Miner
6161
- id: 000005f4f22c06f76c43c4f48d5a7ec1309cc94030cbf9ebae814172884ac8b5
6262
nonce:
6363
a: 240524
6464
b: 0
6565
c: 0
6666
d: 2305843010430351476
6767
addr: 127.0.0.1:2145
68-
role: 2
68+
role: Miner
6969
- id: 000003f49592f83d0473bddb70d543f1096b4ffed5e5f942a3117e256b7052b8
7070
nonce:
7171
a: 606016
7272
b: 0
7373
c: 0
7474
d: 13835058056920509601
7575
addr: 127.0.0.1:2146
76-
role: 2
76+
role: Miner

test/node_standalone/config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,4 @@ knownnodes:
2525
c: 0
2626
d: 0
2727
addr: 127.0.0.1:2230
28-
role: 0
28+
role: Leader

0 commit comments

Comments
 (0)