Thread: PathNameCreateTemporaryDir() vs concurrency

PathNameCreateTemporaryDir() vs concurrency

From
Thomas Munro
Date:
Hi hackers,

While testing parallel hash join today, I saw a couple of errors like this:

2017-12-26 23:34:37.402 NZDT [13082] ERROR:  cannot create temporary
subdirectory "base/pgsql_tmp/pgsql_tmp13080.0.sharedfileset": File
exists

There is a thinko in PathNameCreateTemporaryDir(), a new function
added in commit dc6c4c9d.  It was designed to tolerate directories
existing already but forgot to handle it in the third mkdir call, so
it fails with unlucky timing.  Please see attached.

-- 
Thomas Munro
http://www.enterprisedb.com

Attachment

Re: PathNameCreateTemporaryDir() vs concurrency

From
Robert Haas
Date:
On Tue, Dec 26, 2017 at 3:11 AM, Thomas Munro
<thomas.munro@enterprisedb.com> wrote:
> While testing parallel hash join today, I saw a couple of errors like this:
>
> 2017-12-26 23:34:37.402 NZDT [13082] ERROR:  cannot create temporary
> subdirectory "base/pgsql_tmp/pgsql_tmp13080.0.sharedfileset": File
> exists
>
> There is a thinko in PathNameCreateTemporaryDir(), a new function
> added in commit dc6c4c9d.  It was designed to tolerate directories
> existing already but forgot to handle it in the third mkdir call, so
> it fails with unlucky timing.  Please see attached.

Committed.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company