Matt Garland
2008-Oct-02 18:17 UTC
[Backgroundrb-devel] enqueued tasks running but not needed
I have two workers--jabber_worker, election_worker--and both are working great. BUT I can see in my rails console that the queue table is being constantly polled for jabber_worker: BdrbJobQueue Load (0.002401) SELECT * FROM `bdrb_job_queues` WHERE (`bdrb_job_queues`.`taken` = 0 AND `bdrb_job_queues`.`worker_name` = ''jabber_worker'') LIMIT 1 FOR UPDATE EVEN though my configuration file rules out enqueued tasks: :backgroundrb: :port: 22222 :ip: 0.0.0.0 :environment: development :log: foreground :debug_log: true :persistent_disabled: true I''m not sure why this is happening. It''s true that I created jabber_worker BEFORE changing the configuration. But even when I rerun the rake set up, this persists. So why is the config overrun? And why only for :jabber_worker? I should say I am on OS X. I should also say I don''t understand exactly what the persisted queue is. I imagine it is useful for long-running jobs when some kind of logic is being applied to what goes next, and that logic can change. That''s not my case. jabber_worker just contacts a jabber server, pushing data out, adding and deleting users. election_worker maintains separate threads for a group of chat rooms, and kills or restarts them when the rails app tells it to, and it tells the rails app when an election period in a chat room is over and votes need to be counted. Here''s jabber worker: class JabberWorker < BackgrounDRb::MetaWorker require ''xmpp4r/client'' require ''xmpp4r/muc'' set_worker_name :jabber_worker def create(args = nil) jid = Jabber::JID.new("#{JABBER_ADMIN}@#{JABBER_ADDRESS}/rails") @client = Jabber::Client.new(jid) @client.connect @client.auth(JABBER_PWD) @client.send(Jabber::Presence.new) @conferenceClient={} create_chats end def create_chats Chat.all.each do |chat| muc = Jabber::MUC::SimpleMUCClient.new(@client) @conferenceClient[chat.name]=muc address = "#{chat.name}@#{JABBER_CONFERENCES}.#{JABBER_ADDRESS}/ rails" muc.join(Jabber::JID.new(address)) end end def add_jabber_user(user) jid = Jabber::JID.new("#{user.login}@#{JABBER_ADDRESS}") client = Jabber::Client.new(jid) client.connect client.register(user.login) client.disconnect end def delete_jabber_user(user) jid = Jabber::JID.new("#{user.login}@#{JABBER_ADDRESS}") client = Jabber::Client.new(jid) client.connect client.auth(user.login) client.remove_registration client.disconnect end def push_individual_resource(args) jid = Jabber::JID.new("#{args[:login]}@#{JABBER_ADDRESS}") message = Jabber::Message::new(jid, args[:message]).set_type(:normal) @client.send(message) end def push_conference_resource(args) jid = Jabber ::JID.new("#{args[:chat_name]}@#{JABBER_CONFERENCES}.#{JABBER_ADDRESS}") message = Jabber::Message::new(jid, args[:message]).set_type(:groupchat) @conferenceClient[args[:chat_name]].send(message) end end And here is election_worker for comparison: class ElectionWorker< BackgrounDRb::MetaWorker set_worker_name :election_worker ELECTION_INTERVAL=10 def create(args = nil) p "election worker created" @timers={} end def stop_elections(chat_id) if @timers.key? chat_id @timers[chat_id].kill end p "elections stopped for #{chat_id}" end def start_elections(chat_id) p "elections started for #{chat_id}" @timers[chat_id]=fresh_election_timer(chat_id) p "elections started for #{chat_id} AFTER" end def restart_election_cycle(chat_id) stop_elections(chat_id) start_elections(chat_id) end def fresh_election_timer(chat_id) p "fresh timer #{chat_id}" timer=Thread.new do loop do sleep ELECTION_INTERVAL Chat.find(chat_id).do_election end end timer end end
Matt Garland
2008-Oct-02 19:03 UTC
[Backgroundrb-devel] enqueued tasks running but not needed
Correction--after I ran the rake setup again, BOTH workers cause queries. BdrbJobQueue Load (0.003223) SELECT * FROM `bdrb_job_queues` WHERE (`bdrb_job_queues`.`taken` = 0 AND `bdrb_job_queues`.`worker_name` = ''election_worker'') LIMIT 1 FOR UPDATE On Oct 2, 2008, at 11:08 AM, Matt Garland wrote:> I have two workers--jabber_worker, election_worker--and both are > working great. > > BUT I can see in my rails console that the queue table is being > constantly polled for jabber_worker: > > BdrbJobQueue Load (0.002401) SELECT * FROM `bdrb_job_queues` > WHERE (`bdrb_job_queues`.`taken` = 0 AND > `bdrb_job_queues`.`worker_name` = ''jabber_worker'') LIMIT 1 FOR UPDATE > > EVEN though my configuration file rules out enqueued tasks: > > :backgroundrb: > :port: 22222 > :ip: 0.0.0.0 > :environment: development > :log: foreground > :debug_log: true > :persistent_disabled: true > > I''m not sure why this is happening. It''s true that I created > jabber_worker BEFORE changing the configuration. But even when I > rerun the rake set up, this persists. > > So why is the config overrun? And why only for :jabber_worker? > > I should say I am on OS X. > > I should also say I don''t understand exactly what the persisted > queue is. I imagine it is useful for long-running jobs when some > kind of logic is being applied to what goes next, and that logic can > change. > > That''s not my case. jabber_worker just contacts a jabber server, > pushing data out, adding and deleting users. election_worker > maintains separate threads for a group of chat rooms, and kills or > restarts them when the rails app tells it to, and it tells the rails > app when an election period in a chat room is over and votes need to > be counted. > > Here''s jabber worker: > > class JabberWorker < BackgrounDRb::MetaWorker > > require ''xmpp4r/client'' > require ''xmpp4r/muc'' > > set_worker_name :jabber_worker > > def create(args = nil) > jid = Jabber::JID.new("#{JABBER_ADMIN}@#{JABBER_ADDRESS}/rails") > @client = Jabber::Client.new(jid) > @client.connect > @client.auth(JABBER_PWD) > @client.send(Jabber::Presence.new) > @conferenceClient={} > create_chats > end > > def create_chats > Chat.all.each do |chat| > muc = Jabber::MUC::SimpleMUCClient.new(@client) > @conferenceClient[chat.name]=muc > address = "#{chat.name}@#{JABBER_CONFERENCES}.#{JABBER_ADDRESS}/ > rails" > muc.join(Jabber::JID.new(address)) > end > end > > def add_jabber_user(user) > jid = Jabber::JID.new("#{user.login}@#{JABBER_ADDRESS}") > client = Jabber::Client.new(jid) > client.connect > client.register(user.login) > client.disconnect > end > > def delete_jabber_user(user) > jid = Jabber::JID.new("#{user.login}@#{JABBER_ADDRESS}") > client = Jabber::Client.new(jid) > client.connect > client.auth(user.login) > client.remove_registration > client.disconnect > end > > def push_individual_resource(args) > jid = Jabber::JID.new("#{args[:login]}@#{JABBER_ADDRESS}") > message = Jabber::Message::new(jid, > args[:message]).set_type(:normal) > @client.send(message) > end > > def push_conference_resource(args) > jid = > Jabber > ::JID > .new("#{args[:chat_name]}@#{JABBER_CONFERENCES}.#{JABBER_ADDRESS}") > message = Jabber::Message::new(jid, > args[:message]).set_type(:groupchat) > @conferenceClient[args[:chat_name]].send(message) > end > > > end > > And here is election_worker for comparison: > > class ElectionWorker< BackgrounDRb::MetaWorker > > set_worker_name :election_worker > > ELECTION_INTERVAL=10 > > def create(args = nil) > p "election worker created" > @timers={} > end > > def stop_elections(chat_id) > if @timers.key? chat_id > @timers[chat_id].kill > end > p "elections stopped for #{chat_id}" > end > > def start_elections(chat_id) > p "elections started for #{chat_id}" > @timers[chat_id]=fresh_election_timer(chat_id) > p "elections started for #{chat_id} AFTER" > end > > def restart_election_cycle(chat_id) > stop_elections(chat_id) > start_elections(chat_id) > end > > def fresh_election_timer(chat_id) > p "fresh timer #{chat_id}" > timer=Thread.new do > loop do > sleep ELECTION_INTERVAL > Chat.find(chat_id).do_election > end > end > timer > end > > end > _______________________________________________ > Backgroundrb-devel mailing list > Backgroundrb-devel at rubyforge.org > http://rubyforge.org/mailman/listinfo/backgroundrb-devel
hemant kumar
2008-Oct-03 03:55 UTC
[Backgroundrb-devel] enqueued tasks running but not needed
This sounds like a bug. Are you running git version? On Thu, 2008-10-02 at 12:03 -0700, Matt Garland wrote:> Correction--after I ran the rake setup again, BOTH workers cause > queries. > > BdrbJobQueue Load (0.003223) SELECT * FROM `bdrb_job_queues` > WHERE (`bdrb_job_queues`.`taken` = 0 AND > `bdrb_job_queues`.`worker_name` = ''election_worker'') LIMIT 1 FOR UPDATE > > > On Oct 2, 2008, at 11:08 AM, Matt Garland wrote: > > > I have two workers--jabber_worker, election_worker--and both are > > working great. > > > > BUT I can see in my rails console that the queue table is being > > constantly polled for jabber_worker: > > > > BdrbJobQueue Load (0.002401) SELECT * FROM `bdrb_job_queues` > > WHERE (`bdrb_job_queues`.`taken` = 0 AND > > `bdrb_job_queues`.`worker_name` = ''jabber_worker'') LIMIT 1 FOR UPDATE > > > > EVEN though my configuration file rules out enqueued tasks: > > > > :backgroundrb: > > :port: 22222 > > :ip: 0.0.0.0 > > :environment: development > > :log: foreground > > :debug_log: true > > :persistent_disabled: true > > > > I''m not sure why this is happening. It''s true that I created > > jabber_worker BEFORE changing the configuration. But even when I > > rerun the rake set up, this persists. > > > > So why is the config overrun? And why only for :jabber_worker? > > > > I should say I am on OS X. > > > > I should also say I don''t understand exactly what the persisted > > queue is. I imagine it is useful for long-running jobs when some > > kind of logic is being applied to what goes next, and that logic can > > change. > > > > That''s not my case. jabber_worker just contacts a jabber server, > > pushing data out, adding and deleting users. election_worker > > maintains separate threads for a group of chat rooms, and kills or > > restarts them when the rails app tells it to, and it tells the rails > > app when an election period in a chat room is over and votes need to > > be counted. > > > > Here''s jabber worker: > > > > class JabberWorker < BackgrounDRb::MetaWorker > > > > require ''xmpp4r/client'' > > require ''xmpp4r/muc'' > > > > set_worker_name :jabber_worker > > > > def create(args = nil) > > jid = Jabber::JID.new("#{JABBER_ADMIN}@#{JABBER_ADDRESS}/rails") > > @client = Jabber::Client.new(jid) > > @client.connect > > @client.auth(JABBER_PWD) > > @client.send(Jabber::Presence.new) > > @conferenceClient={} > > create_chats > > end > > > > def create_chats > > Chat.all.each do |chat| > > muc = Jabber::MUC::SimpleMUCClient.new(@client) > > @conferenceClient[chat.name]=muc > > address = "#{chat.name}@#{JABBER_CONFERENCES}.#{JABBER_ADDRESS}/ > > rails" > > muc.join(Jabber::JID.new(address)) > > end > > end > > > > def add_jabber_user(user) > > jid = Jabber::JID.new("#{user.login}@#{JABBER_ADDRESS}") > > client = Jabber::Client.new(jid) > > client.connect > > client.register(user.login) > > client.disconnect > > end > > > > def delete_jabber_user(user) > > jid = Jabber::JID.new("#{user.login}@#{JABBER_ADDRESS}") > > client = Jabber::Client.new(jid) > > client.connect > > client.auth(user.login) > > client.remove_registration > > client.disconnect > > end > > > > def push_individual_resource(args) > > jid = Jabber::JID.new("#{args[:login]}@#{JABBER_ADDRESS}") > > message = Jabber::Message::new(jid, > > args[:message]).set_type(:normal) > > @client.send(message) > > end > > > > def push_conference_resource(args) > > jid = > > Jabber > > ::JID > > .new("#{args[:chat_name]}@#{JABBER_CONFERENCES}.#{JABBER_ADDRESS}") > > message = Jabber::Message::new(jid, > > args[:message]).set_type(:groupchat) > > @conferenceClient[args[:chat_name]].send(message) > > end > > > > > > end > > > > And here is election_worker for comparison: > > > > class ElectionWorker< BackgrounDRb::MetaWorker > > > > set_worker_name :election_worker > > > > ELECTION_INTERVAL=10 > > > > def create(args = nil) > > p "election worker created" > > @timers={} > > end > > > > def stop_elections(chat_id) > > if @timers.key? chat_id > > @timers[chat_id].kill > > end > > p "elections stopped for #{chat_id}" > > end > > > > def start_elections(chat_id) > > p "elections started for #{chat_id}" > > @timers[chat_id]=fresh_election_timer(chat_id) > > p "elections started for #{chat_id} AFTER" > > end > > > > def restart_election_cycle(chat_id) > > stop_elections(chat_id) > > start_elections(chat_id) > > end > > > > def fresh_election_timer(chat_id) > > p "fresh timer #{chat_id}" > > timer=Thread.new do > > loop do > > sleep ELECTION_INTERVAL > > Chat.find(chat_id).do_election > > end > > end > > timer > > end > > > > end > > _______________________________________________ > > Backgroundrb-devel mailing list > > Backgroundrb-devel at rubyforge.org > > http://rubyforge.org/mailman/listinfo/backgroundrb-devel > > _______________________________________________ > Backgroundrb-devel mailing list > Backgroundrb-devel at rubyforge.org > http://rubyforge.org/mailman/listinfo/backgroundrb-devel
Matt Garland
2008-Oct-03 04:36 UTC
[Backgroundrb-devel] enqueued tasks running but not needed
Thanks Hemant, that did the trick! I had been running the latest svn. I have a MacBook that my wife mostly surfs the web with. It''s running Leopard OS and we have cable DSL in the American Northwest. I''m not sure how to set up shell access, but if you think you can use it, give me a holler. matt at pet-theory dot com. On Oct 2, 2008, at 8:08 PM, hemant kumar wrote:> This sounds like a bug. Are you running git version? > > On Thu, 2008-10-02 at 12:03 -0700, Matt Garland wrote: >> Correction--after I ran the rake setup again, BOTH workers cause >> queries. >> >> BdrbJobQueue Load (0.003223) SELECT * FROM `bdrb_job_queues` >> WHERE (`bdrb_job_queues`.`taken` = 0 AND >> `bdrb_job_queues`.`worker_name` = ''election_worker'') LIMIT 1 FOR >> UPDATE >> >> >> On Oct 2, 2008, at 11:08 AM, Matt Garland wrote: >> >>> I have two workers--jabber_worker, election_worker--and both are >>> working great. >>> >>> BUT I can see in my rails console that the queue table is being >>> constantly polled for jabber_worker: >>> >>> BdrbJobQueue Load (0.002401) SELECT * FROM `bdrb_job_queues` >>> WHERE (`bdrb_job_queues`.`taken` = 0 AND >>> `bdrb_job_queues`.`worker_name` = ''jabber_worker'') LIMIT 1 FOR >>> UPDATE >>> >>> EVEN though my configuration file rules out enqueued tasks: >>> >>> :backgroundrb: >>> :port: 22222 >>> :ip: 0.0.0.0 >>> :environment: development >>> :log: foreground >>> :debug_log: true >>> :persistent_disabled: true >>> >>> I''m not sure why this is happening. It''s true that I created >>> jabber_worker BEFORE changing the configuration. But even when I >>> rerun the rake set up, this persists. >>> >>> So why is the config overrun? And why only for :jabber_worker? >>> >>> I should say I am on OS X. >>> >>> I should also say I don''t understand exactly what the persisted >>> queue is. I imagine it is useful for long-running jobs when some >>> kind of logic is being applied to what goes next, and that logic can >>> change. >>> >>> That''s not my case. jabber_worker just contacts a jabber server, >>> pushing data out, adding and deleting users. election_worker >>> maintains separate threads for a group of chat rooms, and kills or >>> restarts them when the rails app tells it to, and it tells the rails >>> app when an election period in a chat room is over and votes need to >>> be counted. >>> >>> Here''s jabber worker: >>> >>> class JabberWorker < BackgrounDRb::MetaWorker >>> >>> require ''xmpp4r/client'' >>> require ''xmpp4r/muc'' >>> >>> set_worker_name :jabber_worker >>> >>> def create(args = nil) >>> jid = Jabber::JID.new("#{JABBER_ADMIN}@#{JABBER_ADDRESS}/rails") >>> @client = Jabber::Client.new(jid) >>> @client.connect >>> @client.auth(JABBER_PWD) >>> @client.send(Jabber::Presence.new) >>> @conferenceClient={} >>> create_chats >>> end >>> >>> def create_chats >>> Chat.all.each do |chat| >>> muc = Jabber::MUC::SimpleMUCClient.new(@client) >>> @conferenceClient[chat.name]=muc >>> address = "#{chat.name}@#{JABBER_CONFERENCES}.#{JABBER_ADDRESS}/ >>> rails" >>> muc.join(Jabber::JID.new(address)) >>> end >>> end >>> >>> def add_jabber_user(user) >>> jid = Jabber::JID.new("#{user.login}@#{JABBER_ADDRESS}") >>> client = Jabber::Client.new(jid) >>> client.connect >>> client.register(user.login) >>> client.disconnect >>> end >>> >>> def delete_jabber_user(user) >>> jid = Jabber::JID.new("#{user.login}@#{JABBER_ADDRESS}") >>> client = Jabber::Client.new(jid) >>> client.connect >>> client.auth(user.login) >>> client.remove_registration >>> client.disconnect >>> end >>> >>> def push_individual_resource(args) >>> jid = Jabber::JID.new("#{args[:login]}@#{JABBER_ADDRESS}") >>> message = Jabber::Message::new(jid, >>> args[:message]).set_type(:normal) >>> @client.send(message) >>> end >>> >>> def push_conference_resource(args) >>> jid >>> Jabber >>> ::JID >>> .new("#{args[:chat_name]}@#{JABBER_CONFERENCES}.#{JABBER_ADDRESS}") >>> message = Jabber::Message::new(jid, >>> args[:message]).set_type(:groupchat) >>> @conferenceClient[args[:chat_name]].send(message) >>> end >>> >>> >>> end >>> >>> And here is election_worker for comparison: >>> >>> class ElectionWorker< BackgrounDRb::MetaWorker >>> >>> set_worker_name :election_worker >>> >>> ELECTION_INTERVAL=10 >>> >>> def create(args = nil) >>> p "election worker created" >>> @timers={} >>> end >>> >>> def stop_elections(chat_id) >>> if @timers.key? chat_id >>> @timers[chat_id].kill >>> end >>> p "elections stopped for #{chat_id}" >>> end >>> >>> def start_elections(chat_id) >>> p "elections started for #{chat_id}" >>> @timers[chat_id]=fresh_election_timer(chat_id) >>> p "elections started for #{chat_id} AFTER" >>> end >>> >>> def restart_election_cycle(chat_id) >>> stop_elections(chat_id) >>> start_elections(chat_id) >>> end >>> >>> def fresh_election_timer(chat_id) >>> p "fresh timer #{chat_id}" >>> timer=Thread.new do >>> loop do >>> sleep ELECTION_INTERVAL >>> Chat.find(chat_id).do_election >>> end >>> end >>> timer >>> end >>> >>> end >>> _______________________________________________ >>> Backgroundrb-devel mailing list >>> Backgroundrb-devel at rubyforge.org >>> http://rubyforge.org/mailman/listinfo/backgroundrb-devel >> >> _______________________________________________ >> Backgroundrb-devel mailing list >> Backgroundrb-devel at rubyforge.org >> http://rubyforge.org/mailman/listinfo/backgroundrb-devel >
On Fri, Oct 3, 2008 at 10:06 AM, Matt Garland <alias at pet-theory.com> wrote:> Thanks Hemant, that did the trick! I had been running the latest svn. > > I have a MacBook that my wife mostly surfs the web with. It''s running > Leopard OS and we have cable DSL in the American Northwest. I''m not sure > how to set up shell access, but if you think you can use it, give me a > holler. matt at pet-theory dot com.Cool, but Kieran already did that for me, so I am testing stuff on Mac OSX now, but thanks anyways.