First off BackgroundRb rocks!!!!. Top marks Ezra, it''s gone a long way to stopping us from doing a nasty curl/cron hack :) Okay so here''s what we''re using it for. We''re synchronising data from a Filemaker database, via web service equest, into a mysql database via a rails model called ''Syncer'' [How''s that for an oddball use case!]. Now this model exposes a static method which goes away and does the business. When it starts synchronising it creates a log record for it, and when it finishes it updates that log record. Fair enough. All is working beautfiully and this is the perfect candidate for using with backgroundRb. First couple of runs through it worked perfectly. Then things started going wonky. My worker is as simple as this.. class FilemakerSyncWorker < BackgrounDRb::Rails repeat_every 20.minutes first_run Time.now def do_work(args) Syncer.new.synchronise end end What''s really weird, and maybe is my complete lack of understanding of threads and such like is this, randomly, throughout the day the log records created in .synchronise are getting *almost* duplicated, it''s like the method is getting invoked twice at the exact same time, and finishing just slightly off the previous time. Example from logs today.. | ID | Status | Start Time | End Time | Status | 165 | Failed | 2006-09-28 10:28:23 | 2006-09-28 10:28:27 | Expected | 164 | Failed | 2006-09-28 10:08:23 | 2006-09-28 10:08:24 | Expected | 163 | Complete | 2006-09-28 09:48:23 | 2006-09-28 09:49:26 | Almost Duplicate (note end time) | 162 | Complete | 2006-09-28 09:48:23 | 2006-09-28 09:49:25 | Expected | 161 | Complete | 2006-09-28 09:28:23 | 2006-09-28 09:29:12 | Almost Duplicate | 160 | Complete | 2006-09-28 09:28:23 | 2006-09-28 09:29:13 | Expected | 159 | Complete | 2006-09-28 09:08:23 | 2006-09-28 09:09:55 | Expected I''ve checked the running process, and there''s just the one ruby process, so it''s not like it''s spawning any different process. Given the end times are fractionally different of the log records it''s not like the record is getting duplicated. This is on a Dual G5 box, I haven''t tested any other box yet. It''s not killing us as the same records are getting updated when it duplicates so we don''t really care that it is duplicating, it''s just odd and I don''t think should be happening... Can anyone shed any light on it ? Thanks again Ezra !! Rowan --- www.rowanhick.com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/backgroundrb-devel/attachments/20060928/cf951b5d/attachment.html
Charles Brian Quinn
2006-Sep-28 23:20 UTC
[Backgroundrb-devel] Duplicate record weirdness ?
Not to detract from backgroundRB because I love it myself, and am excited about the rewrite, BTW, but we have a situation where we''re performing a "sync" operation with a salesforce database, and sometimes it is quite slow (and has a lot to sync) -- as such, we had to stop using backgroundrb and went to a regular cron job (ugh) using script/runner and a custom class that just uses AR. In doing so, we wrote a quick wrapper using ruby lockfile library to make sure that when a task is running, that it creates and pings a lockfile -- this way when a secondary cron set to update every 1 or 5 minutes runs, it waits a certain amount of time, and then just doesn''t run if one''s already running. Simliarly, if a job has been "running" for over an hour, it kills the lock and just steals it and runs. Is a nice library and the wrapper was simple enough. I have seen issues (on this list) with the timer doing strange things (duplicate calls). In case you didn''t know, there''s a rewrite that Ezra is squeezing in between his day job, writing a deployment book, and launching a hosting company (!) -- it is fixing part of the problems with the timer class, and he''s outlined (search the archive) the steps it needs to fix. hope this helps, cheers, -- Charles Brian Quinn self-promotion: www.seebq.com highgroove studios: www.highgroove.com slingshot hosting: www.slingshothosting.com On 9/28/06, Rowan Hick <ubermunkey at gmail.com> wrote:> First off BackgroundRb rocks!!!!. Top marks Ezra, it''s gone a long way to > stopping us from doing a nasty curl/cron hack :) > > Okay so here''s what we''re using it for. > > We''re synchronising data from a Filemaker database, via web service equest, > into a mysql database via a rails model called ''Syncer'' [How''s that for an > oddball use case!]. Now this model exposes a static method which goes away > and does the business. When it starts synchronising it creates a log record > for it, and when it finishes it updates that log record. Fair enough. All is > working beautfiully and this is the perfect candidate for using with > backgroundRb. First couple of runs through it worked perfectly. Then things > started going wonky. > > My worker is as simple as this.. > > class FilemakerSyncWorker < BackgrounDRb::Rails > repeat_every 20.minutes > first_run Time.now > def do_work(args) > Syncer.new.synchronise > end > end > > What''s really weird, and maybe is my complete lack of understanding of > threads and such like is this, randomly, throughout the day the log records > created in .synchronise are getting *almost* duplicated, it''s like the > method is getting invoked twice at the exact same time, and finishing just > slightly off the previous time. Example from logs today.. > > | ID | Status | Start Time | End Time | Status > | 165 | Failed | 2006-09-28 10:28:23 | 2006-09-28 10:28:27 | Expected > | 164 | Failed | 2006-09-28 10:08:23 | 2006-09-28 10:08:24 | Expected > | 163 | Complete | 2006-09-28 09:48:23 | 2006-09-28 09:49:26 | Almost > Duplicate (note end time) > | 162 | Complete | 2006-09-28 09:48:23 | 2006-09-28 09:49:25 | Expected > | 161 | Complete | 2006-09-28 09:28:23 | 2006-09-28 09:29:12 | Almost > Duplicate > | 160 | Complete | 2006-09-28 09:28:23 | 2006-09-28 09:29:13 | Expected > | 159 | Complete | 2006-09-28 09:08:23 | 2006-09-28 09:09:55 | Expected > > I''ve checked the running process, and there''s just the one ruby process, so > it''s not like it''s spawning any different process. Given the end times are > fractionally different of the log records it''s not like the record is > getting duplicated. This is on a Dual G5 box, I haven''t tested any other box > yet. It''s not killing us as the same records are getting updated when it > duplicates so we don''t really care that it is duplicating, it''s just odd and > I don''t think should be happening... > > Can anyone shed any light on it ? > > Thanks again Ezra !! > > > Rowan > --- > www.rowanhick.com > > > > > > _______________________________________________ > Backgroundrb-devel mailing list > Backgroundrb-devel at rubyforge.org > http://rubyforge.org/mailman/listinfo/backgroundrb-devel > >
Hey Charles, thanks for the reply. Interesting approach, I may just introduce a quick hack to keep things ticking along for the moment. Just read the call for help email and will try out the new version. Cheers R On 9/28/06, Charles Brian Quinn <me at seebq.com> wrote:> > Not to detract from backgroundRB because I love it myself, and am > excited about the rewrite, BTW, but we have a situation where we''re > performing a "sync" operation with a salesforce database, and > sometimes it is quite slow (and has a lot to sync) -- as such, we had > to stop using backgroundrb and went to a regular cron job (ugh) using > script/runner and a custom class that just uses AR. > > In doing so, we wrote a quick wrapper using ruby lockfile library to > make sure that when a task is running, that it creates and pings a > lockfile -- this way when a secondary cron set to update every 1 or 5 > minutes runs, it waits a certain amount of time, and then just doesn''t > run if one''s already running. Simliarly, if a job has been "running" > for over an hour, it kills the lock and just steals it and runs. Is a > nice library and the wrapper was simple enough. > > I have seen issues (on this list) with the timer doing strange things > (duplicate calls). In case you didn''t know, there''s a rewrite that > Ezra is squeezing in between his day job, writing a deployment book, > and launching a hosting company (!) -- it is fixing part of the > problems with the timer class, and he''s outlined (search the archive) > the steps it needs to fix. > > hope this helps, cheers, > -- > Charles Brian Quinn > self-promotion: www.seebq.com > highgroove studios: www.highgroove.com > slingshot hosting: www.slingshothosting.com > > > On 9/28/06, Rowan Hick <ubermunkey at gmail.com> wrote: > > First off BackgroundRb rocks!!!!. Top marks Ezra, it''s gone a long way > to > > stopping us from doing a nasty curl/cron hack :) > > > > Okay so here''s what we''re using it for. > > > > We''re synchronising data from a Filemaker database, via web service > equest, > > into a mysql database via a rails model called ''Syncer'' [How''s that for > an > > oddball use case!]. Now this model exposes a static method which goes > away > > and does the business. When it starts synchronising it creates a log > record > > for it, and when it finishes it updates that log record. Fair enough. > All is > > working beautfiully and this is the perfect candidate for using with > > backgroundRb. First couple of runs through it worked perfectly. Then > things > > started going wonky. > > > > My worker is as simple as this.. > > > > class FilemakerSyncWorker < BackgrounDRb::Rails > > repeat_every 20.minutes > > first_run Time.now > > def do_work(args) > > Syncer.new.synchronise > > end > > end > > > > What''s really weird, and maybe is my complete lack of understanding of > > threads and such like is this, randomly, throughout the day the log > records > > created in .synchronise are getting *almost* duplicated, it''s like the > > method is getting invoked twice at the exact same time, and finishing > just > > slightly off the previous time. Example from logs today.. > > > > | ID | Status | Start Time | End Time | Status > > | 165 | Failed | 2006-09-28 10:28:23 | 2006-09-28 10:28:27 | Expected > > | 164 | Failed | 2006-09-28 10:08:23 | 2006-09-28 10:08:24 | > Expected > > | 163 | Complete | 2006-09-28 09:48:23 | 2006-09-28 09:49:26 | Almost > > Duplicate (note end time) > > | 162 | Complete | 2006-09-28 09:48:23 | 2006-09-28 09:49:25 | Expected > > | 161 | Complete | 2006-09-28 09:28:23 | 2006-09-28 09:29:12 | Almost > > Duplicate > > | 160 | Complete | 2006-09-28 09:28:23 | 2006-09-28 09:29:13 | Expected > > | 159 | Complete | 2006-09-28 09:08:23 | 2006-09-28 09:09:55 | Expected > > > > I''ve checked the running process, and there''s just the one ruby process, > so > > it''s not like it''s spawning any different process. Given the end times > are > > fractionally different of the log records it''s not like the record is > > getting duplicated. This is on a Dual G5 box, I haven''t tested any other > box > > yet. It''s not killing us as the same records are getting updated when it > > duplicates so we don''t really care that it is duplicating, it''s just odd > and > > I don''t think should be happening... > > > > Can anyone shed any light on it ? > > > > Thanks again Ezra !! > > > > > > Rowan > > --- > > www.rowanhick.com > > > > > > > > > > > > _______________________________________________ > > Backgroundrb-devel mailing list > > Backgroundrb-devel at rubyforge.org > > http://rubyforge.org/mailman/listinfo/backgroundrb-devel > > > > >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/backgroundrb-devel/attachments/20060929/63ca2ba7/attachment-0001.html