[Backgroundrb-devel] Strange problem

Dave Dupre
Thu, 03 Jan 2008 17:13:11 -0000

I use backgroundrb for many long tasks in my system, but I''m having
issues
with one in particular.  Two large tasks for me are importing people and
updating companies.

  def import_contacts(args = nil)
    thread_pool.defer(args) do |job_id|
      begin
        job = ImportJob.find(job_id)
        job.process_job
      rescue => err
        logger.error "MscWorker#import_contacts failed! #{err.class}:
#{err}"
      end
    end
  end

  def update_company_from_vendor(args = nil)
    thread_pool.defer(args) do |company_id|
      begin
        company = Company.find(company_id)
        info = company.firm_info_from_vendor  # webservice call to vendor
        if info && info.size == 1
          company.update_from_vendor!(
Company.find_firm_info_details_from_vendor(info[0]))  # webservice call to
vendor
        end
      rescue => err
        logger.error "MscWorker#update_company_from_vendor failed! #{
err.class}: #{err}"
      end
    end
  end

Part of import_contacts will result in many ask_work calls to
update_company_from_vendor while it is processing.  Importing contacts is
heavily db dependent, but not very code intensive.  If I upload two files
with > 1000 contacts each (two ask_work calls to import_contacts), things
will progress along and then pause for 20-40 seconds.  There is no DB
activity during the pause, but the backgroundrb process is using most of CPU
(98-99%).  There are no deadlock errors when things startup again, but it
really slows things down.  Are you using polling somewhere?

Also, on my Mac, Activity Monitor is only showing 1 thread and 1.2 Gig(!!)
of memory used.  I expected to see many threads due to my use of
thread_pool.

Thoughts?

--
Dave Dupre
(m) 617-921-1684
-------------- next part --------------
An HTML attachment was scrubbed...