Forgot to include other relevant information: Rails 2.3.5, SystemTimer 1.2, ruby-ldap 0.9.11 all on Mac OSX Snow Leopard.
Cheers, Marcelo. On Mon, Apr 5, 2010 at 5:06 PM, Marcelo de Moraes Serpa <[email protected] > wrote: > 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: [email protected], > 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 [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

