Chetan Sarva
2008-Sep-23 23:35 UTC
[Backgroundrb-devel] Persistent queue and scheduled jobs
Hi,
While playing with scheduled jobs, I ran into a couple of issues and
made a few notes.
1) Times MUST be UTC:
I''ve got the following:
BdrbJobQueue.insert_job(:worker_name =>
''backup_worker'',
:worker_method => ''do_work'',
:args => @backup.id,
:scheduled_at => Time.now + 30)
resulting in:
submitted_at: 2008-09-23 17:57:26
started_at: 2008-09-23 17:57:30
finished_at: NULL
archived_at: NULL
scheduled_at: 2008-09-23 17:57:56
changing it to Time.now.utc + 30 fixes it.
2. job_key is mandatory when using the persistent queue since there is
a unique key check on this field. This was not immediately obvious,
and no key is automatically generated. The above code inserts NULL for
job_key.
I can submit doc patches for the above if that helps.
3. When firing the job at the scheduled time, MetaWorker calls
Marshal.load() on `args` though they were not previously marshalled by
ActiveRecord. I made the following change in my WC in order to move
passed this problem:
Index: vendor/plugins/backgroundrb/server/lib/meta_worker.rb
==================================================================---
vendor/plugins/backgroundrb/server/lib/meta_worker.rb
(revision 114)
+++ vendor/plugins/backgroundrb/server/lib/meta_worker.rb
(working copy)
@@ -287,10 +287,9 @@
Thread.current[:persistent_job_id] = task[:id]
Thread.current[:job_key] = task[:job_key]
called_method_arity = self.method(task.worker_method).arity
- args = load_data(task.args)
begin
if called_method_arity != 0
- self.send(task.worker_method,args)
+ self.send(task.worker_method,task.args)
else
self.send(task.worker_method)
end
regards,
chetan
Thanks, Chetan for the patch, I will be commiting them soonish. On Wed, Sep 24, 2008 at 5:05 AM, Chetan Sarva <csarva at operative.com> wrote:> Hi, > > While playing with scheduled jobs, I ran into a couple of issues and made a > few notes. > > > 1) Times MUST be UTC: > > I''ve got the following: > > BdrbJobQueue.insert_job(:worker_name => ''backup_worker'', > :worker_method => ''do_work'', > :args => @backup.id, > :scheduled_at => Time.now + 30) > > > resulting in: > > submitted_at: 2008-09-23 17:57:26 > started_at: 2008-09-23 17:57:30 > finished_at: NULL > archived_at: NULL > scheduled_at: 2008-09-23 17:57:56 > > > changing it to Time.now.utc + 30 fixes it. > > > 2. job_key is mandatory when using the persistent queue since there is a > unique key check on this field. This was not immediately obvious, and no key > is automatically generated. The above code inserts NULL for job_key. > > > I can submit doc patches for the above if that helps. > > > 3. When firing the job at the scheduled time, MetaWorker calls > Marshal.load() on `args` though they were not previously marshalled by > ActiveRecord. I made the following change in my WC in order to move passed > this problem: > > Index: vendor/plugins/backgroundrb/server/lib/meta_worker.rb > ==================================================================> --- vendor/plugins/backgroundrb/server/lib/meta_worker.rb (revision > 114) > +++ vendor/plugins/backgroundrb/server/lib/meta_worker.rb (working > copy) > @@ -287,10 +287,9 @@ > Thread.current[:persistent_job_id] = task[:id] > Thread.current[:job_key] = task[:job_key] > called_method_arity = self.method(task.worker_method).arity > - args = load_data(task.args) > begin > if called_method_arity != 0 > - self.send(task.worker_method,args) > + self.send(task.worker_method,task.args) > else > self.send(task.worker_method) > end > > > > regards, > > chetan > _______________________________________________ > Backgroundrb-devel mailing list > Backgroundrb-devel at rubyforge.org > http://rubyforge.org/mailman/listinfo/backgroundrb-devel >-- Let them talk of their oriental summer climes of everlasting conservatories; give me the privilege of making my own summer with my own coals. http://gnufied.org
Chetan Sarva
2008-Sep-25 17:53 UTC
[Backgroundrb-devel] Persistent queue and scheduled jobs
Note that my patch below was for the case where you have a single, simple argument like a string or int, as it is in our case. If an array or hash is passed, I''m not sure what the behaviour would be. On Sep 24, 2008, at 1:05 PM, hemant wrote:> Thanks, Chetan for the patch, I will be commiting them soonish. > > On Wed, Sep 24, 2008 at 5:05 AM, Chetan Sarva <csarva at operative.com> > wrote: >> Hi, >> >> While playing with scheduled jobs, I ran into a couple of issues >> and made a >> few notes. >> >> >> 1) Times MUST be UTC: >> >> I''ve got the following: >> >> BdrbJobQueue.insert_job(:worker_name => ''backup_worker'', >> :worker_method => ''do_work'', >> :args => @backup.id, >> :scheduled_at => Time.now + 30) >> >> >> resulting in: >> >> submitted_at: 2008-09-23 17:57:26 >> started_at: 2008-09-23 17:57:30 >> finished_at: NULL >> archived_at: NULL >> scheduled_at: 2008-09-23 17:57:56 >> >> >> changing it to Time.now.utc + 30 fixes it. >> >> >> 2. job_key is mandatory when using the persistent queue since there >> is a >> unique key check on this field. This was not immediately obvious, >> and no key >> is automatically generated. The above code inserts NULL for job_key. >> >> >> I can submit doc patches for the above if that helps. >> >> >> 3. When firing the job at the scheduled time, MetaWorker calls >> Marshal.load() on `args` though they were not previously marshalled >> by >> ActiveRecord. I made the following change in my WC in order to move >> passed >> this problem: >> >> Index: vendor/plugins/backgroundrb/server/lib/meta_worker.rb >> ==================================================================>> --- vendor/plugins/backgroundrb/server/lib/meta_worker.rb >> (revision >> 114) >> +++ vendor/plugins/backgroundrb/server/lib/meta_worker.rb >> (working >> copy) >> @@ -287,10 +287,9 @@ >> Thread.current[:persistent_job_id] = task[:id] >> Thread.current[:job_key] = task[:job_key] >> called_method_arity = self.method(task.worker_method).arity >> - args = load_data(task.args) >> begin >> if called_method_arity != 0 >> - self.send(task.worker_method,args) >> + self.send(task.worker_method,task.args) >> else >> self.send(task.worker_method) >> end >> >> >> >> regards, >> >> chetan >> _______________________________________________ >> Backgroundrb-devel mailing list >> Backgroundrb-devel at rubyforge.org >> http://rubyforge.org/mailman/listinfo/backgroundrb-devel >> > > > > -- > Let them talk of their oriental summer climes of everlasting > conservatories; give me the privilege of making my own summer with my > own coals. > > http://gnufied.org