Hello.. Can anyone tell me how to get off this mailing list?



________________________________
From: Marcelo de Moraes Serpa <celose...@gmail.com>
To: rubyonrails-talk@googlegroups.com
Sent: Mon, April 5, 2010 5:06:50 PM
Subject: [Rails] SystemTimer failing

Hello list,

I have searched everywhere else, tesed extensively and came to a point where I 
do not have a clue on what is happening.

I am using SystemTimer and Ruby/LDAP in my Rails application. Ruby/LDAP to 
authenticate against a LDAP server and SystemTimer in an effort to avoid 
potential long hangs. 

Fact #1: SystemTimer works fine with the LDAP::Conn#bind method. It does cut at 
the right time if it fails. However, for some unknowing mystic reason, it just 
will not work with LDAP::Conn#search2. 

The code I am using:

  begin
      arr = SystemTimer.timeout_after(5.seconds) do
        connection.bind(self.bind_dn,self.password)
        connection.search2(self.base_dn,1,"(& (userPassword=#{password}) 
(mail=#{email}))",nil,false,5,5000)
      end
    rescue Exception => e
      msg = 'LDAP server error.'
      logger.error(logger_msg_template.call("#{msg} - Exception: #{e.message}"))
      raise Timeout::Error.new(msg)
    end

So, if bind takes more than 5 seconds, timeout will throw the correctly after 5 
seconds. Good. If bind works, we then proceed to the search2 call. Things get 
sensitive here. If for any reason the search2 delays too much, the process is 
bound to just hang and wait for it's return. Often it happens because the query 
is wrong (an attribute doesn't exist in the LDAP entry, which might happen 
given the context of this code). 

SystemTimer *does* throw the Timeout::Error ("time's up!"), but it just doesn't 
kill the Thread after the seconds specfied in the 
timeout_after's param. Check out this request that I just made:

ERROR: LDAP server error. - Exception: time's up! - USER: marc...@site.com, 
ACCOUNT: MyAccount, LDAP HOST: 89.150.80.164, PORT: 389.
  SQL (0.3ms)   ROLLBACK
Rendering template within layouts/application
Rendering directory/index 
Completed in 34212ms (View: 19, DB: 7) | 200 OK [http://localhost/ldap]

Check the first line, it is from Rails' logger. I also print the exception 
message, you can see that it was a "Time's up!" (from SystemTimer), but look at 
how long it took: almost 35 seconds. 

It is risky, since if many users are trying to setup a LDAP at the same time, 
our service could just hang completely. 

I'm really lost and really need some enlightenment here, any suggestion 
appreciated!

Cheers,

Marcelo.
-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-t...@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.



      

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-t...@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to