sparoid 1.0.18 → 1.0.20
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/CHANGELOG.md +9 -0
- data/lib/sparoid/version.rb +1 -1
- data/lib/sparoid.rb +16 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd5b6193a911ddfbe06a7a01a2ad1abe3b2c4f60c090aaac4b6b2b6c6ac3dd3e
|
4
|
+
data.tar.gz: 622b9465e33bc1b69072450cf619ac2dcf7bf6ac3b1a70276a5f56c4c0d36907
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e773ffe52658eecff5b673f0b886a7bd40118654d24602b5c7bd50dbd1dd9a37561b28d51e9dcc2d93557212081f282a6b855f026a22ef646e013ea4c827755
|
7
|
+
data.tar.gz: bff75047af985b79ee7a1fc53c40abb3f6d15f5cad4cff86f94430cb599c246ce0a240e20e6c8fd1c4c53a8f79c447b142c69669093409979d10265ce6aa34f9
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
## [1.0.20] - 2022-10-11
|
2
|
+
|
3
|
+
- Ignore EISCONN errors (already connected) error as BSD raises on second connect_nonblock
|
4
|
+
- Don't read from public ip disk cache in Sparoid::Instance
|
5
|
+
|
6
|
+
## [1.0.19] - 2022-10-11
|
7
|
+
|
8
|
+
- Fix nil error on timeout
|
9
|
+
|
1
10
|
## [1.0.18] - 2022-10-10
|
2
11
|
|
3
12
|
- Only resolv the IP(s) once
|
data/lib/sparoid/version.rb
CHANGED
data/lib/sparoid.rb
CHANGED
@@ -6,7 +6,7 @@ require "openssl"
|
|
6
6
|
require "resolv"
|
7
7
|
|
8
8
|
# Single Packet Authorisation client
|
9
|
-
module Sparoid
|
9
|
+
module Sparoid # rubocop:disable Metrics/ModuleLength
|
10
10
|
extend self
|
11
11
|
|
12
12
|
SPAROID_CACHE_PATH = ENV.fetch("SPAROID_CACHE_PATH", "/tmp/.sparoid_public_ip")
|
@@ -38,7 +38,7 @@ module Sparoid
|
|
38
38
|
end
|
39
39
|
|
40
40
|
# Connect to a TCP server and pass the FD to the parent
|
41
|
-
def fdpass(ips, port, connect_timeout: 10)
|
41
|
+
def fdpass(ips, port, connect_timeout: 10) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
42
42
|
# try connect to all IPs
|
43
43
|
sockets = ips.map do |ip|
|
44
44
|
Socket.new(Socket::AF_INET, Socket::SOCK_STREAM).tap do |s|
|
@@ -47,17 +47,22 @@ module Sparoid
|
|
47
47
|
end
|
48
48
|
# wait for any socket to be connected
|
49
49
|
until sockets.empty?
|
50
|
-
_, writeable, = IO.select(nil, sockets, nil, connect_timeout)
|
50
|
+
_, writeable, errors = IO.select(nil, sockets, nil, connect_timeout) || break
|
51
|
+
errors.each { |s| sockets.delete(s) }
|
51
52
|
writeable.each do |s|
|
52
53
|
idx = sockets.index(s)
|
53
54
|
sockets.delete_at(idx) # don't retry this socket again
|
54
55
|
ip = ips.delete_at(idx) # find the IP for the socket
|
55
|
-
|
56
|
+
begin
|
57
|
+
s.connect_nonblock(Socket.sockaddr_in(port, ip)) # check for errors
|
58
|
+
rescue Errno::EISCONN
|
59
|
+
# already connected, continue
|
60
|
+
rescue SystemCallError
|
61
|
+
next # skip connection errors, hopefully at least one succeeds
|
62
|
+
end
|
56
63
|
# pass the connected FD to the parent process over STDOUT
|
57
64
|
Socket.for_fd(1).sendmsg "\0", 0, nil, Socket::AncillaryData.unix_rights(s)
|
58
65
|
exit 0 # exit as fast as possible so that other sockets don't connect
|
59
|
-
rescue SystemCallError
|
60
|
-
next # ignore connection errors, hopefully at least one succeeds
|
61
66
|
end
|
62
67
|
end
|
63
68
|
exit 1 # all connections failed
|
@@ -129,7 +134,7 @@ module Sparoid
|
|
129
134
|
Resolv::IPv4.create f.read
|
130
135
|
end
|
131
136
|
rescue ArgumentError => e
|
132
|
-
return write_cache if
|
137
|
+
return write_cache if /cannot interpret as IPv4 address/.match?(e.message)
|
133
138
|
|
134
139
|
raise e
|
135
140
|
end
|
@@ -163,5 +168,9 @@ module Sparoid
|
|
163
168
|
def public_ip
|
164
169
|
@public_ip ||= super
|
165
170
|
end
|
171
|
+
|
172
|
+
def cached_public_ip
|
173
|
+
@public_ip
|
174
|
+
end
|
166
175
|
end
|
167
176
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sparoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.20
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carl Hörberg
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-10-
|
11
|
+
date: 2022-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|