Bill Walton
2007-Feb-20 20:48 UTC
[Backgroundrb-devel] error message for record not found ?
I''m using backgroundrb for session management and deletion of visitor-entered information when a session is abandoned. The visitor can either click a button to end their session and remove their data, or backgroundrb will do it for them after 5 minutes of inactivity. Everything''s working fine, I think. If the visitor explicitly logs out, then when the worker checks for their record it won''t be there which will trigger logic that says ''you''re done. close the connection and kill yourself''. What makes me a little worried is that I''m getting what looks like an error message in backgroundrb.log. I''ve included it below. I''ve also included the worker code. Can anybody tell me how to verify that the worker is actually closing the connection and then creating suicide? Versus dying because of this failed find and not closing the connection correctly? Thanks, Bill ----------- log message ----------- Couldn''t find Emrec with ID=1 - (ActiveRecord::RecordNotFound) C:/InstantRails-1.3/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.2/lib/active_record/base.rb:955:in `find_one'' C:/InstantRails-1.3/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.2/lib/active_record/base.rb:941:in `find_from_ids'' C:/InstantRails-1.3/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.2/lib/active_record/base.rb:382:in `find'' ./script/backgroundrb/../../config/../lib/workers/session_worker.rb:20:in `watch_session'' ./script/backgroundrb/../../config/../lib/workers/session_worker.rb:12:in `do_work'' ./script/backgroundrb/../../config/../vendor/plugins/backgroundrb/backgroundrb_rails.rb:36:in `start_process'' ./script/backgroundrb/../../config/../vendor/plugins/backgroundrb/backgroundrb_rails.rb:32:in `start_process'' ./script/backgroundrb/../../config/../vendor/plugins/backgroundrb/backgroundrb.rb:57:in `new_worker'' C:/InstantRails-1.3/ruby/lib/ruby/1.8/thread.rb:135:in `synchronize'' ./script/backgroundrb/../../config/../vendor/plugins/backgroundrb/backgroundrb.rb:49:in `new_worker'' C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1552:in `perform_without_block'' C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1512:in `perform'' C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1586:in `main_loop'' C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1582:in `main_loop'' C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1578:in `main_loop'' C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1427:in `run'' C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1424:in `run'' C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1344:in `initialize'' C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1624:in `start_service'' script/backgroundrb/start:108 ------------ Worker code ---------- class SessionWorker < BackgrounDRb::Rails attr_reader :time_remaining def do_work(args) @time_remaining = args[:initial_setting].to_i @emrec_id = args[:emrec_id] @session_id = args[:session_id] @session_rec = Session.find(:first, :conditions => ["sessid = ?", @session_id]) watch_session(args) sleep(2) clean_up end def watch_session(args) while @time_remaining > 0 sleep(1) emrec = Emrec.find(@emrec_id) if emrec != nil if emrec.timer_suspended == ''no'' last_activity = emrec.last_updated_at time_remaining_float = (last_activity + args[:initial_setting].to_i) - Time.now @time_remaining = time_remaining_float.to_i end else @time_remaining = 0 end end end def clean_up emrec = Emrec.find(@emrec_id) if emrec != nil emrec.cleanup Session.delete(@session_rec.id) end ActiveRecord::Base.connection.disconnect! ::BackgrounDRb::MiddleMan.instance.delete_worker @_job_key end end -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/backgroundrb-devel/attachments/20070220/abf58a04/attachment.html
Ezra Zygmuntowicz
2007-Feb-20 21:43 UTC
[Backgroundrb-devel] error message for record not found ?
Bill- It looks like a standard record not found error. You should probably wrap your worker codes in begin .. rescue .. end block so you can catch that exception. -Ezra On Feb 20, 2007, at 12:48 PM, Bill Walton wrote:> I''m using backgroundrb for session management and deletion of > visitor-entered information when a session is abandoned. The > visitor can either click a button to end their session and remove > their data, or backgroundrb will do it for them after 5 minutes of > inactivity. > > Everything''s working fine, I think. If the visitor explicitly logs > out, then when the worker checks for their record it won''t be there > which will trigger logic that says ''you''re done. close the > connection and kill yourself''. What makes me a little worried is > that I''m getting what looks like an error message in > backgroundrb.log. I''ve included it below. I''ve also included the > worker code. > > Can anybody tell me how to verify that the worker is actually > closing the connection and then creating suicide? Versus dying > because of this failed find and not closing the connection correctly? > > Thanks, > Bill > > ----------- log message ----------- > Couldn''t find Emrec with ID=1 - (ActiveRecord::RecordNotFound) > C:/InstantRails-1.3/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.2/ > lib/active_record/base.rb:955:in `find_one'' > C:/InstantRails-1.3/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.2/ > lib/active_record/base.rb:941:in `find_from_ids'' > C:/InstantRails-1.3/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.2/ > lib/active_record/base.rb:382:in `find'' > ./script/backgroundrb/../../config/../lib/workers/session_worker.rb: > 20:in `watch_session'' > ./script/backgroundrb/../../config/../lib/workers/session_worker.rb: > 12:in `do_work'' > ./script/backgroundrb/../../config/../vendor/plugins/backgroundrb/ > backgroundrb_rails.rb:36:in `start_process'' > ./script/backgroundrb/../../config/../vendor/plugins/backgroundrb/ > backgroundrb_rails.rb:32:in `start_process'' > ./script/backgroundrb/../../config/../vendor/plugins/backgroundrb/ > backgroundrb.rb:57:in `new_worker'' > C:/InstantRails-1.3/ruby/lib/ruby/1.8/thread.rb:135:in `synchronize'' > ./script/backgroundrb/../../config/../vendor/plugins/backgroundrb/ > backgroundrb.rb:49:in `new_worker'' > C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1552:in > `perform_without_block'' > C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1512:in `perform'' > C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1586:in `main_loop'' > C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1582:in `main_loop'' > C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1578:in `main_loop'' > C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1427:in `run'' > C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1424:in `run'' > C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1344:in `initialize'' > C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1624:in > `start_service'' > script/backgroundrb/start:108 > > > ------------ Worker code ---------- > class SessionWorker < BackgrounDRb::Rails > > attr_reader :time_remaining > > def do_work(args) > @time_remaining = args[:initial_setting].to_i > @emrec_id = args[:emrec_id] > @session_id = args[:session_id] > @session_rec = Session.find(:first, > :conditions => ["sessid = ?", @session_id]) > watch_session(args) > sleep(2) > clean_up > end > > def watch_session(args) > while @time_remaining > 0 > sleep(1) > emrec = Emrec.find(@emrec_id) > if emrec != nil > if emrec.timer_suspended == ''no'' > last_activity = emrec.last_updated_at > time_remaining_float = (last_activity + args > [:initial_setting].to_i) - Time.now > @time_remaining = time_remaining_float.to_i > end > else > @time_remaining = 0 > end > end > end > > def clean_up > emrec = Emrec.find(@emrec_id) > if emrec != nil > emrec.cleanup > Session.delete(@session_rec.id) > end > ActiveRecord::Base.connection.disconnect! > ::BackgrounDRb::MiddleMan.instance.delete_worker @_job_key > end > > end > _______________________________________________ > Backgroundrb-devel mailing list > Backgroundrb-devel at rubyforge.org > http://rubyforge.org/mailman/listinfo/backgroundrb-devel-- Ezra Zygmuntowicz -- Lead Rails Evangelist -- ez at engineyard.com -- Engine Yard, Serious Rails Hosting -- (866) 518-YARD (9273)