cuboid 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/cuboid/rpc/server/agent/node.rb +16 -33
- data/lib/version +1 -1
- data/spec/cuboid/rpc/server/agent/node_spec.rb +1 -33
- data/spec/cuboid/rpc/server/agent_spec.rb +8 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ca74705ed31ac31d5e2dc69901fe2815df25e6fbcf30337d242ca2d1059624af
|
4
|
+
data.tar.gz: fc01ac528305655c7369cbe5af27fe5b2ffb8b03969c8f2b1d45df842d082c4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 618a9ac640b379063ea2710688c82345088043db0b0975467cd99ae363b3f376c08bb9d6116e0b77f2018510bda0a154e0ef53c1c2e795748cb692203da81d01
|
7
|
+
data.tar.gz: 92aab5e52a4477ceaf6ce48a4689bd86fa61f27a0c2a2243b0e4f6c1d812fb736bdeeb9d82cebf89ae058e92478301d2586f7a4ca355bf7f8268ebf8dc179110
|
data/CHANGELOG.md
CHANGED
@@ -38,26 +38,24 @@ class Server::Agent::Node
|
|
38
38
|
|
39
39
|
reroute_to_file( logfile ) if logfile
|
40
40
|
|
41
|
-
print_status 'Initializing
|
41
|
+
print_status 'Initializing node...'
|
42
42
|
|
43
43
|
@dead_nodes = Set.new
|
44
|
-
@peers
|
44
|
+
@peers = Set.new
|
45
45
|
@nodes_info_cache = []
|
46
46
|
|
47
47
|
if (peer = @options.agent.peer)
|
48
48
|
# Grab the peer's peers.
|
49
|
-
connect_to_peer( peer ).peers do |
|
50
|
-
if
|
51
|
-
|
52
|
-
print_info "Neighbour seems dead: #{peer}"
|
49
|
+
connect_to_peer( peer ).peers do |peers|
|
50
|
+
if peers.rpc_exception?
|
51
|
+
print_info "Peer seems dead: #{peer}"
|
53
52
|
add_dead_peer( peer )
|
54
53
|
next
|
55
54
|
end
|
56
55
|
|
57
|
-
|
58
|
-
add_peer
|
59
|
-
|
60
|
-
urls.each { |url| @peers << url if url != @url }
|
56
|
+
peers << peer
|
57
|
+
peers.each { |url| add_peer url }
|
58
|
+
announce @url
|
61
59
|
end
|
62
60
|
end
|
63
61
|
|
@@ -92,24 +90,11 @@ class Server::Agent::Node
|
|
92
90
|
#
|
93
91
|
# @param [String] node_url
|
94
92
|
# URL of a peering node.
|
95
|
-
|
96
|
-
# Whether or not to announce the new node to the peers.
|
97
|
-
def add_peer( node_url, propagate = false )
|
98
|
-
# we don't want ourselves in the Set
|
99
|
-
return false if node_url == @url
|
100
|
-
return false if @peers.include?( node_url )
|
101
|
-
|
93
|
+
def add_peer( node_url )
|
102
94
|
print_status "Adding peer: #{node_url}"
|
103
95
|
|
104
96
|
@peers << node_url
|
105
97
|
log_updated_peers
|
106
|
-
announce( node_url ) if propagate
|
107
|
-
|
108
|
-
connect_to_peer( node_url ).add_peer( @url, propagate ) do |res|
|
109
|
-
next if !res.rpc_exception?
|
110
|
-
add_dead_peer( node_url )
|
111
|
-
print_status "Neighbour seems dead: #{node_url}"
|
112
|
-
end
|
113
98
|
true
|
114
99
|
end
|
115
100
|
|
@@ -120,7 +105,7 @@ class Server::Agent::Node
|
|
120
105
|
end
|
121
106
|
|
122
107
|
# @return [Array]
|
123
|
-
#
|
108
|
+
# Peer/node/peer URLs.
|
124
109
|
def peers
|
125
110
|
@peers.to_a
|
126
111
|
end
|
@@ -136,7 +121,7 @@ class Server::Agent::Node
|
|
136
121
|
each = proc do |peer, iter|
|
137
122
|
connect_to_peer( peer ).info do |info|
|
138
123
|
if info.rpc_exception?
|
139
|
-
print_info "
|
124
|
+
print_info "Peer seems dead: #{peer}"
|
140
125
|
add_dead_peer( peer )
|
141
126
|
log_updated_peers
|
142
127
|
|
@@ -165,8 +150,8 @@ class Server::Agent::Node
|
|
165
150
|
# * `peers` -- Array of peers.
|
166
151
|
def info
|
167
152
|
{
|
168
|
-
'url'
|
169
|
-
'name'
|
153
|
+
'url' => @url,
|
154
|
+
'name' => @options.agent.name,
|
170
155
|
'peers' => @peers.to_a,
|
171
156
|
'unreachable_peers' => @dead_nodes.to_a
|
172
157
|
}
|
@@ -209,7 +194,7 @@ class Server::Agent::Node
|
|
209
194
|
peer.alive? do |res|
|
210
195
|
next if res.rpc_exception?
|
211
196
|
|
212
|
-
print_status "
|
197
|
+
print_status "Peer came back to life: #{url}"
|
213
198
|
([@url] | peers).each do |node|
|
214
199
|
peer.add_peer( node ){}
|
215
200
|
end
|
@@ -225,12 +210,10 @@ class Server::Agent::Node
|
|
225
210
|
# @param [String] node
|
226
211
|
# URL
|
227
212
|
def announce( node )
|
228
|
-
print_status "
|
213
|
+
print_status "Announcing: #{node}"
|
229
214
|
|
230
215
|
peers.each do |peer|
|
231
|
-
|
232
|
-
|
233
|
-
print_info '---- to: ' + peer
|
216
|
+
print_info "---- to: #{peer}"
|
234
217
|
connect_to_peer( peer ).add_peer( node ) do |res|
|
235
218
|
add_dead_peer( peer ) if res.rpc_exception?
|
236
219
|
end
|
data/lib/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.3
|
@@ -24,7 +24,7 @@ describe Cuboid::RPC::Server::Agent::Node do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
before( :each ) do
|
27
|
-
options.paths.executables
|
27
|
+
options.paths.executables = "#{fixtures_path}executables/"
|
28
28
|
options.agent.ping_interval = 0.5
|
29
29
|
end
|
30
30
|
after( :each ) do
|
@@ -65,7 +65,6 @@ describe Cuboid::RPC::Server::Agent::Node do
|
|
65
65
|
|
66
66
|
sleep 0.5
|
67
67
|
expect(subject.peers).to eq([c.url])
|
68
|
-
expect(c.peers).to eq([subject.url])
|
69
68
|
end
|
70
69
|
end
|
71
70
|
|
@@ -76,7 +75,6 @@ describe Cuboid::RPC::Server::Agent::Node do
|
|
76
75
|
subject.add_peer( c.url )
|
77
76
|
sleep 0.5
|
78
77
|
|
79
|
-
expect(c.peers).to eq([subject.url])
|
80
78
|
expect(subject.peers).to eq([c.url])
|
81
79
|
|
82
80
|
subject.shutdown rescue break while sleep 0.1
|
@@ -117,7 +115,6 @@ describe Cuboid::RPC::Server::Agent::Node do
|
|
117
115
|
|
118
116
|
subject.add_peer( c.url )
|
119
117
|
sleep 0.5
|
120
|
-
expect(c.peers).to eq([subject.url])
|
121
118
|
|
122
119
|
c.unplug
|
123
120
|
|
@@ -136,35 +133,6 @@ describe Cuboid::RPC::Server::Agent::Node do
|
|
136
133
|
|
137
134
|
it 'adds a peer' do
|
138
135
|
expect(subject.peers).to eq([other.url])
|
139
|
-
expect(other.peers).to eq([subject.url])
|
140
|
-
end
|
141
|
-
|
142
|
-
context 'when propagate is set to true' do
|
143
|
-
it 'announces the new peer to the existing peers' do
|
144
|
-
n = get_node
|
145
|
-
subject.add_peer( n.url, true )
|
146
|
-
sleep 0.5
|
147
|
-
|
148
|
-
expect(subject.peers.sort).to eq([other.url, n.url].sort)
|
149
|
-
expect(other.peers.sort).to eq([subject.url, n.url].sort)
|
150
|
-
|
151
|
-
c = get_node
|
152
|
-
n.add_peer( c.url, true )
|
153
|
-
sleep 0.5
|
154
|
-
|
155
|
-
expect(subject.peers.sort).to eq([other.url, n.url, c.url].sort)
|
156
|
-
expect(other.peers.sort).to eq([subject.url, n.url, c.url].sort)
|
157
|
-
expect(c.peers.sort).to eq([subject.url, n.url, other.url].sort)
|
158
|
-
|
159
|
-
d = get_node
|
160
|
-
d.add_peer( c.url, true )
|
161
|
-
sleep 0.5
|
162
|
-
|
163
|
-
expect(subject.peers.sort).to eq([d.url, other.url, n.url, c.url].sort)
|
164
|
-
expect(other.peers.sort).to eq([d.url, subject.url, n.url, c.url].sort)
|
165
|
-
expect(c.peers.sort).to eq([d.url, subject.url, n.url, other.url].sort)
|
166
|
-
expect(d.peers.sort).to eq([c.url, subject.url, n.url, other.url].sort)
|
167
|
-
end
|
168
136
|
end
|
169
137
|
end
|
170
138
|
|
@@ -226,13 +226,13 @@ describe Cuboid::RPC::Server::Agent do
|
|
226
226
|
daemonize: true
|
227
227
|
)
|
228
228
|
d3.spawn( strategy: :direct )
|
229
|
-
preferred = d3.url.split( ':' ).first
|
230
229
|
|
230
|
+
preferred = d3.url.split( ':' ).first
|
231
231
|
expect(d3.spawn(strategy: :horizontal )['url'].split( ':' ).first).to eq(preferred)
|
232
232
|
expect(%W{127.0.0.3 127.0.0.2}).to include d1.spawn['url'].split( ':' ).first
|
233
233
|
expect(d2.spawn(strategy: :horizontal )['url'].split( ':' ).first).to eq(preferred)
|
234
|
+
expect(%W{127.0.0.1 127.0.0.2}).to include d3.spawn(strategy: :horizontal )['url'].split( ':' ).first
|
234
235
|
expect(%W{127.0.0.1 127.0.0.3}).to include d3.spawn(strategy: :horizontal )['url'].split( ':' ).first
|
235
|
-
expect(%W{127.0.0.2 127.0.0.3}).to include d3.spawn(strategy: :horizontal )['url'].split( ':' ).first
|
236
236
|
expect(%W{127.0.0.2 127.0.0.3}).to include d1.spawn(strategy: :horizontal )['url'].split( ':' ).first
|
237
237
|
end
|
238
238
|
end
|
@@ -303,14 +303,14 @@ describe Cuboid::RPC::Server::Agent do
|
|
303
303
|
daemonize: true
|
304
304
|
)
|
305
305
|
d3.spawn( strategy: :direct )
|
306
|
-
preferred = d3.url.split( ':' ).first
|
307
306
|
|
308
|
-
|
307
|
+
preferred = d3.url.split( ':' ).first
|
308
|
+
expect(d3.spawn(strategy: :horizontal )['url'].split( ':' ).first).to eq(preferred)
|
309
309
|
expect(%W{127.0.0.3 127.0.0.2}).to include d1.spawn['url'].split( ':' ).first
|
310
|
-
expect(d2.spawn['url'].split( ':' ).first).to eq(preferred)
|
311
|
-
expect(%W{127.0.0.1 127.0.0.
|
312
|
-
expect(%W{127.0.0.
|
313
|
-
expect(%W{127.0.0.2 127.0.0.3}).to include d1.spawn['url'].split( ':' ).first
|
310
|
+
expect(d2.spawn(strategy: :horizontal )['url'].split( ':' ).first).to eq(preferred)
|
311
|
+
expect(%W{127.0.0.1 127.0.0.2}).to include d3.spawn(strategy: :horizontal )['url'].split( ':' ).first
|
312
|
+
expect(%W{127.0.0.1 127.0.0.3}).to include d3.spawn(strategy: :horizontal )['url'].split( ':' ).first
|
313
|
+
expect(%W{127.0.0.2 127.0.0.3}).to include d1.spawn(strategy: :horizontal )['url'].split( ':' ).first
|
314
314
|
end
|
315
315
|
end
|
316
316
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cuboid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tasos Laskos
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: awesome_print
|