On Friday, February 1, 2013 11:59:09 AM UTC-8, Alex Vinnik wrote:
>
> Hi all.
>
> Looks like we run into an issue with postgres adapter 
> when connection_validator extension is used. The problem is simple. DB 
> connection is NOT lazy anymore when connection_validator is activated.
> Sequel version is 3.43.0. Consider this snippet
>
> #!/usr/bin/env ruby
>
> require "sequel"
> require 'logging'
>
> logger = Logging.logger(STDOUT)
> logger.level = :debug
>
> logger.info 'Starting...'
>
> DB = Sequel.connect(:adapter  => 'postgres',
>   :username => 'whatever',  :password => 'whatever'',
>   :database => 'whatever'', :host => 'localhost')
>
> logger.info DB.inspect
> DB.loggers << logger
>
> DB.extension(:connection_validator)
>
> DB.loggers << logger
> puts `sudo netstat -ntp | egrep '5432.*ESTABLISHED.*#{Process.pid}'`
>
> You can run it and see that DB connection gets established even no SQL is 
> fired by the app. It is certainly not a lazy connection.
>
> I, [2013-02-01T13:45:49.668455 #19887]  INFO : Starting...
> I, [2013-02-01T13:45:49.729210 #19887]  INFO : 
> #<Sequel::Postgres::Database: {:adapter=>"postgres", 
> :username=>"transporter", :password=>"2ownTransporter", 
> :database=>"transporter", :host=>"localhost"}>
> I, [2013-02-01T13:45:49.757414 #19887]  INFO : (0.000299s) SET 
> standard_conforming_strings = ON
> I, [2013-02-01T13:45:49.757832 #19887]  INFO : (0.000280s) SET 
> client_min_messages = 'WARNING'
> I, [2013-02-01T13:45:49.758023 #19887]  INFO : (0.000129s) SET DateStyle = 
> 'ISO'
> tcp6       0      0 ::1:48713               ::1:5432               
>  ESTABLISHED 19887/ruby      
> I, [2013-02-01T13:45:49.831646 #19887]  INFO : Finished...
>
> After some digging in the code and seems like calling server_version in 
> select_clause_methods triggers DB connection. 
>
> https://github.com/jeremyevans/sequel/blob/master/lib/sequel/adapters/shared/postgres.rb#L1303
> here is server_version code...
>
> https://github.com/jeremyevans/sequel/blob/master/lib/sequel/adapters/shared/postgres.rb#L453
>
> Just to compare... connecting to MS SQL does have lazy connection. I 
> totally understand rationale behind this code and the need to have PG 
> version handy in order to prepare statements but it is sort inconsistent 
> with other adapters. May be to document this PG connection_validator 
> "feature" because I don't think it easily fixable at the moment. What do 
> you think?
>

Your analysis appears to be correct, but could you explain why this is an 
issue?  The point at which Sequel makes a connection is an implementation 
detail, so I'm not sure why we should document it.  There are other 
database extensions that cause a connection (the pg_hstore extension, for 
example), so the connection_validator extension is not alone in this.

The fact that Sequel usually creates connections lazily is itself an 
implementation detail.  It's definitely possible that a connection attempt 
will automatically be made on Sequel::Database initialization in the 
future, in order to fail fast.

Thanks,
Jeremy

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sequel-talk?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to