class Syntropy::ConnectionPool
def checkin(db)
def checkin(db) @machine.push(@queue, db) end
def checkout
def checkout if @queue.count == 0 && @count < @max_conn return create_db end @machine.shift(@queue) end
def create_db
def create_db db = Extralite::Database.new(@fn, wal: true) setup_db(db) @count += 1 db end
def initialize(machine, fn, max_conn)
def initialize(machine, fn, max_conn) @machine = machine @fn = fn @count = 0 @max_conn = max_conn @queue = UM::Queue.new @key = :"db_#{fn}" end
def setup_db(db)
def setup_db(db) # setup WAL, sync # setup concurrency stuff end
def with_db
def with_db if (db = Thread.current[@key]) @machine.snooze return yield(db) end db = checkout begin Thread.current[@key] = db yield(db) ensure Thread.current[@key] = nil checkin(db) end end