zold 0.13.37 → 0.13.38
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/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
|