From 3bab58bba7a130cab2c49ee4f031cc02a356b921 Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Sat, 28 Dec 2019 15:38:04 +1300 Subject: [PATCH 1/4] Add 2.7 to travis test matrix. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ed343cd..3c28393 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,10 +4,10 @@ cache: bundler matrix: include: - - rvm: 2.3 - rvm: 2.4 - rvm: 2.5 - rvm: 2.6 + - rvm: 2.7 - rvm: 2.6 env: COVERAGE=BriefSummary,Coveralls - rvm: ruby-head From ed9fed3099f4e2adc44e78c27ed15f279c985e92 Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Thu, 23 Apr 2020 22:28:51 +1200 Subject: [PATCH 2/4] Prefer bake-bundler / githuh actions. --- .github/workflows/development.yml | 51 +++++++++++++++++++++++++++++++ .travis.yml | 20 ------------ Gemfile | 2 ++ README.md | 2 +- Rakefile | 6 ---- async-pool.gemspec | 2 +- 6 files changed, 55 insertions(+), 28 deletions(-) create mode 100644 .github/workflows/development.yml delete mode 100644 .travis.yml delete mode 100644 Rakefile diff --git a/.github/workflows/development.yml b/.github/workflows/development.yml new file mode 100644 index 0000000..ea11ed2 --- /dev/null +++ b/.github/workflows/development.yml @@ -0,0 +1,51 @@ +name: Development + +on: [push, pull_request] + +jobs: + test: + runs-on: ${{matrix.os}}-latest + continue-on-error: ${{matrix.experimental}} + + strategy: + matrix: + os: + - ubuntu + - macos + + ruby: + - 2.5 + - 2.6 + - 2.7 + + experimental: [false] + env: [""] + + include: + - os: ubuntu + ruby: truffleruby + experimental: true + env: JRUBY_OPTS="--debug -X+O" + - os: ubuntu + ruby: jruby + experimental: true + - os: ubuntu + ruby: head + experimental: true + - os: ubuntu + ruby: 2.6 + experimental: false + env: COVERAGE=PartialSummary,Coveralls + + steps: + - uses: actions/checkout@v1 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{matrix.ruby}} + + - name: Install dependencies + run: ${{matrix.env}} bundle install + + - name: Run tests + timeout-minutes: 5 + run: ${{matrix.env}} bundle exec rspec diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 3c28393..0000000 --- a/.travis.yml +++ /dev/null @@ -1,20 +0,0 @@ -language: ruby -dist: xenial -cache: bundler - -matrix: - include: - - rvm: 2.4 - - rvm: 2.5 - - rvm: 2.6 - - rvm: 2.7 - - rvm: 2.6 - env: COVERAGE=BriefSummary,Coveralls - - rvm: ruby-head - - rvm: truffleruby - - rvm: jruby-head - env: JRUBY_OPTS="--debug -X+O" - allow_failures: - - rvm: ruby-head - - rvm: truffleruby - - rvm: jruby-head diff --git a/Gemfile b/Gemfile index fa75df1..e8a2d78 100644 --- a/Gemfile +++ b/Gemfile @@ -1,3 +1,5 @@ source 'https://rubygems.org' gemspec + +# gem "async", path: "../async" diff --git a/README.md b/README.md index ae6aae1..b13de8d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Provides support for connection pooling both singleplex and multiplex resources. -[![Build Status](https://travis-ci.com/socketry/async-pool.svg)](https://travis-ci.com/socketry/async-pool) +[![Actions Status](https://github.com/socketry/async-pool/workflows/Development/badge.svg)](https://github.com/socketry/async-pool/actions?workflow=Development) ## Installation diff --git a/Rakefile b/Rakefile deleted file mode 100644 index a1d8b92..0000000 --- a/Rakefile +++ /dev/null @@ -1,6 +0,0 @@ -require "bundler/gem_tasks" -require "rspec/core/rake_task" - -RSpec::Core::RakeTask.new - -task :default => :spec diff --git a/async-pool.gemspec b/async-pool.gemspec index 07e934a..85450e5 100644 --- a/async-pool.gemspec +++ b/async-pool.gemspec @@ -24,5 +24,5 @@ Gem::Specification.new do |spec| spec.add_development_dependency "covered" spec.add_development_dependency "bundler" spec.add_development_dependency "rspec", "~> 3.6" - spec.add_development_dependency "rake" + spec.add_development_dependency "bake-bundler" end From 80def7daf129ef4976421c179f132f1be19b020e Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Thu, 23 Apr 2020 22:29:23 +1200 Subject: [PATCH 3/4] Add the gardener who tends to the resource pool. --- async-pool.gemspec | 2 +- lib/async/pool/controller.rb | 19 +++++++++++++++++++ spec/async/pool/controller_spec.rb | 19 +++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/async-pool.gemspec b/async-pool.gemspec index 85450e5..7cd79f6 100644 --- a/async-pool.gemspec +++ b/async-pool.gemspec @@ -17,7 +17,7 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } spec.require_paths = ["lib"] - spec.add_dependency("async", "~> 1.8") + spec.add_dependency("async", "~> 1.25") spec.add_development_dependency "async-rspec", "~> 1.1" diff --git a/lib/async/pool/controller.rb b/lib/async/pool/controller.rb index 40fc03e..aaf9d6e 100644 --- a/lib/async/pool/controller.rb +++ b/lib/async/pool/controller.rb @@ -40,6 +40,8 @@ def initialize(constructor, limit: nil) @constructor = constructor @guard = Async::Semaphore.new(1) + + @gardener = nil end # @attr [Hash] all allocated resources, and their associated usage. @@ -97,6 +99,8 @@ def release(resource) def close @resources.each_key(&:close) @resources.clear + + @gardener&.stop end def to_s @@ -142,6 +146,19 @@ def retire(resource) protected + def start_gardener + return if @gardener + + Async(transient: true) do |task| + @gardener = task + + Task.yield + ensure + @gardener = nil + self.close + end + end + def usage_string "#{@resources.size}/#{@limit || '∞'}" end @@ -177,6 +194,8 @@ def wait_for_resource end def create_resource + self.start_gardener + # This might return nil, which means creating the resource failed. if resource = @constructor.call @resources[resource] = 1 diff --git a/spec/async/pool/controller_spec.rb b/spec/async/pool/controller_spec.rb index 84c4a95..7657e26 100644 --- a/spec/async/pool/controller_spec.rb +++ b/spec/async/pool/controller_spec.rb @@ -131,3 +131,22 @@ end end end + +RSpec.describe Async::Pool::Controller, timeout: 1 do + subject {described_class.new(Async::Pool::Resource)} + + describe '#close' do + it "closes all resources when going out of scope" do + Async do + object = subject.acquire + expect(object).to_not be_nil + subject.release(object) + + # There is some resource which is still open: + expect(subject.resources).to_not be_empty + end + + expect(subject.resources).to be_empty + end + end +end From 17fadd43399065e6401544df29e5b3e86a2a9678 Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Thu, 23 Apr 2020 22:52:21 +1200 Subject: [PATCH 4/4] Minor version bump. --- lib/async/pool/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/async/pool/version.rb b/lib/async/pool/version.rb index dcc64c9..0afb285 100644 --- a/lib/async/pool/version.rb +++ b/lib/async/pool/version.rb @@ -20,6 +20,6 @@ module Async module Pool - VERSION = "0.2.0" + VERSION = "0.3.0" end end pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy