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

Commitb3432ba

Browse files
author
Vladimir Ershov
committed
Merge commit '695a5d01a22d99096bebb2ba6fa153970b86b6dd' into PGPROEE9_6_scheduler
2 parents4c27c2d +695a5d0 commitb3432ba

File tree

6 files changed

+35
-39
lines changed

6 files changed

+35
-39
lines changed

‎contrib/pgpro_scheduler/src/memutils.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,11 @@ void *worker_alloc(Size size)
3535
returnMemoryContextAlloc(SchedulerWorkerContext,size);
3636
}
3737

38-
voiddelete_worker_mem_ctx(void)
38+
voiddelete_worker_mem_ctx(MemoryContextold)
3939
{
40-
MemoryContextSwitchTo(TopMemoryContext);
40+
if(!old)old=TopMemoryContext;
41+
42+
MemoryContextSwitchTo(old);
4143
MemoryContextDelete(SchedulerWorkerContext);
4244
SchedulerWorkerContext=NULL;
4345
}

‎contrib/pgpro_scheduler/src/memutils.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ MemoryContext init_worker_mem_ctx(const char *name);
1010
MemoryContextinit_mem_ctx(constchar*name);
1111
MemoryContextswitch_to_worker_context(void);
1212
void*worker_alloc(Sizesize);
13-
voiddelete_worker_mem_ctx(void);
13+
voiddelete_worker_mem_ctx(MemoryContexttoswitch);
1414

1515
#endif

‎contrib/pgpro_scheduler/src/pgpro_scheduler.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ void parent_scheduler_main(Datum arg)
395395
ResetLatch(MyLatch);
396396
}
397397
stopAllManagers(pool);
398-
delete_worker_mem_ctx();
398+
delete_worker_mem_ctx(NULL);
399399

400400
proc_exit(0);
401401
}

‎contrib/pgpro_scheduler/src/scheduler_executor.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ void executor_worker_main(Datum arg)
8484
PGPROC*parent;
8585

8686
CurrentResourceOwner=ResourceOwnerCreate(NULL,"pgpro_scheduler_executor");
87+
init_worker_mem_ctx("ExecutorMemoryContext");
88+
8789
seg=dsm_attach(DatumGetInt32(arg));
8890
if(seg==NULL)
8991
ereport(ERROR,
@@ -107,7 +109,6 @@ void executor_worker_main(Datum arg)
107109
pqsignal(SIGHUP,worker_spi_sighup);
108110
BackgroundWorkerUnblockSignals();
109111

110-
init_worker_mem_ctx("ExecutorMemoryContext");
111112
worker_jobs_limit=read_worker_job_limit();
112113

113114
while(1)
@@ -146,7 +147,7 @@ void executor_worker_main(Datum arg)
146147
shared->worker_exit= true;
147148
shared->status=SchdExecutorError;
148149
}
149-
delete_worker_mem_ctx();
150+
delete_worker_mem_ctx(NULL);
150151
dsm_detach(seg);
151152
proc_exit(0);
152153
}
@@ -157,7 +158,7 @@ void executor_worker_main(Datum arg)
157158
if(rc&&rc&WL_POSTMASTER_DEATH)break;
158159
}
159160

160-
delete_worker_mem_ctx();
161+
delete_worker_mem_ctx(NULL);
161162
dsm_detach(seg);
162163
proc_exit(0);
163164
}
@@ -360,7 +361,7 @@ int set_session_authorization(char *username, char **error)
360361
intrv;
361362
char*sql="select oid, rolsuper from pg_catalog.pg_roles where rolname = $1";
362363
charbuff[1024];
363-
MemoryContextmem=CurrentMemoryContext;
364+
MemoryContextmem=SchedulerWorkerContext;
364365

365366
values[0]=CStringGetTextDatum(username);
366367
START_SPI_SNAP();
@@ -440,7 +441,7 @@ TimestampTz get_next_excution_time(char *sql, executor_error_t *ee)
440441

441442
START_SPI_SNAP();
442443
pgstat_report_activity(STATE_RUNNING,"culc next time execution time");
443-
r=execute_spi(CurrentMemoryContext,sql);
444+
r=execute_spi(SchedulerWorkerContext,sql);
444445
if(r->retval<0)
445446
{
446447
if(r->error)
@@ -665,6 +666,7 @@ void at_executor_worker_main(Datum arg)
665666
/* PGPROC *parent; */
666667

667668
CurrentResourceOwner=ResourceOwnerCreate(NULL,"pgpro_scheduler_at_executor");
669+
init_worker_mem_ctx("ExecutorMemoryContext");
668670
seg=dsm_attach(DatumGetInt32(arg));
669671
if(seg==NULL)
670672
ereport(ERROR,
@@ -689,7 +691,6 @@ void at_executor_worker_main(Datum arg)
689691
pqsignal(SIGHUP,worker_spi_sighup);
690692
BackgroundWorkerUnblockSignals();
691693

692-
init_worker_mem_ctx("ExecutorMemoryContext");
693694

694695
while(1)
695696
{
@@ -708,7 +709,7 @@ void at_executor_worker_main(Datum arg)
708709
}
709710
elseif(result<0)
710711
{
711-
delete_worker_mem_ctx();
712+
delete_worker_mem_ctx(NULL);
712713
dsm_detach(seg);
713714
proc_exit(1);
714715
}
@@ -730,7 +731,7 @@ void at_executor_worker_main(Datum arg)
730731
elog(LOG,"at worker stopped by parent signal");
731732
}
732733

733-
delete_worker_mem_ctx();
734+
delete_worker_mem_ctx(NULL);
734735
dsm_detach(seg);
735736
proc_exit(0);
736737
}

‎contrib/pgpro_scheduler/src/scheduler_manager.c

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1738,7 +1738,7 @@ void start_at_workers(scheduler_manager_ctx_t *ctx, schd_manager_share_t *shared
17381738
if(start_at_worker(ctx,i)==0)
17391739
{
17401740
scheduler_manager_stop(ctx);
1741-
delete_worker_mem_ctx();
1741+
delete_worker_mem_ctx(NULL);
17421742
changeChildBgwState(shared,SchdManagerDie);
17431743
dsm_detach(ctx->seg);
17441744
proc_exit(0);
@@ -1757,7 +1757,7 @@ void manager_worker_main(Datum arg)
17571757
scheduler_manager_ctx_t*ctx;
17581758
intwait=0;
17591759
schd_manager_share_t*parent_shared;
1760-
MemoryContextold;
1760+
MemoryContextold=NULL;
17611761
MemoryContextlongTerm;
17621762

17631763

@@ -1795,7 +1795,7 @@ void manager_worker_main(Datum arg)
17951795
elog(LOG,"cannot start scheduler for %s - there is no namespace",database);
17961796
changeChildBgwState(shared,SchdManagerQuit);
17971797
dsm_detach(seg);
1798-
delete_worker_mem_ctx();
1798+
delete_worker_mem_ctx(NULL);
17991799
proc_exit(0);
18001800
}
18011801
SetCurrentStatementStartTimestamp();
@@ -1837,17 +1837,12 @@ void manager_worker_main(Datum arg)
18371837
{
18381838
wait=0;
18391839
if(check_parent_stop_signal(ctx,parent_shared))break;
1840-
/** start at jobs **/
1841-
/**** wait += scheduler_start_jobs(ctx, AtJob); */
18421840

18431841
/** start cron jobs **/
18441842
wait+=scheduler_start_jobs(ctx,CronJob);
18451843

1846-
/** check at slots **/
1847-
/**** scheduler_check_slots(ctx, &(ctx->at)); */
1848-
18491844
/** check cron slots **/
1850-
scheduler_check_slots(ctx,&(ctx->cron));
1845+
scheduler_check_slots(ctx,&(ctx->cron));
18511846

18521847
scheduler_make_atcron_record(ctx);
18531848
set_slots_stat_report(ctx);
@@ -1858,16 +1853,15 @@ void manager_worker_main(Datum arg)
18581853
}
18591854
}
18601855

1861-
MemoryContextSwitchTo(old);
1862-
delete_worker_mem_ctx();
1856+
delete_worker_mem_ctx(old);
18631857
rc=WaitLatch(MyLatch,
18641858
WL_LATCH_SET |WL_TIMEOUT |WL_POSTMASTER_DEATH,1500L);
18651859
ResetLatch(MyLatch);
18661860
}
18671861
scheduler_manager_stop(ctx);
18681862
pgstat_report_activity(STATE_RUNNING,"finalize manager");
18691863
changeChildBgwState(shared,SchdManagerDie);
1870-
if(SchedulerWorkerContext)delete_worker_mem_ctx();
1864+
if(SchedulerWorkerContext)delete_worker_mem_ctx(old);
18711865
dsm_detach(seg);
18721866
pgstat_report_activity(STATE_RUNNING,"drop context");
18731867
MemoryContextDelete(longTerm);
@@ -1888,7 +1882,7 @@ void manager_fatal_error(scheduler_manager_ctx_t *ctx, int ecode, char *message,
18881882
va_end(arglist);
18891883

18901884

1891-
delete_worker_mem_ctx();
1885+
delete_worker_mem_ctx(NULL);
18921886
if(ecode==0)
18931887
{
18941888
ecode=ERRCODE_INTERNAL_ERROR;

‎contrib/pgpro_scheduler/src/scheduler_spi_utils.c

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,9 @@ spi_response_t *__copy_spi_data(MemoryContext ctx, int ret, int n)
9393
inti,j;
9494
Datumdat;
9595
boolis_null;
96+
MemoryContextold;
9697

97-
98+
old=MemoryContextSwitchTo(ctx);
9899
r=MemoryContextAlloc(ctx,sizeof(spi_response_t));
99100
if(!r)returnNULL;
100101
r->retval=ret;
@@ -147,6 +148,7 @@ spi_response_t *__copy_spi_data(MemoryContext ctx, int ret, int n)
147148
}
148149
}
149150
}
151+
MemoryContextSwitchTo(old);
150152

151153
returnr;
152154
}
@@ -495,32 +497,32 @@ spi_response_t *execute_spi_sql_with_args(MemoryContext ctx, const char *sql, in
495497
charother[100];
496498
ResourceOwneroldowner=CurrentResourceOwner;
497499
spi_response_t*rv=NULL;
498-
MemoryContextold;
500+
MemoryContextold=CurrentMemoryContext;
499501

500502
if(!ctx)ctx=SchedulerWorkerContext;
501503

504+
505+
502506
SetCurrentStatementStartTimestamp();
503507
BeginInternalSubTransaction(NULL);
504-
old=MemoryContextSwitchTo(ctx);
508+
MemoryContextSwitchTo(old);
505509

506510
PG_TRY();
507511
{
508512
ret=SPI_execute_with_args(sql,n,argtypes,values,nulls, false,0);
509-
MemoryContextSwitchTo(ctx);
510513
rv=__copy_spi_data(ctx,ret,SPI_processed);
511514
if(!rv)
512515
{
513516
elog(LOG,"ESSWA: Cannot allocate memory while copy resp data");
514517
returnNULL;
515518
}
516519
ReleaseCurrentSubTransaction();
517-
MemoryContextSwitchTo(ctx);
520+
MemoryContextSwitchTo(old);
518521
CurrentResourceOwner=oldowner;
519522
SPI_restore_connection();
520523
}
521524
PG_CATCH();
522525
{
523-
MemoryContextSwitchTo(ctx);
524526
edata=CopyErrorData();
525527
if(edata->message)
526528
{
@@ -541,7 +543,7 @@ spi_response_t *execute_spi_sql_with_args(MemoryContext ctx, const char *sql, in
541543
}
542544
RollbackAndReleaseCurrentSubTransaction();
543545
CurrentResourceOwner=oldowner;
544-
MemoryContextSwitchTo(ctx);
546+
MemoryContextSwitchTo(old);
545547
SPI_restore_connection();
546548
FreeErrorData(edata);
547549
FlushErrorState();
@@ -574,12 +576,10 @@ spi_response_t *execute_spi_sql_with_args(MemoryContext ctx, const char *sql, in
574576
if(!rv)
575577
{
576578
elog(LOG,"ESSWA: Cannot allocate memory while reporting pg error");
577-
MemoryContextSwitchTo(old);
578579
returnNULL;
579580
}
580581
}
581582

582-
MemoryContextSwitchTo(old);
583583
returnrv;
584584
}
585585

@@ -599,6 +599,7 @@ spi_response_t *execute_spi_params_prepared(MemoryContext ctx, const char *sql,
599599
inti;
600600
ResourceOwneroldowner=CurrentResourceOwner;
601601
spi_response_t*rv;
602+
MemoryContextold=CurrentMemoryContext;
602603

603604
if(!ctx)ctx=SchedulerWorkerContext;
604605

@@ -613,7 +614,7 @@ spi_response_t *execute_spi_params_prepared(MemoryContext ctx, const char *sql,
613614

614615
SetCurrentStatementStartTimestamp();
615616
BeginInternalSubTransaction(NULL);
616-
switch_to_worker_context();
617+
MemoryContextSwitchTo(old);
617618

618619
PG_TRY();
619620
{
@@ -630,14 +631,12 @@ spi_response_t *execute_spi_params_prepared(MemoryContext ctx, const char *sql,
630631
}
631632
}
632633
ReleaseCurrentSubTransaction();
633-
switch_to_worker_context();
634+
MemoryContextSwitchTo(old);
634635
CurrentResourceOwner=oldowner;
635636
SPI_restore_connection();
636637
}
637638
PG_CATCH();
638639
{
639-
switch_to_worker_context();
640-
641640
edata=CopyErrorData();
642641
if(edata->message)
643642
{
@@ -660,7 +659,7 @@ spi_response_t *execute_spi_params_prepared(MemoryContext ctx, const char *sql,
660659
FlushErrorState();
661660
RollbackAndReleaseCurrentSubTransaction();
662661
CurrentResourceOwner=oldowner;
663-
switch_to_worker_context();
662+
MemoryContextSwitchTo(old);
664663
SPI_restore_connection();
665664
}
666665
PG_END_TRY();

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp