mirror of
https://github.com/postgres/postgres.git
synced 2025-11-03 09:13:20 +03:00
Fix assertion failure in apply worker.
During exit, the logical replication apply worker tries to release session level locks, if any. However, if the apply worker exits due to an error before its connection is initialized, trying to release locks can lead to assertion failure. The locks will be acquired once the worker is initialized, so we don't need to release them till the worker initialization is complete. Reported-by: Alexander Lakhin Author: Hou Zhijie based on inputs from Sawada Masahiko and Amit Kapila Reviewed-by: Amit Kapila Discussion: https://postgr.es/m/2185d65f-5aae-3efa-c48f-fb42b173ef5c@gmail.com
This commit is contained in:
@@ -797,8 +797,11 @@ logicalrep_worker_onexit(int code, Datum arg)
|
||||
* Session level locks may be acquired outside of a transaction in
|
||||
* parallel apply mode and will not be released when the worker
|
||||
* terminates, so manually release all locks before the worker exits.
|
||||
*
|
||||
* The locks will be acquired once the worker is initialized.
|
||||
*/
|
||||
LockReleaseAll(DEFAULT_LOCKMETHOD, true);
|
||||
if (!InitializingApplyWorker)
|
||||
LockReleaseAll(DEFAULT_LOCKMETHOD, true);
|
||||
|
||||
ApplyLauncherWakeup();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user