remotus 1.0.0 → 1.1.0

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: 86bb2b7b3be25ec98b48372e32f75f6ae70471bdb72635a44a1f50b20c1f5421
4
- data.tar.gz: a2f1b203c618ffb909bc55f7edd0718bd960d53b968ea5418f1a80c7ff05b9a6
3
+ metadata.gz: e6b07dbe42ab741bdb688bed9f6ce1d09ed2af8643291c57ec9aeedaaad0a19a
4
+ data.tar.gz: a39ecf434564157c1e72d98cf840abadc1a406f91988ee7c47cf7c22d9643760
5
5
  SHA512:
6
- metadata.gz: 28acc8709f9bcc670d175471973f309f76af530e4fb9cf1b566f58405ef4516fddc20dec63ca318c768c8f6247f6314d64838d2314fc5cf3f18a736f8fc24d38
7
- data.tar.gz: e8d1a7cb11844225214b55fb59de52c0af958e8640db57c15eefac3e92dc3cae63a8186165108158ca93da134961a08f163fd7e2d7ec381f84524587a2881e98
6
+ metadata.gz: f48c3e374b870a60664cf35838204755a83599a534113309abfecb40e5a5862f10091bd7bc19d8353a8a5716c71fe02dea043f891db998dd521451a998be4419
7
+ data.tar.gz: 0c3d1f3e5dfbae5c2aeaec9d18f3eb4f4b99759b4c883e3298691e7cad7a91fa71d03f595cffb9bab07f9191844284a211c5fb76ff7900af56791ea6ed9a6f2a
data/.gitignore CHANGED
@@ -9,3 +9,5 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+
13
+ .vscode
data/.rubocop.yml CHANGED
@@ -14,7 +14,7 @@ Layout/LineLength:
14
14
  Max: 150
15
15
 
16
16
  Metrics/ClassLength:
17
- Max: 250
17
+ Max: 300
18
18
 
19
19
  Metrics/BlockLength:
20
20
  Exclude:
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## [1.1.0] - 2023-05-25
2
+ * Improve exponential backoff during SSH retries.
3
+ * Force connection close on IOError (closed stream).
4
+
1
5
  ## [1.0.0] - 2023-04-25
2
6
  * Update SSH dependencies to handle `pkeys are immutable on OpenSSL 3.0` errors on newer Ruby versions
3
7
  * Remove Ruby 2.5 support
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- remotus (1.0.0)
4
+ remotus (1.1.0)
5
5
  connection_pool (~> 2.4)
6
6
  net-scp (~> 4.0)
7
7
  net-ssh (~> 7.1)
@@ -20,7 +20,7 @@ module Remotus
20
20
  KEEPALIVE_INTERVAL = 300
21
21
 
22
22
  # Number of default retries
23
- DEFAULT_RETRIES = 2
23
+ DEFAULT_RETRIES = 8
24
24
 
25
25
  # Base options for new SSH connections
26
26
  BASE_CONNECT_OPTIONS = { non_interactive: true, keepalive: true, keepalive_interval: KEEPALIVE_INTERVAL }.freeze
@@ -424,6 +424,8 @@ module Remotus
424
424
  # @param [Integer] retries number of retries
425
425
  #
426
426
  def with_retries(command, retries)
427
+ sleep_time = 1
428
+
427
429
  yield if block_given?
428
430
  rescue Remotus::AuthenticationError, Net::SSH::AuthenticationFailed => e
429
431
  # Re-raise exception if the retry count is exceeded
@@ -446,6 +448,12 @@ module Remotus
446
448
  retries -= 1
447
449
  raise if e.to_s != "closed stream" || retries.negative?
448
450
 
451
+ # Close the existing connection before retrying again
452
+ close
453
+
454
+ Remotus.logger.debug { "Sleeping for #{sleep_time} seconds before next retry..." }
455
+ sleep sleep_time
456
+ sleep_time *= 2 # Double delay for each retry
449
457
  retry
450
458
  end
451
459
 
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Remotus
4
4
  # Remotus gem version
5
- VERSION = "1.0.0"
5
+ VERSION = "1.1.0"
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: remotus
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Newell
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-04-25 00:00:00.000000000 Z
11
+ date: 2023-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: connection_pool