zold 0.13.37 → 0.13.38
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/zold/remotes.rb +26 -21
- data/lib/zold/version.rb +1 -1
- data/test/test_remotes.rb +34 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e1c4b9fec37b2f1f351188890814381b2abbaa48
|
4
|
+
data.tar.gz: c3d35c7bcf49845a0f95a0a24fee896bf4fbef3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c3d5840ae8b755c85ceffbc5d0bfab5c778bc42d8a6f9883f1c178d7d86136206d07707425a33ecc55f2f823f850edc834fb8c9175eccab2ba8400c177acadb8
|
7
|
+
data.tar.gz: bebb092830df7d63e311b861804ab2013b6e43341a77e0ed9d96b5ee2438bc405797e30d06dbe831a46c52ae8a7f14e454040094e6d74c927ee667d5418eeaae
|
data/lib/zold/remotes.rb
CHANGED
@@ -110,6 +110,7 @@ module Zold
|
|
110
110
|
@file = file
|
111
111
|
raise 'Network can\'t be nil' if network.nil?
|
112
112
|
@network = network
|
113
|
+
@mutex = Mutex.new
|
113
114
|
end
|
114
115
|
|
115
116
|
def all
|
@@ -223,31 +224,35 @@ in #{(Time.now - start).round}s; errors=#{errors}")
|
|
223
224
|
private
|
224
225
|
|
225
226
|
def load
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
r[:
|
236
|
-
|
227
|
+
@mutex.synchronize do
|
228
|
+
raw = CSV.read(file).map do |r|
|
229
|
+
{
|
230
|
+
host: r[0],
|
231
|
+
port: r[1].to_i,
|
232
|
+
score: r[2].to_i,
|
233
|
+
errors: r[3].to_i
|
234
|
+
}
|
235
|
+
end
|
236
|
+
raw.reject { |r| !r[:host] || r[:port].zero? }.map do |r|
|
237
|
+
r[:home] = URI("http://#{r[0]}:#{r[1]}/")
|
238
|
+
r
|
239
|
+
end
|
237
240
|
end
|
238
241
|
end
|
239
242
|
|
240
243
|
def save(list)
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
244
|
+
@mutex.synchronize do
|
245
|
+
AtomicFile.new(file).write(
|
246
|
+
list.map do |r|
|
247
|
+
[
|
248
|
+
r[:host],
|
249
|
+
r[:port],
|
250
|
+
r[:score],
|
251
|
+
r[:errors]
|
252
|
+
].join(',')
|
253
|
+
end.join("\n")
|
254
|
+
)
|
255
|
+
end
|
251
256
|
end
|
252
257
|
|
253
258
|
def file
|
data/lib/zold/version.rb
CHANGED
data/test/test_remotes.rb
CHANGED
@@ -20,9 +20,12 @@
|
|
20
20
|
|
21
21
|
require 'minitest/autorun'
|
22
22
|
require 'tmpdir'
|
23
|
+
require 'concurrent'
|
24
|
+
require 'concurrent/atomics'
|
23
25
|
require_relative 'test__helper'
|
24
26
|
require_relative '../lib/zold/log'
|
25
27
|
require_relative '../lib/zold/remotes'
|
28
|
+
require_relative '../lib/zold/verbose_thread'
|
26
29
|
|
27
30
|
# Remotes test.
|
28
31
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
@@ -122,4 +125,35 @@ class TestRemotes < Minitest::Test
|
|
122
125
|
end
|
123
126
|
end
|
124
127
|
end
|
128
|
+
|
129
|
+
def test_modifies_from_many_threads
|
130
|
+
Dir.mktmpdir 'test' do |dir|
|
131
|
+
remotes = Zold::Remotes.new(File.join(dir, 'a.csv'))
|
132
|
+
remotes.clean
|
133
|
+
threads = 5
|
134
|
+
pool = Concurrent::FixedThreadPool.new(threads)
|
135
|
+
alive = true
|
136
|
+
cycles = Concurrent::AtomicFixnum.new
|
137
|
+
success = Concurrent::AtomicFixnum.new
|
138
|
+
host = '192.168.0.1'
|
139
|
+
remotes.add(host)
|
140
|
+
threads.times do
|
141
|
+
pool.post do
|
142
|
+
while alive
|
143
|
+
Zold::VerboseThread.new(test_log).run(true) do
|
144
|
+
cycles.increment
|
145
|
+
remotes.error(host)
|
146
|
+
success.increment
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
sleep 0.1 while cycles.value < 50
|
152
|
+
alive = false
|
153
|
+
pool.shutdown
|
154
|
+
pool.wait_for_termination
|
155
|
+
assert_equal(cycles.value, success.value)
|
156
|
+
assert_equal(0, remotes.all.reject { |r| r[:host] == host }.size)
|
157
|
+
end
|
158
|
+
end
|
125
159
|
end
|