Skip site navigation (1) Skip section navigation (2)

Re: RFC: pgAgent Scheduler Design

From: "Dave Page" <dpage(at)vale-housing(dot)co(dot)uk>
To: <pgadmin-hackers(at)postgresql(dot)org>
Subject: Re: RFC: pgAgent Scheduler Design
Date: 2005-03-05 21:15:07
Message-ID: E7F85A1B5FF8D44C8A1AF6885BC9A0E472B932@ratbert.vale-housing.co.uk (view raw or flat)
Thread:
Lists: pgadmin-hackers
 

> -----Original Message-----
> From: pgadmin-hackers-owner(at)postgresql(dot)org 
> [mailto:pgadmin-hackers-owner(at)postgresql(dot)org] On Behalf Of Dave Page
> Sent: 02 March 2005 20:25
> To: pgadmin-hackers(at)postgresql(dot)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.

Responses

pgadmin-hackers by date

Next:From: Andreas PflugDate: 2005-03-05 23:16:09
Subject: Re: RFC: pgAgent Scheduler Design
Previous:From: cvsDate: 2005-03-04 23:14:32
Subject: CVS Commit by dpage: New splash screen

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group