zold 0.13.33 → 0.13.34

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: a7fc6c26e23e3a3d056b786a847f4ea01b4f8763
4
- data.tar.gz: f43869756f2b8eb4a7d63e22c6392ee297483246
3
+ metadata.gz: b72e9cbc1d475ad37e79d6f26dd0826702162b0a
4
+ data.tar.gz: 1a423d084caf176481696a30e800c30910681775
5
5
  SHA512:
6
- metadata.gz: 896be48716e75a94ff60de18c026ca36eeba4a558d2fbad47a7aa934dab4543724d23df676e778a20f28c19a2aa93a8504a1a099832f04013626adc4f3568534
7
- data.tar.gz: 34aed103cece3a518ea2d9d17a8f5c03e2ee7ba495341a0e8a50ae85c32115a3717811eba5118661d6e35424032736f7a0f26f37e7fdd2f25a80fe93a28332a3
6
+ metadata.gz: 017c6255d34f34f137acfb403a8e9123aba9442579b0824d50c63ab45f4aa739e120a629d1f39c72386e644c0b3861476a013acd851738e62f18a26c3c77f435
7
+ data.tar.gz: 8dd19ab2329b2c78abbe39ffb9f06e8d2cc0d37b2b675887627970368082137f2cdd9438dbfa3707321ad593d54688796fbf86d95b6ab223484f825eb7ac40bd
@@ -20,7 +20,7 @@ low=$(reserve_port)
20
20
  secondary=$(start_node ${low} 1.1.1)
21
21
  zold remote add localhost ${high} --home=${low}
22
22
 
23
- trap "kill -9 ${primary}; kill -9 ${secondary}" EXIT
23
+ trap "kill -9 ${primary} ${secondary}" EXIT
24
24
 
25
25
  wait_for_file ${low}/restarted
26
26
 
@@ -157,14 +157,11 @@ module Zold
157
157
  farm = Farm.new(invoice, File.join(Dir.pwd, 'farm'), log: @log)
158
158
  farm.start(host, opts[:port], threads: opts[:threads], strength: opts[:strength]) do
159
159
  Front.set(:farm, farm)
160
- metronome = metronome(farm, entrance, opts)
161
- Front.set(:metronome, metronome)
162
- begin
160
+ metronome(farm, entrance, opts).start do |metronome|
161
+ Front.set(:metronome, metronome)
163
162
  @log.info("Starting up the web front at http://#{host}:#{opts[:port]}...")
164
163
  Front.run!
165
164
  @log.info("The web front stopped at http://#{host}:#{opts[:port]}")
166
- ensure
167
- metronome.stop
168
165
  end
169
166
  end
170
167
  end
@@ -20,6 +20,7 @@
20
20
 
21
21
  require_relative 'log'
22
22
  require_relative 'verbose_thread'
23
+ require_relative 'backtrace'
23
24
 
24
25
  # Background routines.
25
26
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
@@ -30,33 +31,50 @@ module Zold
30
31
  class Metronome
31
32
  def initialize(log = Log::Quiet.new)
32
33
  @log = log
34
+ @routines = []
33
35
  @threads = []
36
+ @failures = {}
34
37
  end
35
38
 
36
39
  def to_text
37
40
  @threads.map do |t|
38
41
  "#{t.name}: status=#{t.status}; alive=#{t.alive?};\n #{t.backtrace.join("\n ")}"
39
- end.join("\n")
42
+ end.join("\n") + "\n\n" + @failures.map { |r, f| "#{r}\n#{f}\n" }.join("\n")
40
43
  end
41
44
 
42
45
  def add(routine)
43
- @threads << Thread.start do
44
- Thread.current.name = routine.class.name
45
- step = 0
46
- loop do
47
- start = Time.now
48
- VerboseThread.new(@log).run(true) do
49
- routine.exec(step)
50
- end
51
- step += 1
52
- @log.info("Routine #{routine.class.name} ##{step} done in #{(Time.now - start).round(2)}s: \
46
+ @routines << routine
47
+ @log.info("Added #{routine.class.name} to the metronome")
48
+ end
49
+
50
+ def start
51
+ @routines.each do |r|
52
+ @threads << Thread.start do
53
+ Thread.current.name = r.class.name
54
+ step = 0
55
+ loop do
56
+ start = Time.now
57
+ begin
58
+ r.exec(step)
59
+ rescue StandardError => e
60
+ @failures[r.class.name] = Backtrace.new(e).to_s
61
+ end
62
+ step += 1
63
+ @log.info("Routine #{r.class.name} ##{step} done in #{(Time.now - start).round(2)}s: \
53
64
  #{@threads.map { |t| "#{t.name}/#{t.status}" }.join(',')}")
54
- sleep(1)
65
+ sleep(1)
66
+ end
55
67
  end
56
68
  end
57
- @log.info("Added #{routine.class.name} to the metronome")
69
+ begin
70
+ yield(self)
71
+ ensure
72
+ stop
73
+ end
58
74
  end
59
75
 
76
+ private
77
+
60
78
  def stop
61
79
  @log.info("Terminating the metronome with #{@threads.count} threads...")
62
80
  start = Time.now
@@ -65,7 +83,7 @@ module Zold
65
83
  t.exit
66
84
  @log.info("Thread #{t.name} terminated in #{(Time.now - tstart).round(2)}s")
67
85
  end
68
- @log.info("Metronome stopped in #{(Time.now - start).round(2)}s")
86
+ @log.info("Metronome stopped in #{(Time.now - start).round(2)}s, #{@failures.count} failures")
69
87
  end
70
88
  end
71
89
  end
data/lib/zold/version.rb CHANGED
@@ -23,5 +23,5 @@
23
23
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
24
24
  # License:: MIT
25
25
  module Zold
26
- VERSION = '0.13.33'.freeze
26
+ VERSION = '0.13.34'.freeze
27
27
  end
@@ -30,6 +30,10 @@ require_relative '../../lib/zold/verbose_thread'
30
30
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
31
31
  # License:: MIT
32
32
  class FakeNode
33
+ # rubocop:disable Style/ClassVars
34
+ @@ports = Set.new
35
+ # rubocop:enable Style/ClassVars
36
+
33
37
  def initialize(log: Zold::Log::Quiet.new)
34
38
  @log = log
35
39
  end
@@ -70,4 +74,15 @@ class FakeNode
70
74
  end
71
75
  end
72
76
  end
77
+
78
+ def self.port
79
+ loop do
80
+ server = TCPServer.new('127.0.0.1', 0)
81
+ port = server.addr[1]
82
+ server.close
83
+ next if @@ports.include?(port)
84
+ @@ports << port
85
+ port
86
+ end
87
+ end
73
88
  end
@@ -31,18 +31,28 @@ class TestMetronome < Minitest::Test
31
31
  metronome = Zold::Metronome.new(test_log)
32
32
  list = []
33
33
  metronome.add(FakeRoutine.new(list))
34
- sleep 0.1 while list.empty?
35
- metronome.stop
36
- assert_equal(1, list.count)
34
+ metronome.start do
35
+ sleep 0.1 while list.empty?
36
+ assert_equal(1, list.count)
37
+ end
38
+ end
39
+
40
+ def test_prints_to_text
41
+ metronome = Zold::Metronome.new(test_log)
42
+ metronome.add(FakeRoutine.new([]))
43
+ metronome.start do |m|
44
+ assert(!m.to_text.nil?)
45
+ end
37
46
  end
38
47
 
39
48
  def test_continues_even_after_error
40
49
  metronome = Zold::Metronome.new(test_log)
41
50
  routine = BrokenRoutine.new
42
51
  metronome.add(routine)
43
- sleep 0.1 while routine.count < 2
44
- metronome.stop
45
- assert(routine.count > 1)
52
+ metronome.start do
53
+ sleep 0.1 while routine.count < 2
54
+ assert(routine.count > 1)
55
+ end
46
56
  end
47
57
 
48
58
  class FakeRoutine
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.13.33
4
+ version: 0.13.34
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko