File tree Expand file tree Collapse file tree 5 files changed +38
-12
lines changed Expand file tree Collapse file tree 5 files changed +38
-12
lines changed Original file line number Diff line number Diff line change
1
+ <img src =" ../demo/0.png " />
2
+
3
+ <img src =" ../demo/1.png " />
Original file line number Diff line number Diff line change @@ -50,25 +50,27 @@ func (n *Network) bully() {
50
50
51
51
for {
52
52
n .Lock ()
53
- utils . Debug ( fmt . Sprintf ( "Node %v is in process" , n .Nodes [i ].NodeID ))
54
- utils .Debug (n .Nodes )
53
+ if ! n .Nodes [i ].IsFailed {
54
+ utils .Debug (fmt . Sprintf ( "Node %v is in process" , n .Nodes [ i ]. NodeID ) )
55
55
56
- if n .IsCoordinatorFailed () {
57
- utils .Debug ("Coordinator node failed" )
58
- n .election (i )
56
+ if n .IsCoordinatorFailed () {
57
+ utils .Debug ("Coordinator node failed" )
58
+ n .election (i )
59
+ }
60
+ } else {
61
+ utils .Debug (fmt .Sprintf ("Node %v is failed. Skipping..." , n .Nodes [i ].NodeID ))
59
62
}
60
-
61
- i = (i + 1 ) % totalNodes
62
63
n .Unlock ()
64
+ i = (i + 1 ) % totalNodes
65
+
66
+ n .State ()
63
67
64
68
var in string
65
69
utils .Debug ("Press i for input mode, c for continue..." )
66
70
fmt .Scanf ("%s" , & in )
67
71
switch in {
68
72
case "i" :
69
- utils .Debug (n .Nodes )
70
73
n .Controll ()
71
- utils .Debug (n .Nodes )
72
74
case "s" :
73
75
continue
74
76
}
@@ -85,10 +87,14 @@ func (n *Network) Controll() {
85
87
for idx := range n .Nodes {
86
88
if n .Nodes [idx ].NodeID == nodeID {
87
89
if operation == 0 {
88
- n .Nodes [idx ].IsFailed = true
90
+ if ! n .Nodes [idx ].IsFailed {
91
+ n .Nodes [idx ].IsFailed = true
92
+ }
89
93
} else {
90
- n .Nodes [idx ].IsFailed = false
91
- n .election (idx )
94
+ if n .Nodes [idx ].IsFailed {
95
+ n .Nodes [idx ].IsFailed = false
96
+ n .election (idx )
97
+ }
92
98
}
93
99
return
94
100
}
Original file line number Diff line number Diff line change @@ -51,6 +51,23 @@ func CreateNetwork() Network {
51
51
}
52
52
}
53
53
54
+ // State - network state
55
+ func (n * Network ) State () {
56
+ failedNodes := make ([]NodeIDType , 0 )
57
+ currentActiveNode := - 1
58
+ for _ , node := range n .Nodes {
59
+ if node .IsFailed {
60
+ failedNodes = append (failedNodes , node .NodeID )
61
+ continue
62
+ }
63
+ if node .IsCoordinator {
64
+ currentActiveNode = node .NodeID
65
+ }
66
+ }
67
+
68
+ utils .Debug (fmt .Sprintf ("Failed nodes: %v\n Coordinator: %v" , failedNodes , currentActiveNode ))
69
+ }
70
+
54
71
// MakeCoordinator - will make one of node coordinator
55
72
func (n * Network ) MakeCoordinator (nodeID NodeIDType ) {
56
73
utils .Debug (fmt .Sprintf ("Making Node %v coordinator" , nodeID ))
You can’t perform that action at this time.
0 commit comments