zold 0.21.0 → 0.21.1

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
  SHA256:
3
- metadata.gz: '08d854cecafd7b1690e4d00d3f10ab81e93c1a6ddc80691b7bd706a34e3914d6'
4
- data.tar.gz: e8d569ab7b6d48f7293e98b55bb2fe52be904dc83a9039dde605be1a306692c8
3
+ metadata.gz: 4a04c52513e6e44079e0e39a5245cf1075fe740990fa73b94c44217214bb0272
4
+ data.tar.gz: f9b6b3183b4f587184557dfa88af90a45511098af6b9682e08a113976a618b24
5
5
  SHA512:
6
- metadata.gz: 916db3539dfeb1a9307cb291192f10c30e2b10e566d2c222951b83bf0a1ff3db97488af147c926b924288abb899d2ac8b98845963f85ee2f1684293aa92b2091
7
- data.tar.gz: a874b08ca61533b78daec42dac0437195c1ab10360c83bdfe5469b893a04526e744d5e3ecbcb951b9e662fece172788e40d44097124afbe0f9b1fcf338d1968e
6
+ metadata.gz: dc7ca238f71aa8c628c535f5e65a017c24293cedba569995ec8e0006bf082c3f2ccf2049e85f67bfbc59039fe3e898ed3438a8ed26a389010f18972a1d9e1005
7
+ data.tar.gz: 9d2a309a544d9b0199bd732edb15ca08458e76b293f75dbe90d498f1eda6457927f83f7818aec3b5dcfb53e64a5c5764fbcfd0e00d827e0be8f839691e7c9025
@@ -14,7 +14,7 @@ release:
14
14
  [[ "${tag}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || exit -1
15
15
  # gem build zold.gemspec
16
16
  # gem install --local zold-0.0.0.gem
17
- # zold --version | grep -vq '0.0.0' && exit 1
17
+ # zold --version | grep -vq '0.0.0' && exit -1
18
18
  # zold remote update
19
19
  sed -i "s/0\.0\.0/${tag}/g" lib/zold/version.rb
20
20
  bundle install --no-color
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Guardfile for Zold
4
+ guard :minitest, all_after_pass: false, all_on_start: false do
5
+ # with Minitest::Unit
6
+ watch(%r{^test/(.*)\/?test_(.*)\.rb$})
7
+ watch(%r{^lib/zold/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
8
+ watch(%r{^test/test_helper\.rb$}) { 'test' }
9
+ end
@@ -149,8 +149,8 @@ module Zold
149
149
  'Skip Out Of Memory check and never exit, no matter how much RAM is consumed',
150
150
  default: false
151
151
  o.integer '--oom-limit',
152
- 'Maximum amount of memory we can consume, quit if we take more than that, in Mb (default: 512)',
153
- default: 512
152
+ "Maximum amount of memory we can consume, quit if we take more than that, in Mb (default: #{oom_limit})",
153
+ default: oom_limit
154
154
  o.integer '--queue-limit',
155
155
  'The maximum number of wallets to be accepted via PUSH and stored in the queue (default: 256)',
156
156
  default: 256
@@ -440,6 +440,14 @@ module Zold
440
440
  addr.ip_address
441
441
  end
442
442
 
443
+ def oom_limit
444
+ require 'total'
445
+ Total::Mem.new.bytes / (1024 * 1024) / 2
446
+ rescue Total::CantDetect => e
447
+ @log.error(e.message)
448
+ 512
449
+ end
450
+
443
451
  # Log facility for nohup
444
452
  class NohupLog
445
453
  def initialize(file, max)
@@ -244,12 +244,12 @@ this is not a normal behavior, you may want to report a bug to our GitHub reposi
244
244
  protocol: settings.protocol,
245
245
  id: wallet.id.to_s,
246
246
  score: score.to_h,
247
- wallets: total_wallets,
248
247
  mtime: wallet.mtime.utc.iso8601,
249
248
  size: wallet.size,
250
249
  digest: wallet.digest,
251
250
  copies: Copies.new(File.join(settings.copies, wallet.id)).all.count,
252
- balance: wallet.balance.to_i
251
+ balance: wallet.balance.to_i,
252
+ txns: wallet.txns.count
253
253
  )
254
254
  end
255
255
  end
@@ -443,7 +443,6 @@ time to stop; use --skip-oom to never quit")
443
443
  end
444
444
 
445
445
  def total_wallets
446
- return 256 unless settings.opts['no-cache']
447
446
  settings.zache.get(:wallets, lifetime: settings.opts['no-cache'] ? 0 : 60) do
448
447
  settings.wallets.count
449
448
  end
@@ -159,33 +159,25 @@ module Zold
159
159
  end
160
160
 
161
161
  def exists?(host, port = PORT)
162
- raise 'Port has to be of type Integer' unless port.is_a?(Integer)
163
- raise 'Host can\'t be nil' if host.nil?
164
- raise 'Port can\'t be nil' if port.nil?
162
+ assert_host_info(host, port)
165
163
  list = Futex.new(@file).open(false) { load }
166
164
  !list.find { |r| r[:host] == host.downcase && r[:port] == port }.nil?
167
165
  end
168
166
 
169
167
  def add(host, port = PORT)
170
- raise 'Host can\'t be nil' if host.nil?
171
- raise 'Host can\'t be empty' if host.empty?
172
- raise 'Port can\'t be nil' if port.nil?
173
- raise 'Port has to be of type Integer' unless port.is_a?(Integer)
174
- raise 'Port can\'t be zero' if port.zero?
175
- raise 'Port can\'t be negative' if port.negative?
176
- raise 'Port can\'t be over 65536' if port > 0xffff
168
+ assert_host_info(host, port)
177
169
  modify do |list|
178
170
  list + [{ host: host.downcase, port: port, score: 0, errors: 0 }]
179
171
  end
172
+ unerror(host, port)
180
173
  end
181
174
 
182
175
  def remove(host, port = PORT)
183
- raise 'Port has to be of type Integer' unless port.is_a?(Integer)
184
- raise 'Host can\'t be nil' if host.nil?
185
- raise 'Port can\'t be nil' if port.nil?
176
+ assert_host_info(host, port)
186
177
  modify do |list|
187
178
  list.reject { |r| r[:host] == host.downcase && r[:port] == port }
188
179
  end
180
+ unerror(host, port)
189
181
  end
190
182
 
191
183
  # Go through the list of remotes and call a provided block for each
@@ -208,6 +200,7 @@ module Zold
208
200
  network: @network
209
201
  )
210
202
  raise 'Took too long to execute' if (Time.now - start).round > @timeout
203
+ unerror(r[:host], r[:port])
211
204
  rescue StandardError => e
212
205
  error(r[:host], r[:port])
213
206
  log.info("#{Rainbow("#{r[:host]}:#{r[:port]}").red}: #{e.message} in #{Age.new(start)}")
@@ -218,19 +211,24 @@ module Zold
218
211
  end
219
212
 
220
213
  def error(host, port = PORT)
221
- raise 'Host can\'t be nil' if host.nil?
222
- raise 'Port can\'t be nil' if port.nil?
223
- raise 'Port has to be of type Integer' unless port.is_a?(Integer)
214
+ assert_host_info(host, port)
224
215
  if_present(host, port) { |r| r[:errors] += 1 }
225
216
  end
226
217
 
218
+ def unerror(host, port = PORT)
219
+ assert_host_info(host, port)
220
+
221
+ if_present(host, port) do |remote|
222
+ remote[:errors] -= 1 if (remote[:errors]).positive?
223
+ end
224
+ end
225
+
227
226
  def rescore(host, port, score)
228
- raise 'Host can\'t be nil' if host.nil?
229
- raise 'Port can\'t be nil' if port.nil?
227
+ assert_host_info(host, port)
230
228
  raise 'Score can\'t be nil' if score.nil?
231
- raise 'Port has to be of type Integer' unless port.is_a?(Integer)
232
229
  raise 'Score has to be of type Integer' unless score.is_a?(Integer)
233
230
  if_present(host, port) { |r| r[:score] = score }
231
+ unerror(host, port)
234
232
  end
235
233
 
236
234
  def mtime
@@ -289,5 +287,15 @@ module Zold
289
287
  []
290
288
  end
291
289
  end
290
+
291
+ def assert_host_info(host, port)
292
+ raise 'Host can\'t be nil' if host.nil?
293
+ raise 'Host can\'t be empty' if host.empty?
294
+ raise 'Port can\'t be nil' if port.nil?
295
+ raise 'Port has to be of type Integer' unless port.is_a?(Integer)
296
+ raise 'Port can\'t be zero' if port.zero?
297
+ raise 'Port can\'t be negative' if port.negative?
298
+ raise 'Port can\'t be over 65536' if port > 0xffff
299
+ end
292
300
  end
293
301
  end
@@ -25,7 +25,7 @@
25
25
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
26
26
  # License:: MIT
27
27
  module Zold
28
- VERSION = '0.21.0'
28
+ VERSION = '0.21.1'
29
29
  PROTOCOL = 2
30
30
  REPO = 'zold-io/zold'
31
31
  end
@@ -112,23 +112,17 @@ class TestHttp < Zold::Test
112
112
  end
113
113
  end
114
114
 
115
- # @todo #444:30min It's obvious that the test works (I can see that in
116
- # the console, but for some weird reason it doesn't work in Minitest. Try
117
- # to run it: ruby test/test_http.rb -n test_sends_correct_http_headers
118
- # If fails because of PUT HTTP request timeout. Let's find the problem,
119
- # fix it, and un-skip the test.
120
115
  def test_sends_correct_http_headers
121
- skip
122
116
  WebMock.allow_net_connect!
123
117
  body = ''
124
118
  RandomPort::Pool::SINGLETON.acquire do |port|
125
119
  thread = Thread.start do
126
120
  Zold::VerboseThread.new(test_log).run do
127
- server = TCPServer.new(port)
121
+ server = TCPServer.new('127.0.0.1', port)
128
122
  socket = server.accept
129
123
  loop do
130
124
  line = socket.gets
131
- break if line.nil?
125
+ break if line.eql?("\r\n")
132
126
  test_log.info(line.inspect)
133
127
  body += line
134
128
  end
@@ -261,6 +261,19 @@ class TestRemotes < Zold::Test
261
261
  end
262
262
  end
263
263
 
264
+ def test_unerror_remote
265
+ Dir.mktmpdir do |dir|
266
+ remotes = Zold::Remotes.new(file: File.join(dir, 'uu-90.csv'))
267
+ remotes.clean
268
+ remotes.add('192.168.0.1', 8081)
269
+ assert_equal remotes.all.last[:errors], 0
270
+ remotes.error('192.168.0.1', 8081)
271
+ assert_equal remotes.all.last[:errors], 1
272
+ remotes.unerror('192.168.0.1', 8081)
273
+ assert_equal remotes.all.last[:errors], 0
274
+ end
275
+ end
276
+
264
277
  def test_empty_remotes
265
278
  Time.stub :now, Time.mktime(2018, 1, 1) do
266
279
  remotes = Zold::Remotes::Empty.new
@@ -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.8.1'
68
+ s.add_runtime_dependency 'futex', '0.8.1'
69
69
  s.add_runtime_dependency 'get_process_mem', '~>0.2'
70
70
  s.add_runtime_dependency 'json', '2.1.0'
71
71
  s.add_runtime_dependency 'memory_profiler', '0.9.12'
@@ -81,12 +81,15 @@ and suggests a different architecture for digital wallet maintenance.'
81
81
  s.add_runtime_dependency 'sys-proctable', '1.2.1'
82
82
  s.add_runtime_dependency 'thin', '1.7.2'
83
83
  s.add_runtime_dependency 'threads', '>=0.3'
84
+ s.add_runtime_dependency 'total', '>=0.2.0'
84
85
  s.add_runtime_dependency 'typhoeus', '1.3.1'
85
86
  s.add_runtime_dependency 'usagewatch_ext', '0.2.1'
86
87
  s.add_runtime_dependency 'xcop', '>=0.6'
87
88
  s.add_runtime_dependency 'zache', '>=0.7.0'
88
89
  s.add_runtime_dependency 'zold-score', '0.4.4'
89
90
  s.add_development_dependency 'codecov', '0.1.13'
91
+ s.add_development_dependency 'guard', '2.15.0'
92
+ s.add_development_dependency 'guard-minitest', '2.4.6'
90
93
  s.add_development_dependency 'minitest', '5.11.3'
91
94
  s.add_development_dependency 'minitest-fail-fast', '0.1.0'
92
95
  s.add_development_dependency 'minitest-hooks', '1.5.0'
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.21.0
4
+ version: 0.21.1
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-24 00:00:00.000000000 Z
11
+ date: 2018-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backtrace
@@ -70,14 +70,14 @@ dependencies:
70
70
  name: futex
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - '='
74
74
  - !ruby/object:Gem::Version
75
75
  version: 0.8.1
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
82
  version: 0.8.1
83
83
  - !ruby/object:Gem::Dependency
@@ -290,6 +290,20 @@ dependencies:
290
290
  - - ">="
291
291
  - !ruby/object:Gem::Version
292
292
  version: '0.3'
293
+ - !ruby/object:Gem::Dependency
294
+ name: total
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - ">="
298
+ - !ruby/object:Gem::Version
299
+ version: 0.2.0
300
+ type: :runtime
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - ">="
305
+ - !ruby/object:Gem::Version
306
+ version: 0.2.0
293
307
  - !ruby/object:Gem::Dependency
294
308
  name: typhoeus
295
309
  requirement: !ruby/object:Gem::Requirement
@@ -374,6 +388,34 @@ dependencies:
374
388
  - - '='
375
389
  - !ruby/object:Gem::Version
376
390
  version: 0.1.13
391
+ - !ruby/object:Gem::Dependency
392
+ name: guard
393
+ requirement: !ruby/object:Gem::Requirement
394
+ requirements:
395
+ - - '='
396
+ - !ruby/object:Gem::Version
397
+ version: 2.15.0
398
+ type: :development
399
+ prerelease: false
400
+ version_requirements: !ruby/object:Gem::Requirement
401
+ requirements:
402
+ - - '='
403
+ - !ruby/object:Gem::Version
404
+ version: 2.15.0
405
+ - !ruby/object:Gem::Dependency
406
+ name: guard-minitest
407
+ requirement: !ruby/object:Gem::Requirement
408
+ requirements:
409
+ - - '='
410
+ - !ruby/object:Gem::Version
411
+ version: 2.4.6
412
+ type: :development
413
+ prerelease: false
414
+ version_requirements: !ruby/object:Gem::Requirement
415
+ requirements:
416
+ - - '='
417
+ - !ruby/object:Gem::Version
418
+ version: 2.4.6
377
419
  - !ruby/object:Gem::Dependency
378
420
  name: minitest
379
421
  requirement: !ruby/object:Gem::Requirement
@@ -504,6 +546,7 @@ files:
504
546
  - ".simplecov"
505
547
  - ".travis.yml"
506
548
  - Gemfile
549
+ - Guardfile
507
550
  - INSTALL.md
508
551
  - LICENSE.txt
509
552
  - Procfile
@@ -706,7 +749,7 @@ licenses:
706
749
  - MIT
707
750
  metadata: {}
708
751
  post_install_message: |-
709
- Thanks for installing Zold 0.21.0!
752
+ Thanks for installing Zold 0.21.1!
710
753
  Study our White Paper: https://papers.zold.io/wp.pdf
711
754
  Read our blog posts: https://blog.zold.io
712
755
  Try online wallet at: https://wts.zold.io