On Sun, Mar 25, 2018 at 12:18:10AM -0400, Tom Lane wrote: > My thought was (a) the ROLLBACK case is ok, because the next use of > the dictionary will reload it, and (b) the reload-concurrently-with- > DROP case is annoying, because indeed it leaks, but the window is small > and it probably won't be an issue in practice. We would need to be > sure that the DSM segment goes away at postmaster restart, but given > that I think it'd be tolerable. Of course it'd be better not to have > the race, but I see no easy way to prevent it -- do you?
I'm not sure that I understood the second case correclty. Can cache invalidation help in this case? I don't have confident knowledge of cache invalidation. It seems to me that InvalidateTSCacheCallBack() should release segment after commit. But cache isn't invalidated if a backend was terminated after a dictionary reloading. on_shmem_exit() could help, but we need a leaked dictionaries list for that. P.S. I think it isn't right to release all dictionaries segment in InvalidateTSCacheCallBack(). Otherwise any DROP can release all segments. It would be worth to release a specific dictionary. -- Arthur Zakirov Postgres Professional: http://www.postgrespro.com Russian Postgres Company