Re: RFC: pgAgent Scheduler Design - Mailing list pgadmin-hackers
From | Dave Page |
---|---|
Subject | Re: RFC: pgAgent Scheduler Design |
Date | |
Msg-id | E7F85A1B5FF8D44C8A1AF6885BC9A0E472B932@ratbert.vale-housing.co.uk Whole thread Raw |
In response to | RFC: pgAgent Scheduler Design ("Dave Page" <dpage@vale-housing.co.uk>) |
Responses |
Re: RFC: pgAgent Scheduler Design
(Andreas Pflug <pgadmin@pse-consulting.de>)
|
List | pgadmin-hackers |
> -----Original Message----- > From: pgadmin-hackers-owner@postgresql.org > [mailto:pgadmin-hackers-owner@postgresql.org] On Behalf Of Dave Page > Sent: 02 March 2005 20:25 > To: pgadmin-hackers@postgresql.org > Subject: [pgadmin-hackers] RFC: pgAgent Scheduler Design > <snip> > The basic design that I'm leaning towards is as follows, which each > schedule being represented in one row in a table. Y'know, having thought about all that for a few days, I'm simply not happy with it - it's all too messy and inconsistent :-(. So, thought #2 - follow a modified cron-style design: Control ------- jscstart timestamptz -- date/time the schedule may start at. jscend timestamptz -- date/time the schedule will end at. jscenabled bool -- is the schedule active? Note the lack of run counting in this design. This is primarily because missed runs (caused by system downtime for example) would be extremely difficult to count, potentially leading to errors calculating the schedule end. In addition, an end date would almost certainly give most people the flexibility they require. Schedule -------- jscminutes bool[60] -- 0,1,2,3...59 jschours bool[24] -- 0,1,2,3...23 jscweekdays bool[7] -- mon,tue,wed...sun jscmonthdays bool[32] -- 0,1,2,3...31,last jscmonths bool[12] -- jan,feb,mar...dec In this scheme, the elements of the arrays represent the possible values for each part of the schedule - for example, jscweekdays[] represents mon, tue, wed, thur, fri, sat, sun. If an array contains 'f' for all values, it is considered to be the cron * equivalent. jscmonthdays also includes an additional element to represent the last day of the month, regardless of it's actual number, per Andreas' suggestion. As per cron, a simple algorithm would determine if a schedule should fire: If ((jscminutes[datetime.minute] || jscminutes.IsAllFalse()) && (jschours[datetime.hour] || jschours.IsAllFalse()) && (jscweekdays[datetime.weekday] || jscweekdays.IsAllFalse()) && (jscmonthdays[datetime.monthday] || jscmonthdays.IsAllFalse() || (datetime.lastdayofmonth && jscmonthdays[32])) && (jscmonths[datetime.month] || jscmonths.IsAllFalse())) { FireSchedule(); } (I think that's about right - it's been a long day :-) ) Exceptions ---------- In addition, an exceptions table will be maintained: jsedate date jsetime time If a schedule matches the specified date and/or time (either may be null), it will be skipped. Thoughts, comments? Anyone else as well as Andreas? :-) Regards, Dave.
pgadmin-hackers by date: