pgtk 0.31.2 → 0.31.4

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pgtk/pool.rb +22 -4
  3. data/lib/pgtk/version.rb +1 -1
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b7db2cc332dfccb4c405f590cc7aa64ffc55d1aa916aea3c0ea68379208c2568
4
- data.tar.gz: c7a03b2c8b6ccf2b931b1ab4d16bf83f352edeb0099c1d5fcc8f21a5f274a789
3
+ metadata.gz: b3a43722aa806c7c496234f00c186abac8cf07dfeb48e9baa97353fca08a1e0a
4
+ data.tar.gz: 63e903b575092c0bb62bf25b5aa96004723f4c4312bf3e16c4b5fc2af0b2b0c7
5
5
  SHA512:
6
- metadata.gz: d0e7ca8dc2192a5acb274b9e4b02fda11fdfaf471fe607c7d5d8ac0cf85cd8b527bb35f3de93f271102ba4b483a285452df5d6e1f308df8f503e987b42b10197
7
- data.tar.gz: d028000b4d1e869d9766105a7706f8b415f012a1c6f3254f2c2bdd6bb8578b97f27fd22f317cc06f7609ca3b79667814d60ca1713b21be3145a51b1b41e5d752
6
+ metadata.gz: d03c3c8458643fc95801a51b6d2fd4a61808ff934f2ac4341ea02b779d8ef688f44283f079b69a8d8bd02dc1d2733c07af4549dfcf8b41e3acceb5402083223e
7
+ data.tar.gz: 842c436ab8180751b612b55a5a0f113b3db10a101c1db9dd3adf1150ac2b5961c3baa5654a7d8c4cc44ccb788c77e495c0523a235ef0e2275f6c4b12729a8fa6
data/lib/pgtk/pool.rb CHANGED
@@ -219,9 +219,14 @@ class Pgtk::Pool
219
219
  r = yield(t)
220
220
  t.exec('COMMIT')
221
221
  r
222
- rescue StandardError => e
223
- t.exec('ROLLBACK')
224
- raise(e)
222
+ ensure
223
+ if c.transaction_status != PG::Constants::PQTRANS_IDLE
224
+ begin
225
+ t.exec('ROLLBACK')
226
+ rescue StandardError => e
227
+ @log.warn("Failed to rollback transaction: #{e.message}")
228
+ end
229
+ end
225
230
  end
226
231
  end
227
232
  end
@@ -343,16 +348,29 @@ class Pgtk::Pool
343
348
 
344
349
  def connect
345
350
  conn = @pool.pop
351
+ conn = renew(conn) if dead?(conn)
346
352
  begin
347
353
  yield(conn)
348
354
  rescue StandardError => e
349
- conn = renew(conn)
355
+ begin
356
+ conn = renew(conn)
357
+ rescue StandardError => re
358
+ @log.warn("Failed to renew connection after #{e.message}: #{re.message}")
359
+ end
350
360
  raise(e)
351
361
  ensure
352
362
  @pool.push(conn)
353
363
  end
354
364
  end
355
365
 
366
+ def dead?(conn)
367
+ conn.finished? ||
368
+ conn.status == PG::Constants::CONNECTION_BAD ||
369
+ conn.transaction_status != PG::Constants::PQTRANS_IDLE
370
+ rescue StandardError
371
+ true
372
+ end
373
+
356
374
  def renew(conn)
357
375
  begin
358
376
  conn.close unless conn.finished?
data/lib/pgtk/version.rb CHANGED
@@ -10,5 +10,5 @@ require_relative '../pgtk'
10
10
  # Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
11
11
  # License:: MIT
12
12
  module Pgtk
13
- VERSION = '0.31.2' unless defined?(VERSION)
13
+ VERSION = '0.31.4' unless defined?(VERSION)
14
14
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pgtk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.31.2
4
+ version: 0.31.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko