Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commita4f01da

Browse files
author
Vladimir Ershov
committed
very beginning
1 parentabc1274 commita4f01da

File tree

7 files changed

+191
-86
lines changed

7 files changed

+191
-86
lines changed

‎Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ OBJS = src/pgpro_scheduler.o src/cron_string.o src/sched_manager_poll.o \
55
src/scheduler_executor.o\
66
$(WIN32RES)
77
EXTENSION = pgpro_scheduler
8-
DATA = pgpro_scheduler--1.0.sql
8+
DATA = pgpro_scheduler--2.0.sql
99
REGRESS= install_pgpro_scheduler cron_string
1010
#REGRESS_OPTS = --user=postgres
1111
EXTRA_REGRESS_OPTS=--temp-config=$(top_srcdir)/$(subdir)/conf.add

‎pgpro_scheduler--1.0.sqlrenamed to‎pgpro_scheduler--2.0.sql

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,29 @@
33
CREATESCHEMAIF NOT EXISTS schedule;
44

55
CREATETYPEschedule.job_statusAS ENUM ('working','done','error');
6+
CREATETYPEschedule.at_job_statusAS ENUM ('submitted','working','done','error');
7+
8+
CREATETABLEschedule.at_jobs(
9+
idSERIALPRIMARY KEY,
10+
nodetext,
11+
nametext,
12+
commentstext,
13+
attimestamp with time zone default now(),
14+
do_sqltext[],
15+
same_transactionboolean DEFAULT false,
16+
onrollback_statementtext,
17+
executortext,
18+
ownertext,
19+
postpone interval,
20+
max_run_timeinterval,
21+
max_instancesinteger default1,
22+
status at_job_status default'submited',
23+
submit_timetimestamp with time zone default now(),
24+
startedtimestamp with time zone,
25+
finishedtimestamp with time zone,
26+
reasontext
27+
);
28+
CREATEINDEXat_jobs_status_node_at_idxonschedule.at (status, node, at);
629

730
CREATETABLEschedule.cron(
831
idSERIALPRIMARY KEY,

‎pgpro_scheduler.control

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
comment = 'Postgres Pro Scheduler'
2-
default_version = '1.0'
2+
default_version = '2.0'
33
module_pathname = '$libdir/pgpro_scheduler'
44
relocatable = true

‎src/scheduler_job.c

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@
1111
#include"memutils.h"
1212
#include"port.h"
1313

14-
job_t*init_scheduler_job(job_t*j)
14+
job_t*init_scheduler_job(job_t*j,unsignedchartype)
1515
{
1616
if(j==NULL)j=worker_alloc(sizeof(job_t));
1717
memset(j,0,sizeof(job_t));
1818
j->is_active= false;
19+
j->type=type;
1920

2021
returnj;
2122
}
@@ -61,7 +62,41 @@ job_t *get_jobs_to_do(char *nodename, int *n, int *is_error)
6162
returnjobs;
6263
}
6364

64-
job_t*get_expired_jobs(char*nodename,int*n,int*is_error)
65+
job_t*get_expired_at_jobs(char*nodename,int*n,int*is_error)
66+
{
67+
StringInfoDatasql;
68+
job_t*jobs=NULL;
69+
intret,got,i;
70+
71+
*n=*is_error=0;
72+
initStringInfo(&sql);
73+
appendStringInfo(&sql,"select at, last_start_available, id from at_jobs where last_start_available < 'now' and status = 'submitted' and node = '%s'",nodename);
74+
ret=SPI_execute(sql.data, true,0);
75+
if(ret==SPI_OK_SELECT)
76+
{
77+
got=SPI_processed;
78+
if(got>0)
79+
{
80+
*n=got;
81+
jobs=worker_alloc(sizeof(job_t)*got);
82+
for(i=0;i<got;i++)
83+
{
84+
init_scheduler_job(&(jobs[i]),2);
85+
jobs[i].start_at=get_timestamp_from_spi(i,1,0);
86+
jobs[i].last_start_avail=get_timestamp_from_spi(i,2,0);
87+
jobs[i].cron_id=get_int_from_spi(i,3,0);
88+
jobs[i].node=_copy_string(nodename);
89+
}
90+
}
91+
}
92+
else
93+
{
94+
*is_error=1;
95+
}
96+
returnjobs;
97+
}
98+
99+
job_t*get_expired_cron_jobs(char*nodename,int*n,int*is_error)
65100
{
66101
StringInfoDatasql;
67102
job_t*jobs=NULL;
@@ -80,7 +115,7 @@ job_t *get_expired_jobs(char *nodename, int *n, int *is_error)
80115
jobs=worker_alloc(sizeof(job_t)*got);
81116
for(i=0;i<got;i++)
82117
{
83-
init_scheduler_job(&(jobs[i]));
118+
init_scheduler_job(&(jobs[i]),1);
84119
jobs[i].start_at=get_timestamp_from_spi(i,1,0);
85120
jobs[i].last_start_avail=get_timestamp_from_spi(i,2,0);
86121
jobs[i].cron_id=get_int_from_spi(i,3,0);

‎src/scheduler_job.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include"port.h"
1212

1313
typedefstruct {
14+
unsignedchartype;/* 1 - cron job, 2 - at job */
1415
intcron_id;
1516
TimestampTzstart_at;
1617
char*node;
@@ -30,7 +31,7 @@ typedef struct {
3031
}job_t;
3132

3233
job_t*init_scheduler_job(job_t*j);
33-
job_t*get_expired_jobs(char*nodename,int*n,int*is_error);
34+
job_t*get_expired_cron_jobs(char*nodename,int*n,int*is_error);
3435
job_t*get_jobs_to_do(char*nodename,int*n,int*is_error);
3536
job_t*set_job_error(job_t*j,constchar*fmt, ...)pg_attribute_printf(2,3);
3637
intmove_job_to_log(job_t*j,boolstatus);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp