From 19cf2d993bafe8b5fe00695dd7635e3a55980ebc Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 30 Sep 2025 00:53:57 +0000 Subject: [PATCH 1/3] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 0b87763c..f51f792c 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 214 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/increase%2Fincrease-57a965663739666faa0c7699e48af1185389436a2c4fd774e28d86cb7b1c69ba.yml -openapi_spec_hash: cd4681291bf755562f76ae6a1ead73a3 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/increase%2Fincrease-878472ce6c3df1541bd6f2924ca987acc43fec7409cb06e6fe129638f9b6fb72.yml +openapi_spec_hash: 69facc862aa08df8ca458569028663e7 config_hash: a143293c5450ae8f52acad08f3102575 From 78dc8152fc1d9ca7f849cf0d9cce6c49e5d80f96 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:12:24 +0000 Subject: [PATCH 2/3] fix: coroutine leaks from connection pool --- .../transport/pooled_net_requester.rb | 17 ++++++------- test/increase/internal/util_test.rb | 25 +++++++++++++++++++ 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/lib/increase/internal/transport/pooled_net_requester.rb b/lib/increase/internal/transport/pooled_net_requester.rb index 247b064e..480f7ed7 100644 --- a/lib/increase/internal/transport/pooled_net_requester.rb +++ b/lib/increase/internal/transport/pooled_net_requester.rb @@ -134,9 +134,9 @@ def execute(request) # rubocop:disable Metrics/BlockLength enum = Enumerator.new do |y| - with_pool(url, deadline: deadline) do |conn| - next if finished + next if finished + with_pool(url, deadline: deadline) do |conn| req, closing = self.class.build_request(request) do self.class.calibrate_socket_timeout(conn, deadline) end @@ -149,7 +149,7 @@ def execute(request) self.class.calibrate_socket_timeout(conn, deadline) conn.request(req) do |rsp| - y << [conn, req, rsp] + y << [req, rsp] break if finished rsp.read_body do |bytes| @@ -160,6 +160,8 @@ def execute(request) end eof = true end + ensure + conn.finish if !eof && conn&.started? end rescue Timeout::Error raise Increase::Errors::APITimeoutError.new(url: url, request: req) @@ -168,16 +170,11 @@ def execute(request) end # rubocop:enable Metrics/BlockLength - conn, _, response = enum.next + _, response = enum.next body = Increase::Internal::Util.fused_enum(enum, external: true) do finished = true - tap do - enum.next - rescue StopIteration - nil - end + loop { enum.next } ensure - conn.finish if !eof && conn&.started? closing&.call end [Integer(response.code), response, body] diff --git a/test/increase/internal/util_test.rb b/test/increase/internal/util_test.rb index 681d1cf4..33819c0c 100644 --- a/test/increase/internal/util_test.rb +++ b/test/increase/internal/util_test.rb @@ -310,6 +310,31 @@ def test_copy_write end class Increase::Test::UtilFusedEnumTest < Minitest::Test + def test_rewind_closing + touched = false + once = 0 + steps = 0 + enum = Enumerator.new do |y| + next if touched + + 10.times do + steps = _1 + y << _1 + end + ensure + once = once.succ + end + + fused = Increase::Internal::Util.fused_enum(enum, external: true) do + touched = true + loop { enum.next } + end + Increase::Internal::Util.close_fused!(fused) + + assert_equal(1, once) + assert_equal(0, steps) + end + def test_closing arr = [1, 2, 3] once = 0 From 30aac8a87c8ff227a8932d03777046d500314a6a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:12:45 +0000 Subject: [PATCH 3/3] release: 1.97.1 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ Gemfile.lock | 2 +- README.md | 2 +- lib/increase/version.rb | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 7b33636f..9cdfd7b0 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.97.0" + ".": "1.97.1" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cc0cbea..b5b8c964 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 1.97.1 (2025-09-30) + +Full Changelog: [v1.97.0...v1.97.1](https://github.com/Increase/increase-ruby/compare/v1.97.0...v1.97.1) + +### Bug Fixes + +* coroutine leaks from connection pool ([78dc815](https://github.com/Increase/increase-ruby/commit/78dc8152fc1d9ca7f849cf0d9cce6c49e5d80f96)) + ## 1.97.0 (2025-09-29) Full Changelog: [v1.96.0...v1.97.0](https://github.com/Increase/increase-ruby/compare/v1.96.0...v1.97.0) diff --git a/Gemfile.lock b/Gemfile.lock index 8a36b3eb..42bf432a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -11,7 +11,7 @@ GIT PATH remote: . specs: - increase (1.97.0) + increase (1.97.1) connection_pool GEM diff --git a/README.md b/README.md index 6cd1edc4..8ab32c85 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ To use this gem, install via Bundler by adding the following to your application ```ruby -gem "increase", "~> 1.97.0" +gem "increase", "~> 1.97.1" ``` diff --git a/lib/increase/version.rb b/lib/increase/version.rb index d7cea7e3..bcdf7815 100644 --- a/lib/increase/version.rb +++ b/lib/increase/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Increase - VERSION = "1.97.0" + VERSION = "1.97.1" end