zold 0.23.2 → 0.23.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/zold/commands/fetch.rb +6 -3
- data/lib/zold/hungry_wallets.rb +8 -2
- data/lib/zold/node/nospam_entrance.rb +3 -1
- data/lib/zold/version.rb +1 -1
- data/test/fake_home.rb +1 -1
- data/test/test_hungry_wallets.rb +20 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dcee21bf3bb05178a256b359ede470686c37b7345357b7f719dd0c11a5d7d241
|
4
|
+
data.tar.gz: 3fceea07fea00200236a6222187bf31d025492983261a9c8d1d493eae748fc7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c060d5f127ab9a1ee2c26245473c7005255f2e5a9a71d9b9cbea1249ee3253b27e5e90de549b98931a2cdb2ee97f06ba7d0d23bf6f350fd204d708cef191f442
|
7
|
+
data.tar.gz: 428a4cc6a041e838add1fa192b8e53bf837c62567b4440e1287a6fcb684e4aee57f96c1bec3e0391e0a63e5330466b91f0a3ba72d8cfddca1f804a4d58ec2899
|
data/lib/zold/commands/fetch.rb
CHANGED
@@ -50,14 +50,17 @@ module Zold
|
|
50
50
|
class Fetch
|
51
51
|
prepend ThreadBadge
|
52
52
|
|
53
|
+
# Raises when fetch fails.
|
54
|
+
class Error < StandardError; end
|
55
|
+
|
53
56
|
# Raises when there are only edge nodes and not a single master one.
|
54
|
-
class EdgesOnly <
|
57
|
+
class EdgesOnly < Error; end
|
55
58
|
|
56
59
|
# Raises when there are not enough successful nodes.
|
57
|
-
class NoQuorum <
|
60
|
+
class NoQuorum < Error; end
|
58
61
|
|
59
62
|
# Raises when the wallet wasn't found in all visible nodes.
|
60
|
-
class NotFound <
|
63
|
+
class NotFound < Error; end
|
61
64
|
|
62
65
|
def initialize(wallets:, remotes:, copies:, log: Log::NULL)
|
63
66
|
@wallets = wallets
|
data/lib/zold/hungry_wallets.rb
CHANGED
@@ -21,6 +21,7 @@
|
|
21
21
|
# SOFTWARE.
|
22
22
|
|
23
23
|
require 'delegate'
|
24
|
+
require 'zache'
|
24
25
|
require_relative 'log'
|
25
26
|
require_relative 'thread_pool'
|
26
27
|
require_relative 'commands/pull'
|
@@ -44,6 +45,7 @@ module Zold
|
|
44
45
|
@pool = pool
|
45
46
|
@queue = []
|
46
47
|
@mutex = Mutex.new
|
48
|
+
@missed = Zache.new
|
47
49
|
@pool.add do
|
48
50
|
Endless.new('hungry', log: log).run { pull }
|
49
51
|
end
|
@@ -55,9 +57,12 @@ module Zold
|
|
55
57
|
unless wallet.exists?
|
56
58
|
if @queue.size > 256
|
57
59
|
@log.error("Hungry queue is full with #{@queue.size} wallets, can't add #{id}")
|
60
|
+
elsif @missed.exists?(id)
|
61
|
+
@log.error("Hungry queue has seen #{id} just #{Age.new(@missed.mtime(id))} and it was not-found")
|
58
62
|
else
|
59
63
|
@mutex.synchronize do
|
60
64
|
unless @queue.include?(id)
|
65
|
+
@missed.put(id, lifetime: 5 * 60)
|
61
66
|
@queue << id
|
62
67
|
@log.debug("Hungry queue got #{id}, at the pos no.#{@queue.size - 1}")
|
63
68
|
end
|
@@ -73,14 +78,15 @@ module Zold
|
|
73
78
|
def pull
|
74
79
|
id = @mutex.synchronize { @queue.pop }
|
75
80
|
if id.nil?
|
76
|
-
sleep
|
81
|
+
sleep 0.2
|
77
82
|
return
|
78
83
|
end
|
79
84
|
begin
|
80
85
|
Pull.new(wallets: @wallets, remotes: @remotes, copies: @copies, log: @log).run(
|
81
86
|
['pull', id.to_s, "--network=#{@network}", '--tolerate-edges', '--tolerate-quorum=1']
|
82
87
|
)
|
83
|
-
|
88
|
+
@missed.remove(id)
|
89
|
+
rescue Fetch::Error => e
|
84
90
|
@log.error("Can't hungry-pull #{id}: #{e.message}")
|
85
91
|
end
|
86
92
|
end
|
@@ -25,6 +25,7 @@ require 'openssl'
|
|
25
25
|
require 'zache'
|
26
26
|
require_relative '../log'
|
27
27
|
require_relative '../size'
|
28
|
+
require_relative '../age'
|
28
29
|
|
29
30
|
# The entrance that ignores something we've seen already.
|
30
31
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
@@ -54,7 +55,8 @@ module Zold
|
|
54
55
|
before = @zache.get(id.to_s, lifetime: @period) { '' }
|
55
56
|
after = hash(id, body)
|
56
57
|
if before == after
|
57
|
-
@log.debug("Spam of #{id} ignored #{Size.new(body.length)}
|
58
|
+
@log.debug("Spam of #{id} ignored; the wallet content of #{Size.new(body.length)} \
|
59
|
+
and '#{after[0..8]}' hash has already been seen #{Age.new(@zache.mtime(id.to_s))} ago")
|
58
60
|
return []
|
59
61
|
end
|
60
62
|
@zache.put(id.to_s, after)
|
data/lib/zold/version.rb
CHANGED
data/test/fake_home.rb
CHANGED
@@ -46,7 +46,7 @@ class FakeHome
|
|
46
46
|
Dir.mktmpdir do |dir|
|
47
47
|
FileUtils.copy(File.expand_path(File.join(__dir__, '../fixtures/id_rsa')), File.join(dir, 'id_rsa'))
|
48
48
|
result = yield FakeHome.new(dir, log: @log)
|
49
|
-
sleep 0.
|
49
|
+
sleep 0.5 # It's a workaround against a bug (without it tests fail sporadically)
|
50
50
|
result
|
51
51
|
end
|
52
52
|
end
|
data/test/test_hungry_wallets.rb
CHANGED
@@ -51,6 +51,26 @@ class TestHungryWallets < Zold::Test
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
+
def test_doesnt_pull_twice_if_not_found
|
55
|
+
FakeHome.new(log: test_log).run do |home|
|
56
|
+
id = Zold::Id.new
|
57
|
+
get = stub_request(:get, "http://localhost:4096/wallet/#{id}").to_return(status: 404)
|
58
|
+
remotes = home.remotes
|
59
|
+
remotes.add('localhost', 4096)
|
60
|
+
pool = Zold::ThreadPool.new('test', log: test_log)
|
61
|
+
wallets = Zold::HungryWallets.new(
|
62
|
+
home.wallets, remotes, File.join(home.dir, 'copies'),
|
63
|
+
pool, log: test_log
|
64
|
+
)
|
65
|
+
3.times do
|
66
|
+
wallets.acq(id) { |w| assert(!w.exists?) }
|
67
|
+
sleep 0.2
|
68
|
+
end
|
69
|
+
pool.join(2)
|
70
|
+
assert_requested(get, times: 1)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
54
74
|
def test_doesnt_pull_wallet_if_exists
|
55
75
|
FakeHome.new(log: test_log).run do |home|
|
56
76
|
pool = Zold::ThreadPool.new('test', log: test_log)
|
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.23.
|
4
|
+
version: 0.23.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yegor Bugayenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-02-
|
11
|
+
date: 2019-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: backtrace
|
@@ -753,7 +753,7 @@ licenses:
|
|
753
753
|
- MIT
|
754
754
|
metadata: {}
|
755
755
|
post_install_message: |-
|
756
|
-
Thanks for installing Zold 0.23.
|
756
|
+
Thanks for installing Zold 0.23.3!
|
757
757
|
Study our White Paper: https://papers.zold.io/wp.pdf
|
758
758
|
Read our blog posts: https://blog.zold.io
|
759
759
|
Try ZLD online wallet at: https://wts.zold.io
|