@@ -212,7 +212,7 @@ char_array_t *readBasesToCheck(void)
212
212
pgstat_report_activity (STATE_RUNNING , "read configuration" );
213
213
result = makeCharArray ();
214
214
215
- value = GetConfigOption ("schedule.database" , 1 , 0 );
215
+ value = GetConfigOption ("schedule.database" , true, false );
216
216
if (!value || strlen (value ) == 0 )
217
217
{
218
218
return result ;
@@ -254,6 +254,7 @@ char_array_t *readBasesToCheck(void)
254
254
pfree (clean_value );
255
255
if (names -> n == 0 )
256
256
{
257
+ destroyCharArray (names );
257
258
return result ;
258
259
}
259
260
@@ -264,45 +265,39 @@ char_array_t *readBasesToCheck(void)
264
265
appendStringInfo (& sql , "'%s'" , names -> data [i ]);
265
266
if (i + 1 != names -> n ) appendStringInfo (& sql , "," );
266
267
}
268
+ destroyCharArray (names );
267
269
appendStringInfo (& sql , ")" );
268
- SetCurrentStatementStartTimestamp ();
269
- StartTransactionCommand ();
270
- SPI_connect ();
271
- PushActiveSnapshot (GetTransactionSnapshot ());
270
+
271
+ START_SPI_SNAP ();
272
272
273
273
ret = SPI_execute (sql .data , true, 0 );
274
274
if (ret != SPI_OK_SELECT )
275
275
{
276
- SPI_finish ();
277
- PopActiveSnapshot ();
278
- CommitTransactionCommand ();
276
+ STOP_SPI_SNAP ();
277
+ elog (ERROR , "cannot select from pg_database" );
279
278
}
280
- destroyCharArray (names );
281
279
processed = SPI_processed ;
282
280
if (processed == 0 )
283
281
{
284
- SPI_finish ();
285
- PopActiveSnapshot ();
286
- CommitTransactionCommand ();
282
+ STOP_SPI_SNAP ();
287
283
return result ;
288
284
}
289
285
for (i = 0 ; i < processed ; i ++ )
290
286
{
291
287
clean_value = SPI_getvalue (SPI_tuptable -> vals [i ], SPI_tuptable -> tupdesc , 1 );
292
288
pushCharArray (result , clean_value );
293
289
}
294
- SPI_finish ();
295
- PopActiveSnapshot ();
296
- CommitTransactionCommand ();
290
+ STOP_SPI_SNAP ();
297
291
sortCharArray (result );
292
+
298
293
return result ;
299
294
}
300
295
301
296
void parent_scheduler_main (Datum arg )
302
297
{
303
298
int rc = 0 , i ;
304
299
char_array_t * names = NULL ;
305
- schd_managers_poll_t * poll ;
300
+ schd_managers_poll_t * pool ;
306
301
schd_manager_share_t * shared ;
307
302
bool refresh = false;
308
303
@@ -319,10 +314,10 @@ void parent_scheduler_main(Datum arg)
319
314
320
315
BackgroundWorkerInitializeConnection ("postgres" , NULL );
321
316
names = readBasesToCheck ();
322
- poll = initSchedulerManagerPool (names );
317
+ pool = initSchedulerManagerPool (names );
323
318
destroyCharArray (names );
324
319
325
- set_supervisor_pgstatus (poll );
320
+ set_supervisor_pgstatus (pool );
326
321
327
322
while (!got_sigterm )
328
323
{
@@ -334,62 +329,62 @@ void parent_scheduler_main(Datum arg)
334
329
ProcessConfigFile (PGC_SIGHUP );
335
330
refresh = false;
336
331
names = NULL ;
337
- if (is_scheduler_enabled () != poll -> enabled )
332
+ if (is_scheduler_enabled () != pool -> enabled )
338
333
{
339
- if (poll -> enabled )
334
+ if (pool -> enabled )
340
335
{
341
- poll -> enabled = false;
342
- stopAllManagers (poll );
343
- set_supervisor_pgstatus (poll );
336
+ pool -> enabled = false;
337
+ stopAllManagers (pool );
338
+ set_supervisor_pgstatus (pool );
344
339
}
345
340
else
346
341
{
347
342
refresh = true;
348
- poll -> enabled = true;
343
+ pool -> enabled = true;
349
344
names = readBasesToCheck ();
350
345
}
351
346
}
352
- else if (poll -> enabled )
347
+ else if (pool -> enabled )
353
348
{
354
349
names = readBasesToCheck ();
355
- if (isBaseListChanged (names , poll )) refresh = true;
350
+ if (isBaseListChanged (names , pool )) refresh = true;
356
351
else destroyCharArray (names );
357
352
}
358
353
359
354
if (refresh )
360
355
{
361
- refreshManagers (names , poll );
362
- set_supervisor_pgstatus (poll );
356
+ refreshManagers (names , pool );
357
+ set_supervisor_pgstatus (pool );
363
358
destroyCharArray (names );
364
359
}
365
360
}
366
361
else
367
362
{
368
- for (i = 0 ; i < poll -> n ; i ++ )
363
+ for (i = 0 ; i < pool -> n ; i ++ )
369
364
{
370
- shared = dsm_segment_address (poll -> workers [i ]-> shared );
365
+ shared = dsm_segment_address (pool -> workers [i ]-> shared );
371
366
372
367
if (shared -> setbychild )
373
368
{
374
- /* elog(LOG, "got status change from: %s", poll ->workers[i]->dbname); */
369
+ /* elog(LOG, "got status change from: %s", pool ->workers[i]->dbname); */
375
370
shared -> setbychild = false;
376
371
if (shared -> status == SchdManagerConnected )
377
372
{
378
- poll -> workers [i ]-> connected = true;
373
+ pool -> workers [i ]-> connected = true;
379
374
}
380
375
else if (shared -> status == SchdManagerQuit )
381
376
{
382
- removeManagerFromPoll (poll , poll -> workers [i ]-> dbname , 1 , true);
383
- set_supervisor_pgstatus (poll );
377
+ removeManagerFromPoll (pool , pool -> workers [i ]-> dbname , 1 , true);
378
+ set_supervisor_pgstatus (pool );
384
379
}
385
380
else if (shared -> status == SchdManagerDie )
386
381
{
387
- removeManagerFromPoll (poll , poll -> workers [i ]-> dbname , 1 , false);
388
- set_supervisor_pgstatus (poll );
382
+ removeManagerFromPoll (pool , pool -> workers [i ]-> dbname , 1 , false);
383
+ set_supervisor_pgstatus (pool );
389
384
}
390
385
else
391
386
{
392
- 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 );
393
388
}
394
389
}
395
390
}
@@ -399,7 +394,7 @@ void parent_scheduler_main(Datum arg)
399
394
CHECK_FOR_INTERRUPTS ();
400
395
ResetLatch (MyLatch );
401
396
}
402
- stopAllManagers (poll );
397
+ stopAllManagers (pool );
403
398
delete_worker_mem_ctx ();
404
399
405
400
proc_exit (0 );
0 commit comments