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("[EMAIL PROTECTED]/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 = "[EMAIL PROTECTED]/ rails"
      muc.join(Jabber::JID.new(address))
    end
  end

  def add_jabber_user(user)
    jid = Jabber::JID.new("[EMAIL PROTECTED]")
    client = Jabber::Client.new(jid)
    client.connect
    client.register(user.login)
    client.disconnect
  end

  def delete_jabber_user(user)
   jid = Jabber::JID.new("[EMAIL PROTECTED]")
   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[:[EMAIL PROTECTED]")
message = Jabber::Message::new(jid, args[:message]).set_type(:normal)
    @client.send(message)
  end

  def push_conference_resource(args)
jid = Jabber ::JID.new("#{args[:[EMAIL PROTECTED]") 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
[email protected]
http://rubyforge.org/mailman/listinfo/backgroundrb-devel

Reply via email to