Skip to content

Instantly share code, notes, and snippets.

@bcardiff
Created December 16, 2016 15:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bcardiff/0cef66c4316ff07ba5b6f1c5c1e827b3 to your computer and use it in GitHub Desktop.
Save bcardiff/0cef66c4316ff07ba5b6f1c5c1e827b3 to your computer and use it in GitHub Desktop.
Test the reconnect/retry logic in crystal-pg
require "pg"
# start a posgress
# $ docker run --name mypg -e POSTGRES_DB=crystal -e POSTGRES_USER=postgress -e POSTGRES_PASSWORD= -p 5432:5432 postgres:9.5
# <ctrl+c> to stop server
# restart it
# $ docker start -a mypg
# <ctrl+c> to stop server
database_url = "postgres://postgress@localhost/crystal?retry_attempts=8&max_idle_pool_size=4&retry_delay=3"
quick_sql = "SELECT pg_backend_pid()"
slow_sql = "SELECT pg_backend_pid(), pg_sleep(3)"
abort_connections = "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid()"
macro every(delay)
spawn do
loop do
begin
sleep {{delay}}
{{yield}}
rescue e : DB::PoolRetryAttemptsExceeded
puts e
exit
end
end
end
end
DB.open database_url do |db|
db.setup_connection do |cnn|
puts "connection created #{cnn.object_id}"
end
every 1.0 do
puts "quick by #{db.scalar(quick_sql)}"
end
every 0.3 do
puts "slow by #{db.scalar(slow_sql)}"
end
every 10.0 do
puts "killing connections #{db.scalar abort_connections}"
end
sleep
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment