zold 0.14.25 → 0.14.26

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9b9ff618493d8f11a6c1afde18902fd7a314646f
4
- data.tar.gz: f71b0e5dfc59c87984577c4b89177b67553d67ac
3
+ metadata.gz: f4395e269936df99f2f80289e47287be347e2f3a
4
+ data.tar.gz: 5719f9f81b7c4c70860c67a1903cfc01b5dbe95c
5
5
  SHA512:
6
- metadata.gz: '038d20d582f5367e772aa240812a5bf4367417bf350417bec4d2cc206005ff128f77acb64aa1a2fe43c31ce9621b4639be0cbb43eedb2977ff0140628893eea8'
7
- data.tar.gz: c868c40269b7cb3504acb629ef40f7b24c3cd17ca9e2341ecaa0d1b2d61ce52fc031ddbac868b86c2abfae4dba03756d73141bbf411fa1bde044bb1cc6d4adcc
6
+ metadata.gz: b8849738bb1417903741cb729467ae2f96e1a244578a8702a0e4b0d69f674ba710587c17bed2ff023b639aed6d0825748f4e970f371dd7360a3d3692ab6a9898
7
+ data.tar.gz: 4d84feac840f4e4992025e8938ce24a62ec3d56d14b5393460984e8d8de907d8295f1b07b6f485b19f2e03342ff113d9dbeb4ceed5c0159229a4c0357dfe5f42
@@ -147,8 +147,8 @@ module Zold
147
147
  return unless s.port == port
148
148
  return unless s.strength >= strength
149
149
  Thread.current.name = s.to_mnemo
150
- cmd = "ruby #{File.join(File.dirname(__FILE__), '../../../bin/zold')} next \"#{s}\""
151
- Open3.popen2e(cmd) do |stdin, stdout, thr|
150
+ bin = File.expand_path(File.join(File.dirname(__FILE__), '../../../bin/zold'))
151
+ Open3.popen2e("ruby #{bin} next \"#{s}\"") do |stdin, stdout, thr|
152
152
  @log.debug("Score counting started in process ##{thr.pid}")
153
153
  begin
154
154
  stdin.close
data/lib/zold/remotes.rb CHANGED
@@ -168,13 +168,14 @@ module Zold
168
168
  def iterate(log, farm: Farm::Empty.new)
169
169
  raise 'Log can\'t be nil' if log.nil?
170
170
  raise 'Farm can\'t be nil' if farm.nil?
171
- return if all.empty?
171
+ list = all
172
+ return if list.empty?
172
173
  best = farm.best[0]
173
174
  require_relative 'score'
174
175
  score = best.nil? ? Score::ZERO : best
175
176
  idx = 0
176
- pool = Concurrent::FixedThreadPool.new([all.count, Concurrent.processor_count * 4].min, max_queue: 0)
177
- all.each do |r|
177
+ pool = Concurrent::FixedThreadPool.new([list.count, Concurrent.processor_count * 4].min, max_queue: 0)
178
+ list.each do |r|
178
179
  pool.post do
179
180
  Thread.current.abort_on_exception = true
180
181
  Thread.current.name = 'remotes'
@@ -192,9 +193,8 @@ module Zold
192
193
  raise 'Took too long to execute' if (Time.now - start).round > @timeout
193
194
  rescue StandardError => e
194
195
  error(r[:host], r[:port])
195
- errors = errors(r[:host], r[:port])
196
196
  log.info("#{Rainbow("#{r[:host]}:#{r[:port]}").red}: #{e.message} \
197
- in #{(Time.now - start).round}s; errors=#{errors}")
197
+ in #{(Time.now - start).round}s")
198
198
  log.debug(Backtrace.new(e).to_s)
199
199
  remove(r[:host], r[:port]) if errors > Remotes::TOLERANCE
200
200
  end
@@ -204,17 +204,6 @@ in #{(Time.now - start).round}s; errors=#{errors}")
204
204
  pool.kill unless pool.wait_for_termination(5 * 60)
205
205
  end
206
206
 
207
- def errors(host, port = Remotes::PORT)
208
- raise 'Host can\'t be nil' if host.nil?
209
- raise 'Port can\'t be nil' if port.nil?
210
- raise 'Port has to be of type Integer' unless port.is_a?(Integer)
211
- @mutex.synchronize do
212
- list = load
213
- raise "#{host}:#{port} is absent among #{list.count} remotes" unless exists?(host, port)
214
- list.find { |r| r[:host] == host.downcase && r[:port] == port }[:errors]
215
- end
216
- end
217
-
218
207
  def error(host, port = Remotes::PORT)
219
208
  raise 'Host can\'t be nil' if host.nil?
220
209
  raise 'Port can\'t be nil' if port.nil?
data/lib/zold/version.rb CHANGED
@@ -25,6 +25,6 @@
25
25
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
26
26
  # License:: MIT
27
27
  module Zold
28
- VERSION = '0.14.25'
28
+ VERSION = '0.14.26'
29
29
  PROTOCOL = 2
30
30
  end
data/test/test_remotes.rb CHANGED
@@ -215,6 +215,38 @@ class TestRemotes < Minitest::Test
215
215
  end
216
216
  end
217
217
 
218
+ def test_quickly_ads_and_reads
219
+ Dir.mktmpdir do |dir|
220
+ remotes = Zold::Remotes.new(file: File.join(dir, 'uu-90.csv'))
221
+ remotes.clean
222
+ threads = 20
223
+ pool = Concurrent::FixedThreadPool.new(threads)
224
+ done = Concurrent::AtomicFixnum.new
225
+ start = Time.now
226
+ alive = true
227
+ 100.times { |i| remotes.add('192.168.0.1', 8080 + i) }
228
+ threads.times do |i|
229
+ pool.post do
230
+ loop do
231
+ break unless alive
232
+ Zold::VerboseThread.new(test_log).run(true) do
233
+ remotes.add('127.0.0.1', 8080 + i)
234
+ remotes.error('127.0.0.1', 8080 + i)
235
+ remotes.all
236
+ remotes.iterate(test_log) { done.increment }
237
+ remotes.remove('127.0.0.1', 8080 + i)
238
+ end
239
+ end
240
+ end
241
+ end
242
+ sleep 0.1 while done.value < 1000
243
+ alive = false
244
+ pool.shutdown
245
+ pool.wait_for_termination(10)
246
+ test_log.info("Total time: #{Time.now - start}")
247
+ end
248
+ end
249
+
218
250
  def test_empty_remotes
219
251
  remotes = Zold::Remotes::Empty.new(file: '/tmp/empty')
220
252
  assert(remotes.is_a?(Zold::Remotes))
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zold
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.25
4
+ version: 0.14.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko