zold 0.17.6 → 0.17.7
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/commands/node.rb +15 -7
- data/lib/zold/node/farmers.rb +59 -0
- data/lib/zold/remotes.rb +5 -5
- data/lib/zold/version.rb +1 -1
- data/test/node/test_farmers.rb +10 -3
- data/test/node/test_front.rb +1 -1
- data/zold.gemspec +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1fe6c89e0f94aab5d15fc27cbd8cd8b25ae870341eb056e442a568430c97b1fa
|
4
|
+
data.tar.gz: 55b3c18e4f6c223c521265b4ae1c7cb9c46b5e915df6dbe47f3c176ec0ad00d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 66998849bf25873d1814fee29109744bffddc9c19f39c179388a605b55f6414ec6bb9df72455c3e83439c85475268d752731cf74f574c5aab6e1fdf3505d0aa3
|
7
|
+
data.tar.gz: ecd1a71750d26762749ab24c931307713f7b8586ba09d865e324b209d441d3740ddb65df97c59d3409b19b88e22c6a8698881ccbe7d203c2ac9e91563f262edb
|
data/lib/zold/commands/node.rb
CHANGED
@@ -159,9 +159,9 @@ module Zold
|
|
159
159
|
default: false
|
160
160
|
o.string '--alias',
|
161
161
|
'The alias of the node (default: host:port)'
|
162
|
-
o.
|
163
|
-
'
|
164
|
-
default:
|
162
|
+
o.string '--farmer',
|
163
|
+
'The name of the farmer, e.g. "plain", "spawn", "fork" (default: "plain")',
|
164
|
+
default: 'plain'
|
165
165
|
o.bool '--help', 'Print instructions'
|
166
166
|
end
|
167
167
|
if opts.help?
|
@@ -276,11 +276,19 @@ module Zold
|
|
276
276
|
private
|
277
277
|
|
278
278
|
def farmer(opts)
|
279
|
-
|
280
|
-
|
281
|
-
|
279
|
+
case opts['farmer'].downcase.strip
|
280
|
+
when 'plain'
|
281
|
+
@log.debug('"Plain" farmer is used, only one CPU will be utilized')
|
282
|
+
Farmers::Plain.new
|
283
|
+
when 'fork'
|
284
|
+
@log.debug('"Fork" farmer is used')
|
285
|
+
Farmers::Fork.new(log: @log)
|
286
|
+
when 'spawn'
|
287
|
+
@log.debug('"Spawn" farmer is used')
|
288
|
+
Farmers::Spawn.new(log: @log)
|
289
|
+
else
|
290
|
+
raise "Farmer name is not recognized: #{opts['farmer']}"
|
282
291
|
end
|
283
|
-
Farmers::Fork.new(log: @log)
|
284
292
|
end
|
285
293
|
|
286
294
|
# Returns exit code
|
data/lib/zold/node/farmers.rb
CHANGED
@@ -77,5 +77,64 @@ for #{after.host}:#{after.port} in #{Age.new(start)}: #{after.suffixes}")
|
|
77
77
|
after
|
78
78
|
end
|
79
79
|
end
|
80
|
+
|
81
|
+
# In a child process
|
82
|
+
class Spawn
|
83
|
+
def initialize(log: Log::NULL)
|
84
|
+
@log = log
|
85
|
+
end
|
86
|
+
|
87
|
+
def up(score)
|
88
|
+
start = Time.now
|
89
|
+
bin = File.expand_path(File.join(File.dirname(__FILE__), '../../../bin/zold'))
|
90
|
+
raise "Zold binary not found at #{bin}" unless File.exist?(bin)
|
91
|
+
cmd = [
|
92
|
+
'ruby',
|
93
|
+
Shellwords.escape(bin),
|
94
|
+
'--skip-upgrades',
|
95
|
+
"--info-tid=#{Thread.current.thread_variable_get(:tid)}",
|
96
|
+
"--info-thread=#{Shellwords.escape(Thread.current.name)}",
|
97
|
+
"--info-start=#{Time.now.utc.iso8601}",
|
98
|
+
'--low-priority',
|
99
|
+
'next',
|
100
|
+
Shellwords.escape(score)
|
101
|
+
].join(' ')
|
102
|
+
Open3.popen2e(cmd) do |stdin, stdout, thr|
|
103
|
+
Thread.current.thread_variable_set(:pid, thr.pid.to_s)
|
104
|
+
at_exit { Farmers.kill(@log, thr.pid, start) }
|
105
|
+
@log.debug("Scoring started in proc ##{thr.pid} \
|
106
|
+
for #{score.value}/#{score.strength} at #{score.host}:#{score.port}")
|
107
|
+
begin
|
108
|
+
stdin.close
|
109
|
+
buffer = +''
|
110
|
+
loop do
|
111
|
+
begin
|
112
|
+
buffer << stdout.read_nonblock(16 * 1024)
|
113
|
+
# rubocop:disable Lint/HandleExceptions
|
114
|
+
rescue IO::WaitReadable => _
|
115
|
+
# rubocop:enable Lint/HandleExceptions
|
116
|
+
# nothing to do here
|
117
|
+
rescue StandardError => e
|
118
|
+
@log.error(buffer)
|
119
|
+
raise e
|
120
|
+
end
|
121
|
+
break if buffer.end_with?("\n") && thr.value.to_i.zero?
|
122
|
+
if stdout.closed?
|
123
|
+
raise "Failed to calculate the score (##{thr.value}): #{buffer}" unless thr.value.to_i.zero?
|
124
|
+
break
|
125
|
+
end
|
126
|
+
sleep(1)
|
127
|
+
Thread.current.thread_variable_set(:buffer, buffer.length.to_s)
|
128
|
+
end
|
129
|
+
after = Score.parse(buffer.strip)
|
130
|
+
@log.debug("Next score #{after.value}/#{after.strength} found in proc ##{thr.pid} \
|
131
|
+
for #{after.host}:#{after.port} in #{Age.new(start)}: #{after.suffixes}")
|
132
|
+
after
|
133
|
+
ensure
|
134
|
+
Farmers.kill(@log, thr.pid, start)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
80
139
|
end
|
81
140
|
end
|
data/lib/zold/remotes.rb
CHANGED
@@ -104,21 +104,21 @@ module Zold
|
|
104
104
|
|
105
105
|
def assert_valid_score(score)
|
106
106
|
raise "Invalid score #{score}" unless score.valid?
|
107
|
-
raise "Expired score (#{Age.new(score.time)}) #{score.
|
107
|
+
raise "Expired score (#{Age.new(score.time)}) #{score.reduced(4)}" if score.expired?
|
108
108
|
end
|
109
109
|
|
110
110
|
def assert_score_ownership(score)
|
111
|
-
raise "Masqueraded host #{@host} as #{score.host}: #{score.
|
112
|
-
raise "Masqueraded port #{@port} as #{score.port}: #{score.
|
111
|
+
raise "Masqueraded host #{@host} as #{score.host}: #{score.reduced(4)}" if @host != score.host
|
112
|
+
raise "Masqueraded port #{@port} as #{score.port}: #{score.reduced(4)}" if @port != score.port
|
113
113
|
end
|
114
114
|
|
115
115
|
def assert_score_strength(score)
|
116
116
|
return if score.strength >= Score::STRENGTH
|
117
|
-
raise "Score #{score.strength} is too weak (<#{Score::STRENGTH}): #{score.
|
117
|
+
raise "Score #{score.strength} is too weak (<#{Score::STRENGTH}): #{score.reduced(4)}"
|
118
118
|
end
|
119
119
|
|
120
120
|
def assert_score_value(score, min)
|
121
|
-
raise "Score #{score.value} is too small (<#{min}): #{score.
|
121
|
+
raise "Score #{score.value} is too small (<#{min}): #{score.reduced(4)}" if score.value < min
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
data/lib/zold/version.rb
CHANGED
data/test/node/test_farmers.rb
CHANGED
@@ -28,9 +28,16 @@ require_relative '../../lib/zold/node/farmers'
|
|
28
28
|
require_relative '../../lib/zold/verbose_thread'
|
29
29
|
|
30
30
|
class FarmersTest < Zold::Test
|
31
|
+
# Types to test
|
32
|
+
TYPES = [
|
33
|
+
Zold::Farmers::Plain,
|
34
|
+
Zold::Farmers::Spawn,
|
35
|
+
Zold::Farmers::Fork
|
36
|
+
].freeze
|
37
|
+
|
31
38
|
def test_calculates_next_score
|
32
39
|
before = Zold::Score.new(host: 'some-host', port: 9999, invoice: 'NOPREFIX4@ffffffffffffffff', strength: 3)
|
33
|
-
|
40
|
+
TYPES.each do |farmer_class|
|
34
41
|
farmer = farmer_class.new(log: test_log)
|
35
42
|
after = farmer.up(before)
|
36
43
|
assert_equal(1, after.value)
|
@@ -41,7 +48,7 @@ class FarmersTest < Zold::Test
|
|
41
48
|
end
|
42
49
|
|
43
50
|
def test_calculates_large_score
|
44
|
-
|
51
|
+
TYPES.each do |type|
|
45
52
|
log = TestLogger.new(test_log)
|
46
53
|
thread = Thread.start do
|
47
54
|
farmer = type.new(log: log)
|
@@ -54,7 +61,7 @@ class FarmersTest < Zold::Test
|
|
54
61
|
end
|
55
62
|
|
56
63
|
def test_kills_farmer
|
57
|
-
|
64
|
+
TYPES.each do |type|
|
58
65
|
farmer = type.new(log: test_log)
|
59
66
|
thread = Thread.start do
|
60
67
|
Zold::VerboseThread.new(test_log).run do
|
data/test/node/test_front.rb
CHANGED
@@ -283,7 +283,7 @@ class FrontTest < Zold::Test
|
|
283
283
|
# HTTP request. This value is enough to identify a valueable node, and filter
|
284
284
|
# out those that are too weak.
|
285
285
|
def test_score_is_reduced
|
286
|
-
FakeNode.new(log: test_log).run(['--threads=1', '--strength=1', '--no-metronome', '--
|
286
|
+
FakeNode.new(log: test_log).run(['--threads=1', '--strength=1', '--no-metronome', '--farmer=plain']) do |port|
|
287
287
|
res = Zold::Http.new(uri: URI("http://localhost:#{port}/")).get
|
288
288
|
assert_wait { Zold::Score.parse(res.headers[Zold::Http::SCORE_HEADER]).value > Zold::Front::MIN_SCORE - 1 }
|
289
289
|
sleep(1)
|
data/zold.gemspec
CHANGED
@@ -65,7 +65,7 @@ and suggests a different architecture for digital wallet maintenance.'
|
|
65
65
|
s.add_runtime_dependency 'concurrent-ruby', '1.1.3'
|
66
66
|
s.add_runtime_dependency 'cucumber', '3.1.2' # has to stay here for Heroku
|
67
67
|
s.add_runtime_dependency 'diffy', '3.2.1'
|
68
|
-
s.add_runtime_dependency 'futex', '0.6.
|
68
|
+
s.add_runtime_dependency 'futex', '0.6.2'
|
69
69
|
s.add_runtime_dependency 'get_process_mem', '0.2.3'
|
70
70
|
s.add_runtime_dependency 'json', '2.1.0'
|
71
71
|
s.add_runtime_dependency 'memory_profiler', '0.9.12'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zold
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.17.
|
4
|
+
version: 0.17.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yegor Bugayenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: backtrace
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - '='
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.6.
|
75
|
+
version: 0.6.2
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - '='
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.6.
|
82
|
+
version: 0.6.2
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: get_process_mem
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -700,7 +700,7 @@ licenses:
|
|
700
700
|
- MIT
|
701
701
|
metadata: {}
|
702
702
|
post_install_message: |-
|
703
|
-
Thanks for installing Zold 0.17.
|
703
|
+
Thanks for installing Zold 0.17.7!
|
704
704
|
Study our White Paper: https://papers.zold.io/wp.pdf
|
705
705
|
Read our blog posts: https://blog.zold.io
|
706
706
|
Try online wallet at: https://wts.zold.io
|