On Thursday, July 26, 2012 10:03:55 PM UTC-7, azi wrote:
>
> Thanks Jeremy for the reply.
> The reason I started using jndi was to avoid the overhead of establishing 
> the connection to mysql again and again.
>

Sequel's connection pool should already take care of that.
 

>
> e.g.: For a test application like this
>
> get "/test123/:pool" do
>     begin
>         if params[:pool].eql? 'sequel'
>             a = DB_SEQUEL[:schema_info].all[0][:version]
>         elsif params[:pool].eql? 'jndi'
>             a = DB_JNDI[:schema_info].all[0][:version]
>         end
>         DB_SEQUEL.disconnect
>         DB_JNDI.disconnect
>         return 1.to_json
>     rescue Exception => e
>         return 2.to_json
>     end
> end
>
> and I have the connection strings defined in my app.rb as follows:
> DB_SEQUEL = 
> Sequel.connect($config["db_jruby"]["adapter"]+'://'+$config["db_jruby"]["host"]+'/'+$config["db_jruby"]["database"]
>  
> + '?user=' + 
> $config["db_jruby"]["username"]+'&password='+$config["db_jruby"]["password"]+'&autoReconnect=true'
>   
> ,:logger => $db_log)
> DB_JNDI = Sequel.connect("jdbc:jndi:java:comp/env/test", :logger => 
> $db_log, :max_connections => 10)
>
> If I hit http://localhost:8080/testapp/test123/sequel twice, my mysql log 
> shows:
>
> 120727 10:11:28      102 Connect    test_user@localhost on testdb
>           102 Query    /* mysql-connector-java-5.1.13 ( Revision: 
> ${bzr.revision-id} ) */SHOW VARIABLES WHERE Variable_name ='language' OR 
> Variable_name = 'net_write_timeout' OR Variable_name = 
> 'interactive_timeout' OR Variable_name = 'wait_timeout' OR Variable_name = 
> 'character_set_client' OR Variable_name = 'character_set_connection' OR 
> Variable_name = 'character_set' OR Variable_name = 'character_set_server' 
> OR Variable_name = 'tx_isolation' OR Variable_name = 
> 'transaction_isolation' OR Variable_name = 'character_set_results' OR 
> Variable_name = 'timezone' OR Variable_name = 'time_zone' OR Variable_name 
> = 'system_time_zone' OR Variable_name = 'lower_case_table_names' OR 
> Variable_name = 'max_allowed_packet' OR Variable_name = 'net_buffer_length' 
> OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type' OR 
> Variable_name = 'query_cache_size' OR Variable_name = 'init_connect'
>           102 Query    /* mysql-connector-java-5.1.13 ( Revision: 
> ${bzr.revision-id} ) */SELECT @@session.auto_increment_increment
>           102 Query    SHOW COLLATION
>           102 Query    SET NAMES latin1
>           102 Query    SET character_set_results = NULL
>           102 Query    SET autocommit=1
>           102 Query    SET sql_mode='STRICT_TRANS_TABLES'
>           102 Query    SET SQL_AUTO_IS_NULL=0
>           102 Query    SELECT * FROM `schema_info`
>           102 Quit    
> 120727 10:11:29      103 Connect    test_user@localhost on testdb
>           103 Query    /* mysql-connector-java-5.1.13 ( Revision: 
> ${bzr.revision-id} ) */SHOW VARIABLES WHERE Variable_name ='language' OR 
> Variable_name = 'net_write_timeout' OR Variable_name = 
> 'interactive_timeout' OR Variable_name = 'wait_timeout' OR Variable_name = 
> 'character_set_client' OR Variable_name = 'character_set_connection' OR 
> Variable_name = 'character_set' OR Variable_name = 'character_set_server' 
> OR Variable_name = 'tx_isolation' OR Variable_name = 
> 'transaction_isolation' OR Variable_name = 'character_set_results' OR 
> Variable_name = 'timezone' OR Variable_name = 'time_zone' OR Variable_name 
> = 'system_time_zone' OR Variable_name = 'lower_case_table_names' OR 
> Variable_name = 'max_allowed_packet' OR Variable_name = 'net_buffer_length' 
> OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type' OR 
> Variable_name = 'query_cache_size' OR Variable_name = 'init_connect'
>           103 Query    /* mysql-connector-java-5.1.13 ( Revision: 
> ${bzr.revision-id} ) */SELECT @@session.auto_increment_increment
>           103 Query    SHOW COLLATION
>           103 Query    SET NAMES latin1
>           103 Query    SET character_set_results = NULL
>           103 Query    SET autocommit=1
>           103 Query    SET sql_mode='STRICT_TRANS_TABLES'
>           103 Query    SET SQL_AUTO_IS_NULL=0
>           103 Query    SELECT * FROM `schema_info`
>           103 Quit
>
> While, if I hit http://localhost:8080/gvservice/test123/jndi twice, my 
> mysql log shows:
>
> 120727 10:16:13      105 Connect    test_user@localhost on testdb
>           105 Query    /* mysql-connector-java-5.1.13 ( Revision: 
> ${bzr.revision-id} ) */SHOW VARIABLES WHERE Variable_name ='language' OR 
> Variable_name = 'net_write_timeout' OR Variable_name = 
> 'interactive_timeout' OR Variable_name = 'wait_timeout' OR Variable_name = 
> 'character_set_client' OR Variable_name = 'character_set_connection' OR 
> Variable_name = 'character_set' OR Variable_name = 'character_set_server' 
> OR Variable_name = 'tx_isolation' OR Variable_name = 
> 'transaction_isolation' OR Variable_name = 'character_set_results' OR 
> Variable_name = 'timezone' OR Variable_name = 'time_zone' OR Variable_name 
> = 'system_time_zone' OR Variable_name = 'lower_case_table_names' OR 
> Variable_name = 'max_allowed_packet' OR Variable_name = 'net_buffer_length' 
> OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type' OR 
> Variable_name = 'query_cache_size' OR Variable_name = 'init_connect'
>           105 Query    /* mysql-connector-java-5.1.13 ( Revision: 
> ${bzr.revision-id} ) */SELECT @@session.auto_increment_increment
>           105 Query    SHOW COLLATION
>           105 Query    SET NAMES latin1
>           105 Query    SET character_set_results = NULL
>           105 Query    SET autocommit=1
>           105 Query    SET sql_mode='STRICT_TRANS_TABLES'
>           105 Query    SELECT 1
>           105 Query    SET SQL_AUTO_IS_NULL=0
>           105 Query    SELECT * FROM `schema_info`
>           105 Query    SELECT 1
>           105 Query    SELECT 1
>           105 Query    SET SQL_AUTO_IS_NULL=0
>           105 Query    SELECT * FROM `schema_info`
>           105 Query    SELECT 1
>
>
> I understand this is happening because I am using DB_SEQUEL.disconnect in 
> my code. But I can't avoid doing that as sequel throws en error if an 
> attempt to query the database is made for the first time after an interval 
> greater than the wait_timeout of mysql server and I don't have much control 
> after that. Using "autoReconnect=true" doesn't seem to solve this problem.
>

The usual solution to this is to have a periodic cron job that uses the 
connection more often than the wait_timeout (or increasing the 
wait_timeout).
 

>
> e.g.: On hitting the url "http://localhost:8080/gvservice/test123/sequel"; 
> thrice with DB_SEQUEL.disconnect removed from the code, my db.log shows:
>
> I, [2012-07-27T10:39:20.738000 #12596]  INFO -- : (0.000000s) SET 
> SQL_AUTO_IS_NULL=0
> I, [2012-07-27T10:39:20.743000 #12596]  INFO -- : (0.001000s) SELECT * 
> FROM `schema_info`
> E, [2012-07-27T10:39:35.213000 #12596] ERROR -- : NativeException: 
> com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications 
> link failure
>
> The last packet successfully received from the server was 14,462 
> milliseconds ago.  The last packet sent successfully to the server was 0 
> milliseconds ago.: SELECT * FROM `schema_info`
> I, [2012-07-27T10:39:36.124000 #12596]  INFO -- : (0.000000s) SET 
> SQL_AUTO_IS_NULL=0
> I, [2012-07-27T10:39:36.126000 #12596]  INFO -- : (0.001000s) SELECT * 
> FROM `schema_info`
>

That's probably because you have an insane wait_timeout of 10.  The Sequel 
default is 2147483, BTW.  I recommend increasing the wait_timeout to a 
reasonable number.
 

> I surely can bear this overhead to get the stability, but the thing that 
> still is worrying me is that why my sequel-jndi setup was working so 
> beautifully until a few days back.
>

Pure luck would be my guess.

Thanks,
Jeremy

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/sequel-talk/-/kIVYZwe9gRMJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sequel-talk?hl=en.

Reply via email to