[Backgroundrb-devel] Worker's not created quick enough?

Mitchell Curtis Hatter curtis.hatter at insightbb.com
Sat Sep 20 01:25:32 EDT 2008

I'm actually losing the call to the async_* method.

Anytime I first create a new worker I lose any async_* calls to it for  
approximately 10 to 15 seconds.

I even tried this:

     MiddleMan.new_worker(:worker => :texis_worker, :worker_key =>  
worker_key.to_s).async_search(:arg => {:book => self, :search_params  
=> search_params}, :job_key => job_key)

And got nothing. After the worker creates it's fine. But I tried just  
one call and waited about 30 seconds, got nothing, then made another  
call and got results right away.

Again, when I do it from script/console it never fails.

On Sep 20, 2008, at 12:36 AM, hemant kumar wrote:

> On Fri, 2008-09-19 at 23:58 -0400, Brent Collier wrote:
>> Yeah, you pretty much have to throw a sleep call in between creating
>> the worker and actually asking it to do work.  It only takes a
>> fraction of a second.  I was told this was only a problem on OS X,  
>> but
>> I've also witnessed it on Gentoo.  I see this question on the mailing
>> list enough that I think it might as well be included in the docs
>> somewhere.
> First what exactly is async_xxx "failed"? As far as my thinking goes,
> since in a worker, usually full rails environment is loaded, it is
> naturally a bit slow to start, but any sync/async task execution  
> should
> not get "lost" between the time worker is loading the rails  
> environment.
> For example, on my ubuntu box, with packet-0.1.13 and bdrb from git:
> require File.join(File.dirname(__FILE__) + "/../config/environment")
> a = MiddleMan.new_worker(:worker => :wow_worker,:worker_key =>
> "hello_world")
> 10.times do |i|
>  MiddleMan.worker(:wow_worker,"hello_world").async_run_crap(:arg =>
> "hello world : #{i}")
> end
> I won't loose any of the "async_run_crap" calls, even though there  
> is no
> "sleep" between starting a worker and asking it to execute a method.
> Sure, worker may take time, to be fully ready, but by that time, tasks
> should be "queued" up and thats what happens in Linux and behaviour is
> correct.
> On OSX though, you will loose async_xxx calls and hence its a bug.So,
> mitchell, are you loosing async_xxx method calls? Or it gets invoked
> eventually but slightly delayed (while its loading rails env)? If a
> method call is lost, its a bug, I will need to fix it.
> On OSX, ruby nonblocking APIs aren't working well and hence tasks  
> aren't
> getting enqueued in socket buffer too and hence we are loosing  
> messages.
> But this works, quite well in Linux, in my experience.

More information about the Backgroundrb-devel mailing list