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)