Thanks Jens.

I'm seeing very strange behavior. The ferret/drb server is running on  
the web server. I disable AAF in my environment.rb like so:

MyModel.disable_ferret

Then, every hour I run a script that grabs the records that have been  
updated and I call

MyModel.bulk_index array_of_changed_objects

When there are, say, 100 or so objects that have changed the server  
where DRB is will have approximately 50% of the CPU waiting on IO,  
and will drop from 120MB free of memory to 10MB free, though the ruby/ 
drb process doesn't seem to actually consume that memory -- or at  
least it's not reported to by top. While the batch update is  
happening it seems like my entire site is locked up. Requests usually  
hang until the indexing completes. Further, I can't even run script/ 
console from a different machine until the indexing completes. I'm  
doing the bulk index on two indexes. One is about 41K records, the  
other is 1 million records. In both cases there has been at most 100  
or so objects that needed to be indexed in bulk. The fact that script/ 
console, when run from a different server, doesn't load until the  
index stops makes me think that either something is blocking in the  
ferret/drb server, or the optimization of the 3GB index after the  
bulk_index of 100 records is consuming all of the web server's  
resources.

Any idea what is going on or how I can debug this issue?

Thanks in advance.

On Sep 27, 2007, at 4:29 PM, Jens Kraemer wrote:

> On Thu, Sep 27, 2007 at 03:12:51PM -0400, Erik Morton wrote:
>> Using the Drb allows me to synchronize writes to the index in a multi
>> mongrel environment. I was under the impression that the remote index
>> would not block if two mongrels were searching the index. Is that the
>> case? This line in ferret_server.rb makes me think otherwise:
>>
>>        # Calls are not queued atm, so this will block until the call
>> returned.
>
> Don't worry, it's only bad wording :-)
>
> What this means is only that indexing is not done in an asynchronous
> way. So your call to Model#save which triggers an index update won't
> return until the server has finished adding that record to the index.
>
> Other processes will get their own threads on the DRb side,
> synchronization is done in Ferret's Index class which allows  
> concurrent
> searches.
>
> cheers,
> Jens
>
> -- 
> Jens Krämer
> webit! Gesellschaft für neue Medien mbH
> Schnorrstraße 76 | 01069 Dresden
> Telefon +49 351 46766-0 | Telefax +49 351 46766-66
> [EMAIL PROTECTED] | www.webit.de
>
> Amtsgericht Dresden | HRB 15422
> GF Sven Haubold, Hagen Malessa
> _______________________________________________
> Ferret-talk mailing list
> [email protected]
> http://rubyforge.org/mailman/listinfo/ferret-talk

_______________________________________________
Ferret-talk mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ferret-talk

Reply via email to