From 6ca677d2140798d93b71a905e0490234235fdb79 Mon Sep 17 00:00:00 2001 From: humanzz Date: Tue, 2 Sep 2008 10:30:09 +0200 Subject: [PATCH] adding the nb pg,mysql tests --- test/test_mysql.rb | 48 +++++++++++++++++++++ test/test_pg.rb | 102 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+) create mode 100644 test/test_mysql.rb create mode 100644 test/test_pg.rb diff --git a/test/test_mysql.rb b/test/test_mysql.rb new file mode 100644 index 0000000..acf00ff --- /dev/null +++ b/test/test_mysql.rb @@ -0,0 +1,48 @@ +require 'neverblock-mysql' + +class Mysql + attr_accessor :fiber + alias :old_query :query + def query(sql) + if Fiber.current[:neverblock] + send_query(sql) + @fiber = Fiber.current + Fiber.yield + else + old_query(sql) + end + end + + def process_command + @fiber.resume get_result + end +end + +@count = 10 +@connections = {} +@fpool = NB::Pool::FiberPool.new(@count) +@cpool = NB::Pool::FiberedConnectionPool.new(size:@count, eager:true) do + c = Mysql.real_connect('localhost','root',nil) + @connections[IO.new(c.socket)] = c + c +end + +@break = false +@done = 0 +@t = Time.now +@count.times do + @fpool.spawn(false) do + @cpool.hold do |conn| + conn.query('select sleep(1)').each{|r| r} + @done = @done + 1 + puts "done in #{Time.now - @t}" if @done == @count + end + end +end +@sockets = @connections.keys +loop do + res = select(@sockets,nil,nil,nil) + if res + res.first.each{|c|@connections[c].process_command} + end +end diff --git a/test/test_pg.rb b/test/test_pg.rb new file mode 100644 index 0000000..6e9c1af --- /dev/null +++ b/test/test_pg.rb @@ -0,0 +1,102 @@ +require 'rubygems' +require 'neverblock' +require 'neverblock-pg' + +$fpool = NB::Pool::FiberPool.new(24) + +$long_count = ARGV[0].to_i +$freq = ARGV[1].to_i +$done = false + +$connections = {} +$sockets = [] +$cpool = NB::Pool::FiberedConnectionPool.new(:size=>10, :eager=>true) { + conn = NB::DB::FPGconn.new({:host=>'localhost',:user=>'postgres',:dbname=>'evented'}) + $sockets << socket = IO.new(conn.socket) + $connections[socket] = conn +} + +def $cpool.exec(sql) + hold do |conn| + conn.exec(sql) + end +end + +def $cpool.[](sql) + self.exec(sql) +end + +def $cpool.begin_db_transaction + hold(true) do |conn| + conn.exec("begin") + end +end +def $cpool.rollback_db_transaction + hold do |conn| + conn.exec("rollback") + release(Fiber.current,conn) + end +end +def $cpool.commit_db_transaction + hold do |conn| + conn.exec("commit") + release(Fiber.current,conn) + end +end + +$long_query = "select sleep(1)" +$short_query = "select 1" + +def run_blocking + t = Time.now + $long_count.times do |i| + $cpool[$long_query] + $freq.times do |j| + $cpool[$short_query].each{|r|r} + end + end + Time.now - t +end +print "finished blocking queries in : " +puts $b_time = run_blocking + +def run_evented + $count = 0 + $count_long = 0 + $finished = 0 + $long_count.times do |i| + $fpool.spawn do + $cpool[$long_query].each{|r|r} + $finished = $finished + 1 + if $finished == ($long_count * ($freq+1)) + puts ($e_l_time = Time.now - $t) + puts "advantage = #{(100 - ( $e_l_time / $b_time ) * 100).to_i}%" + stop_loop + end + end + $freq.times do |j| + $fpool.spawn do + $cpool[$short_query].each{|r|r} + $finished = $finished + 1 + if $finished == ($long_count * ($freq+1)) + puts ($e_l_time = Time.now - $t) + puts "advantage = #{(100 - ( $e_l_time / $b_time ) * 100).to_i}%" + stop_loop + end + end + end + end +end + +def stop_loop + $done = true +end + +$t = Time.now +print "finished evented queries in : " +run_evented +loop do + res = select($sockets,nil,nil,nil) + res.first.each{ |s|$connections[s].process_command } if res + break if $done +end