Re: [HACKERS] pg_background contrib module proposal

Поиск
Список
Период
Сортировка
От Jim Nasby
Тема Re: [HACKERS] pg_background contrib module proposal
Дата
Msg-id d1f4aa68-2df1-76e6-20f4-933ea3f8c2f5@BlueTreble.com
обсуждение исходный текст
Ответ на Re: [HACKERS] pg_background contrib module proposal  (amul sul <sulamul@gmail.com>)
Ответы Re: [HACKERS] pg_background contrib module proposal  (amul sul <sulamul@gmail.com>)
Список pgsql-hackers
On 1/9/17 7:22 AM, amul sul wrote:
> On Sun, Jan 8, 2017 at 8:50 AM, Jim Nasby <Jim.Nasby@bluetreble.com> wrote:
>>
> [skipped...]
>>
>> Oh, hmm. So I guess if you do that when the background process is idle it's
>> the same as a close?
>>
>> I think we need some way to safeguard against accidental forkbombs for cases
>> where users aren't intending to leave something running in the background.
>> There's other reasons to use this besides spawning long running processes,
>> and I'd certainly want to be able to ensure the calling function wasn't
>> accidentally leaving things running that it didn't mean to. (Maybe the patch
>> already does this...)
>>
>
> Current pg_background patch built to the top of BackgroundSession code
> take care of that;
> user need to call pg_background_close() to gracefully close previously
> forked background
> worker.  Even though if user session who forked this worker exited
> without calling
> pg_background_close(), this background worked force to exit with following log:
>
> ERROR:  could not read from message queue: Other process has detached queue
> LOG:  could not send on message queue: Other process has detached queue
> LOG:  worker process: background session by PID 61242 (PID 61358)
> exited with exit code 1
>
> Does this make sense to you?

I'm specifically thinking of autonomous transactions, where you do NOT 
want to run the command in the background, but you do want to run it in 
another connection.

The other example is running a command in another database. Not the same 
as the autonomous transaction use case, but once again you likely don't 
want that command running in the background.

Put another way, when you launch a new process in a shell script, you 
have to do something specific for that process to run in the background.

My concern here is that AIUI the only way to launch a bgworker is with 
it already backgrounded. That makes it much more likely that a bug in 
your code produces an unintended fork-bomb (connection-bomb?). That 
would be especially true if the function was re-entrant.

Since one of the major points of bgworkers is exactly to run stuff in 
the background, while the parent connection is doing something else, I 
can certainly understand the default case being to background something, 
but I think it'd be good to have a simple way to start a bgworker, have 
it do something, and wait until it's done.

Make sense?
-- 
Jim Nasby, Data Architect, Blue Treble Consulting, Austin TX
Experts in Analytics, Data Architecture and PostgreSQL
Data in Trouble? Get it in Treble! http://BlueTreble.com
855-TREBLE2 (855-873-2532)



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: [HACKERS] Increase pltcl test coverage
Следующее
От: Joel Jacobson
Дата:
Сообщение: Re: [HACKERS] RustgreSQL