Re: logical replication worker accesses catalogs in error context callback
От | Bharath Rupireddy |
---|---|
Тема | Re: logical replication worker accesses catalogs in error context callback |
Дата | |
Msg-id | CALj2ACXiEujAixHnBEaXAAuRwYEBZ7hWydXFjtdt_vLgT6CLdg@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: logical replication worker accesses catalogs in error context callback (Masahiko Sawada <sawada.mshk@gmail.com>) |
Ответы |
Re: logical replication worker accesses catalogs in error context callback
|
Список | pgsql-hackers |
On Mon, Jan 11, 2021 at 10:56 AM Masahiko Sawada <sawada.mshk@gmail.com> wrote: > Agreed. Attached the updated patch. Thanks for the updated patch. Looks like the comment crosses the 80 char limit, I have corrected it. And also changed the variable name from remotetypeid to remotetypid, so that logicalrep_typmap_gettypname will not cross the 80 char limit. And also added a commit message. Attaching v3 patch, please have a look. Both make check and make check-world passes. > > I quickly searched in places where error callbacks are being used, I > > think we need a similar kind of fix for conversion_error_callback in > > postgres_fdw.c, because get_attname and get_rel_name are being used > > which do catalogue lookups. ISTM that all the other error callbacks > > are good in the sense that they are not doing sys catalogue lookups. > > Indeed. If we need to disallow the catalog lookup during executing > error callbacks we might want to have an assertion checking that in > SearchCatCacheInternal(), in addition to Assert(IsTransactionState()). I tried to add(as attached in v1-0001-Avoid-Sys-Cache-Lookups-in-Error-Callbacks.patch) the Assert(!error_context_stack); in SearchCatCacheInternal, initdb itself fails [1]. That means, we are doing a bunch of catalogue access from error context callbacks. Given this, I'm not quite sure whether we can have such an assertion in SearchCatCacheInternal. Although unrelated to what we are discussing here - when I looked at SearchCatCacheInternal, I found that the function SearchCatCache has SearchCatCacheInternal in the function comment, I think we should correct it. Thoughts? If okay, I will post a separate patch for this minor comment fix. [1] running bootstrap script ... TRAP: FailedAssertion("error_context_stack", File: "catcache.c", Line: 1220, PID: 310728) /home/bharath/workspace/postgres/instnew/bin/postgres(ExceptionalCondition+0xd0)[0x56056984c8ba] /home/bharath/workspace/postgres/instnew/bin/postgres(+0x76eb1a)[0x560569826b1a] /home/bharath/workspace/postgres/instnew/bin/postgres(SearchCatCache1+0x3a)[0x5605698269af] /home/bharath/workspace/postgres/instnew/bin/postgres(SearchSysCache1+0xc1)[0x5605698448b2] /home/bharath/workspace/postgres/instnew/bin/postgres(get_typtype+0x1f)[0x56056982e389] /home/bharath/workspace/postgres/instnew/bin/postgres(CheckAttributeType+0x29)[0x5605692bafe9] /home/bharath/workspace/postgres/instnew/bin/postgres(CheckAttributeNamesTypes+0x2c9)[0x5605692bafac] /home/bharath/workspace/postgres/instnew/bin/postgres(heap_create_with_catalog+0x11f)[0x5605692bc436] /home/bharath/workspace/postgres/instnew/bin/postgres(boot_yyparse+0x7f0)[0x5605692a0d3f] /home/bharath/workspace/postgres/instnew/bin/postgres(+0x1ecb36)[0x5605692a4b36] /home/bharath/workspace/postgres/instnew/bin/postgres(AuxiliaryProcessMain+0x5e0)[0x5605692a4997] /home/bharath/workspace/postgres/instnew/bin/postgres(main+0x268)[0x5605694c6bce] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0x7fa2777ce0b3] /home/bharath/workspace/postgres/instnew/bin/postgres(_start+0x2e)[0x5605691794de] With Regards, Bharath Rupireddy. EnterpriseDB: http://www.enterprisedb.com
Вложения
В списке pgsql-hackers по дате отправления: