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("[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

_______________________________________________
Backgroundrb-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/backgroundrb-devel


_______________________________________________
Backgroundrb-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/backgroundrb-devel

Reply via email to