legion-crypt 1.5.1 → 1.5.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a988afa9a1eca8337d8355120b5c5b7ea5a7feb5333477db6c3d22b1a9714bc2
4
- data.tar.gz: '068dce6425c3bd706848b2daab7a8465b1b1a7ffe5aa207b386b6263685b2db6'
3
+ metadata.gz: 01cec7ac57c7d5448b5fba4237fdccc9ac8099966a4a546e95dd4888d838604f
4
+ data.tar.gz: ac81d602c9fc34493aeabe3fdeadd12f01fb36f8c248ac44687166fd24d9a48d
5
5
  SHA512:
6
- metadata.gz: 6467a8507feb5172ea8fc081ddfe30fc82fd7fff7591a24ea0e10bd822a1939e326d98b7b6e8c9efdb8efe0ae4eb7e58b1ac9973beba5bf880db77a37589183a
7
- data.tar.gz: c81cadc3cdc2cbbc78d51dcc8884b1f4a3259c00383f7ead23208443bf852cf606489e980bd01b2a3887d69f0b1c9de5aff6a889c33632a2c1c4a8172daaebf5
6
+ metadata.gz: dea3247dbaf00a49507ededcfdd72e9e3545485cbcec511657d2e2c602e03f2230c3c34e93108ae14ede71aa7a768a36573c3f852595444f2f6ed118a351bd8c
7
+ data.tar.gz: 011ac0f235a69f7655ab1237d2a87faf3d343de20ef1ffe1e9576b5a555e9c0e5d46dfc6d77dd137851835850e3877783c70f62a216c3dd1a4af9c3e080e9ed6
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Legion::Crypt
2
2
 
3
+ ## [1.5.2] - 2026-04-03
4
+
5
+ ### Fixed
6
+ - LeaseManager `at_exit` hook now wraps shutdown in a 10s timeout to prevent process hang when Logger Monitor or network I/O is blocked during crash exit
7
+
3
8
  ## [1.5.1] - 2026-04-03
4
9
 
5
10
  ### Fixed
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'legion/logging/helper'
4
4
  require 'singleton'
5
+ require 'timeout'
5
6
 
6
7
  module Legion
7
8
  module Crypt
@@ -45,16 +46,8 @@ module Legion
45
46
  next
46
47
  end
47
48
 
48
- @state_mutex.synchronize do
49
- @lease_cache[name] = response.data || {}
50
- @active_leases[name] = {
51
- lease_id: response.lease_id,
52
- lease_duration: response.lease_duration,
53
- renewable: response.renewable?,
54
- expires_at: Time.now + (response.lease_duration || 0),
55
- fetched_at: Time.now
56
- }
57
- end
49
+ log_lease_response(name, response)
50
+ cache_lease(name, response)
58
51
  log.info("LeaseManager: fetched lease for '#{name}' from #{path}")
59
52
  rescue StandardError => e
60
53
  handle_exception(e, level: :warn, operation: 'crypt.lease_manager.start', lease_name: name, path: path)
@@ -164,13 +157,42 @@ module Legion
164
157
  at_exit do
165
158
  next if @state_mutex.synchronize { @active_leases.empty? }
166
159
 
167
- shutdown
160
+ Timeout.timeout(10) { shutdown }
161
+ rescue Timeout::Error
162
+ warn '[LeaseManager] at_exit shutdown timed out after 10s'
168
163
  rescue StandardError # best effort on crash
169
164
  nil
170
165
  end
171
166
  @at_exit_registered = true
172
167
  end
173
168
 
169
+ def cache_lease(name, response)
170
+ @state_mutex.synchronize do
171
+ @lease_cache[name] = response.data || {}
172
+ @active_leases[name] = {
173
+ lease_id: response.lease_id,
174
+ lease_duration: response.lease_duration,
175
+ renewable: response.renewable?,
176
+ expires_at: Time.now + (response.lease_duration || 0),
177
+ fetched_at: Time.now
178
+ }
179
+ end
180
+ end
181
+
182
+ def log_lease_response(name, response)
183
+ data_keys = response.data&.keys&.map(&:to_s) || []
184
+ log.debug("LeaseManager[#{name}]: lease_id=#{response.lease_id}, " \
185
+ "lease_duration=#{response.lease_duration}s, " \
186
+ "renewable=#{response.renewable?}, " \
187
+ "data_keys=#{data_keys.inspect}")
188
+ return unless response.data&.key?(:username)
189
+
190
+ log.debug("LeaseManager[#{name}]: username=#{response.data[:username]}, " \
191
+ "password_length=#{response.data[:password]&.length || 0}, " \
192
+ "vhost=#{response.data[:vhost] || 'N/A'}, " \
193
+ "tags=#{response.data[:tags] || 'N/A'}")
194
+ end
195
+
174
196
  def logical
175
197
  client = @state_mutex.synchronize { @vault_client }
176
198
  client ? client.logical : ::Vault.logical
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Legion
4
4
  module Crypt
5
- VERSION = '1.5.1'
5
+ VERSION = '1.5.2'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legion-crypt
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity