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

Commit4ab6060

Browse files
author
Vladimir Ershov
committed
more clean but still bug in EE 9.6.2
1 parentd2b77ad commit4ab6060

File tree

6 files changed

+43
-60
lines changed

6 files changed

+43
-60
lines changed

‎src/char_array.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ char_array_t *makeCharArray(void)
2525

2626
char_array_t*sortCharArray(char_array_t*a)
2727
{
28+
if(a->n <=1)returna;
2829
qsort(a->data,a->n,sizeof(char*),__sort_char_string);
2930

3031
returna;

‎src/memutils.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,6 @@ void *worker_alloc(Size size)
2929

3030
voiddelete_worker_mem_ctx(void)
3131
{
32+
MemoryContextSwitchTo(TopMemoryContext);
3233
MemoryContextDelete(SchedulerWorkerContext);
3334
}

‎src/pgpro_scheduler.c

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ char_array_t *readBasesToCheck(void)
212212
pgstat_report_activity(STATE_RUNNING,"read configuration");
213213
result=makeCharArray();
214214

215-
value=GetConfigOption("schedule.database",1,0);
215+
value=GetConfigOption("schedule.database",true, false);
216216
if(!value||strlen(value)==0)
217217
{
218218
returnresult;
@@ -254,6 +254,7 @@ char_array_t *readBasesToCheck(void)
254254
pfree(clean_value);
255255
if(names->n==0)
256256
{
257+
destroyCharArray(names);
257258
returnresult;
258259
}
259260

@@ -264,46 +265,39 @@ char_array_t *readBasesToCheck(void)
264265
appendStringInfo(&sql,"'%s'",names->data[i]);
265266
if(i+1!=names->n)appendStringInfo(&sql,",");
266267
}
268+
destroyCharArray(names);
267269
appendStringInfo(&sql,")");
268-
SetCurrentStatementStartTimestamp();
269-
StartTransactionCommand();
270-
SPI_connect();
271-
PushActiveSnapshot(GetTransactionSnapshot());
270+
271+
START_SPI_SNAP();
272272

273273
ret=SPI_execute(sql.data, true,0);
274274
if (ret!=SPI_OK_SELECT)
275275
{
276-
SPI_finish();
277-
PopActiveSnapshot();
278-
CommitTransactionCommand();
276+
STOP_SPI_SNAP();
279277
elog(ERROR,"cannot select from pg_database");
280278
}
281-
destroyCharArray(names);
282279
processed=SPI_processed;
283280
if(processed==0)
284281
{
285-
SPI_finish();
286-
PopActiveSnapshot();
287-
CommitTransactionCommand();
282+
STOP_SPI_SNAP();
288283
returnresult;
289284
}
290285
for(i=0;i<processed;i++)
291286
{
292287
clean_value=SPI_getvalue(SPI_tuptable->vals[i],SPI_tuptable->tupdesc,1);
293288
pushCharArray(result,clean_value);
294289
}
295-
SPI_finish();
296-
PopActiveSnapshot();
297-
CommitTransactionCommand();
290+
STOP_SPI_SNAP();
298291
sortCharArray(result);
292+
299293
returnresult;
300294
}
301295

302296
voidparent_scheduler_main(Datumarg)
303297
{
304298
intrc=0,i;
305299
char_array_t*names=NULL;
306-
schd_managers_poll_t*poll;
300+
schd_managers_poll_t*pool;
307301
schd_manager_share_t*shared;
308302
boolrefresh= false;
309303

@@ -320,10 +314,10 @@ void parent_scheduler_main(Datum arg)
320314

321315
BackgroundWorkerInitializeConnection("postgres",NULL);
322316
names=readBasesToCheck();
323-
poll=initSchedulerManagerPool(names);
317+
pool=initSchedulerManagerPool(names);
324318
destroyCharArray(names);
325319

326-
set_supervisor_pgstatus(poll);
320+
set_supervisor_pgstatus(pool);
327321

328322
while(!got_sigterm)
329323
{
@@ -335,62 +329,62 @@ void parent_scheduler_main(Datum arg)
335329
ProcessConfigFile(PGC_SIGHUP);
336330
refresh= false;
337331
names=NULL;
338-
if(is_scheduler_enabled()!=poll->enabled)
332+
if(is_scheduler_enabled()!=pool->enabled)
339333
{
340-
if(poll->enabled)
334+
if(pool->enabled)
341335
{
342-
poll->enabled= false;
343-
stopAllManagers(poll);
344-
set_supervisor_pgstatus(poll);
336+
pool->enabled= false;
337+
stopAllManagers(pool);
338+
set_supervisor_pgstatus(pool);
345339
}
346340
else
347341
{
348342
refresh= true;
349-
poll->enabled= true;
343+
pool->enabled= true;
350344
names=readBasesToCheck();
351345
}
352346
}
353-
elseif(poll->enabled)
347+
elseif(pool->enabled)
354348
{
355349
names=readBasesToCheck();
356-
if(isBaseListChanged(names,poll))refresh= true;
350+
if(isBaseListChanged(names,pool))refresh= true;
357351
elsedestroyCharArray(names);
358352
}
359353

360354
if(refresh)
361355
{
362-
refreshManagers(names,poll);
363-
set_supervisor_pgstatus(poll);
356+
refreshManagers(names,pool);
357+
set_supervisor_pgstatus(pool);
364358
destroyCharArray(names);
365359
}
366360
}
367361
else
368362
{
369-
for(i=0;i<poll->n;i++)
363+
for(i=0;i<pool->n;i++)
370364
{
371-
shared=dsm_segment_address(poll->workers[i]->shared);
365+
shared=dsm_segment_address(pool->workers[i]->shared);
372366

373367
if(shared->setbychild)
374368
{
375-
/* elog(LOG, "got status change from: %s",poll->workers[i]->dbname); */
369+
/* elog(LOG, "got status change from: %s",pool->workers[i]->dbname); */
376370
shared->setbychild= false;
377371
if(shared->status==SchdManagerConnected)
378372
{
379-
poll->workers[i]->connected= true;
373+
pool->workers[i]->connected= true;
380374
}
381375
elseif(shared->status==SchdManagerQuit)
382376
{
383-
removeManagerFromPoll(poll,poll->workers[i]->dbname,1, true);
384-
set_supervisor_pgstatus(poll);
377+
removeManagerFromPoll(pool,pool->workers[i]->dbname,1, true);
378+
set_supervisor_pgstatus(pool);
385379
}
386380
elseif(shared->status==SchdManagerDie)
387381
{
388-
removeManagerFromPoll(poll,poll->workers[i]->dbname,1, false);
389-
set_supervisor_pgstatus(poll);
382+
removeManagerFromPoll(pool,pool->workers[i]->dbname,1, false);
383+
set_supervisor_pgstatus(pool);
390384
}
391385
else
392386
{
393-
elog(WARNING,"manager: %s set strange status: %d",poll->workers[i]->dbname,shared->status);
387+
elog(WARNING,"manager: %s set strange status: %d",pool->workers[i]->dbname,shared->status);
394388
}
395389
}
396390
}
@@ -400,7 +394,7 @@ void parent_scheduler_main(Datum arg)
400394
CHECK_FOR_INTERRUPTS();
401395
ResetLatch(MyLatch);
402396
}
403-
stopAllManagers(poll);
397+
stopAllManagers(pool);
404398
delete_worker_mem_ctx();
405399

406400
proc_exit(0);

‎src/sched_manager_poll.c

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -297,14 +297,8 @@ int addManagerToPoll(schd_managers_poll_t *poll, char *name, int sort)
297297
schd_manager_t*man;
298298
schd_manager_share_t*shm_data;
299299
Sizesegsize;
300-
/*shm_toc_estimator e;
301-
shm_toc *toc; */
302300
dsm_segment*seg;
303301

304-
/*shm_toc_initialize_estimator(&e);
305-
shm_toc_estimate_chunk(&e, sizeof(schd_manager_share_t));
306-
shm_toc_estimate_keys(&e, 1);
307-
segsize = shm_toc_estimate(&e); */
308302
segsize= (Size)sizeof(schd_manager_share_t);
309303

310304
CurrentResourceOwner=ResourceOwnerCreate(NULL,"pgpro_scheduler");
@@ -315,11 +309,6 @@ int addManagerToPoll(schd_managers_poll_t *poll, char *name, int sort)
315309
man->connected= false;
316310
memcpy(man->dbname,name,strlen(name)+1);
317311
man->shared=seg;
318-
/*toc = shm_toc_create(PGPRO_SHM_TOC_MAGIC, dsm_segment_address(man->shared),
319-
segsize);
320-
321-
shm_data = shm_toc_allocate(toc, sizeof(schd_manager_share_t));
322-
shm_toc_insert(toc, 0, shm_data); */
323312
shm_data=dsm_segment_address(man->shared);
324313

325314
shm_data->setbyparent= true;

‎src/scheduler_executor.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ void executor_worker_main(Datum arg)
108108
BackgroundWorkerUnblockSignals();
109109

110110
init_worker_mem_ctx("ExecutorMemoryContext");
111-
switch_to_worker_context();
112111
worker_jobs_limit=read_worker_job_limit();
113112

114113
while(1)
@@ -626,15 +625,15 @@ void at_executor_worker_main(Datum arg)
626625
if(seg==NULL)
627626
ereport(ERROR,
628627
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
629-
errmsg("executor unable to map dynamic shared memory segment")));
628+
errmsg("at-executor unable to map dynamic shared memory segment")));
630629
shared=dsm_segment_address(seg);
631630
/* parent = BackendPidGetProc(MyBgworkerEntry->bgw_notify_pid); */
632631

633632
if(shared->status!=SchdExecutorInit)
634633
{
635634
ereport(ERROR,
636635
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
637-
errmsg("executor corrupted dynamic shared memory segment")));
636+
errmsg("at-executor corrupted dynamic shared memory segment")));
638637
}
639638
shared->start_at=GetCurrentTimestamp();
640639

@@ -647,7 +646,6 @@ void at_executor_worker_main(Datum arg)
647646
BackgroundWorkerUnblockSignals();
648647

649648
init_worker_mem_ctx("ExecutorMemoryContext");
650-
switch_to_worker_context();
651649

652650
while(1)
653651
{
@@ -730,6 +728,7 @@ int process_one_job(schd_executor_share_state_t *shared, schd_executor_status_t
730728
return -1;
731729
} */
732730
STOP_SPI_SNAP();/* Commit changes */
731+
elog(LOG,"JOB MOVED TO PROCESSED");
733732
pgstat_report_activity(STATE_RUNNING,"job initialized");
734733
START_SPI_SNAP();
735734

@@ -753,6 +752,7 @@ int process_one_job(schd_executor_share_state_t *shared, schd_executor_status_t
753752
return-1;
754753
}
755754
STOP_SPI_SNAP();
755+
elog(LOG,"JOB MOVED TO DONE");
756756
return1;
757757
}
758758

‎src/scheduler_manager.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,14 @@ int checkSchedulerNamespace(void)
5858

5959
schema=GetConfigOption("schedule.schema", false, true);
6060

61-
StartTransactionCommand();
62-
SPI_connect();
63-
PushActiveSnapshot(GetTransactionSnapshot());
61+
START_SPI_SNAP();
6462

6563
values[0]=CStringGetTextDatum(schema);
6664
count=select_count_with_args(sql,1,argtypes,values,NULL);
6765

6866
if(count==-1)
6967
{
68+
STOP_SPI_SNAP();
7069
elog(ERROR,"Scheduler manager: %s: cannot check namespace: sql error",
7170
MyBgworkerEntry->bgw_name);
7271
}
@@ -82,13 +81,12 @@ int checkSchedulerNamespace(void)
8281
}
8382
elseif(count!=1)
8483
{
84+
STOP_SPI_SNAP();
8585
elog(ERROR,"Scheduler manager: %s: cannot check namespace: "
8686
"unknown error %d",MyBgworkerEntry->bgw_name,count);
8787
}
88+
STOP_SPI_SNAP();
8889

89-
SPI_finish();
90-
PopActiveSnapshot();
91-
CommitTransactionCommand();
9290
if(count) {
9391
SetConfigOption("search_path",schema,PGC_USERSET,PGC_S_SESSION);
9492
}
@@ -1762,7 +1760,7 @@ void manager_worker_main(Datum arg)
17621760
{
17631761
got_sighup= false;
17641762
ProcessConfigFile(PGC_SIGHUP);
1765-
reload_db_role_config(database);
1763+
reload_db_role_config(database);
17661764
refresh_scheduler_manager_context(ctx);
17671765
set_slots_stat_report(ctx);
17681766
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp