Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
A thread-safe re-entrant resource pool for Ruby, extracted from the Riak Ruby Client.
Ruby
branch: master

Merge pull request #10 from dentarg/patch-1

Fix broken GitHub links in README
latest commit 16ec430292
@seancribbs seancribbs authored
Failed to load latest commit information.
lib Version bump 1.1.0
spec Gives the pool the ability to be filled with existing resources.
.gitignore Initial commit. Thanks @aphyr @freelancing-god.
.travis.yml travis: remove deprecated Rubinius versions
Gemfile Port the specs over and fix the typo bugs, enable Travis CI, bump to …
LICENSE
README.md Fix broken GitHub links in README
innertube.gemspec add ASL 2.0 license metadata to gemspec

README.md

Innertube

Innertube is a thread-safe, re-entrant resource pool, extracted from the Riak Ruby Client, where it was used to pool connections to Riak. It is free to use and modify, licensed under the Apache 2.0 License.

Example

# -------------------------------------------------------
# Basics
# -------------------------------------------------------

# Create a pool with open/close callables
pool = Innertube::Pool.new(proc { Connection.new },
                           proc {|c| c.disconnect })

# Optionally, fill the pool with existing resources
pool.fill([conn1, conn2, conn3])

# Grab a connection from the pool, returns the same value
# as the block
pool.take {|conn| conn.ping } # => true

# Raise the BadResource exception if the resource is no
# longer good
pool.take do |conn|
  raise Innertube::Pool::BadResource unless conn.connected?
  conn.ping
end

# Innertube helps your code be re-entrant! Take more resources
# while you have one checked out.
pool.take do |conn|
  conn.stream_tweets do |tweet|
    pool.take {|conn2| conn2.increment :tweets }
  end
end

# -------------------------------------------------------
# Iterations: These are slow because they have guarantees
# about visiting all current elements of the pool.
# -------------------------------------------------------

# Do something with every connection in the pool
pool.each {|conn| puts conn.get_stats }

# Expunge some expired connections from the pool
pool.delete_if {|conn| conn.idle_time > 5 }

Credits

The pool was originally implemented by Kyle Kingsbury and extracted by Sean Cribbs, when bugged about it by Pat Allan at EuRuKo 2012.

Something went wrong with that request. Please try again.