Re: WIP: [[Parallel] Shared] Hash
Peter Geoghegan <pg@bowt.ie>
On Sat, Mar 25, 2017 at 7:56 PM, Thomas Munro <thomas.munro@enterprisedb.com> wrote: > On Sun, Mar 26, 2017 at 1:53 PM, Peter Geoghegan <pg@bowt.ie> wrote: >> ISTM that your patch now shares a quality with parallel tuplesort: You >> may now hold files open after an unlink() of the original link/path >> that they were opened using. As Robert pointed out when discussing >> parallel tuplesort earlier in the week, that comes with the risk, >> however small, that the vFD cache will close() the file out from under >> us during LRU maintenance, resulting in a subsequent open() (at the >> tail-end of the vFD's lifetime) that fails unexpectedly. It's probably >> fine to assume that we can sanely close() the file ourselves in fd.c >> error paths despite a concurrent unlink(), since we never operate on >> the link itself, and there probably isn't much pressure on each >> backend's vFD cache. But, is that good enough? I can't say, though I >> suspect that this particular risk is one that's best avoided. >> >> I haven't tested out how much of a problem this might be for your >> patch, but I do know that resowner.c will call your shared mem segment >> callback before closing any backend local vFDs, so I can't imagine how >> it could be that this risk doesn't exist. > > I wouldn't have expected anything like that to be a problem, because > FileClose() doesn't call FileAccess(). So IIUC it wouldn't ever try > to reopen a kernel fd just to close it. The concern is that something somewhere does. For example, mdread() calls FileRead(), which calls FileAccess(), ultimately because of some obscure catalog access. It's very hard to reason about things like that. -- Peter Geoghegan
Commits
-
Add shared tuplestores.
- ab9e0e718acb 11.0 landed
-
Remove BufFile's isTemp flag.
- 11e264517dff 11.0 landed
-
Provide DSM segment to ExecXXXInitializeWorker functions.
- 7082e614c0dd 11.0 landed
-
Optimize joins when the inner relation can be proven unique.
- 9c7f5229ad68 10.0 cited
-
Fix failure to use clamp_row_est() for parallel joins.
- 1ea60ad602f9 10.0 cited
-
Document lack of validation when attaching foreign partitions.
- b54aad8e34bd 10.0 cited
-
Fix inclusions of c.h from .h files.
- a72f0365db41 10.0 landed
-
Fix inclusions of postgres_fe.h from .h files.
- 9722bb5757c5 10.0 landed
-
Bring plpgsql into line with header inclusion policy.
- 08da52859a1f 10.0 landed
-
Document intentional violations of header inclusion policy.
- d6b059ec740a 10.0 landed
-
Shut down Gather's children before shutting down Gather itself.
- acf555bc53ac 10.0 landed
-
btree: Support parallel index scans.
- 569174f1be92 10.0 cited
-
Add explicit ORDER BY to a few tests that exercise hash-join code.
- 7c5d8c16e12e 10.0 landed
-
Revise hash join code so that we can increase the number of batches
- 849074f9ae42 8.1.0 cited
-
Rewrite hash join to use simple linked lists instead of a
- 26069a58e8e4 7.1.1 cited