Re: [nodejs] Re: file system API race conditions

2014-02-27 Thread Sam Roberts
On Wed, Feb 26, 2014 at 4:40 PM, Alex Kocharin a...@kocharin.ru wrote: This sounds like a very good idea... I wonder, is there any downside to it? Performance maybe? Its good idea if its what you want to do. It doesn't work with directories on systems that don't allow hard links between

Re: [nodejs] Re: file system API race conditions

2014-02-26 Thread Matt
Also note that fs-ext (on npm) implements flock() which is required in many circumstances too. On Wed, Feb 26, 2014 at 12:20 AM, Andrew Kelley superjo...@gmail.comwrote: Actually, there is a solution! fs.link to the new file. This will fail with EEXIST if it exists. And then fs.unlink on the

Re: [nodejs] Re: file system API race conditions

2014-02-26 Thread Alex Kocharin
 This sounds like a very good idea... I wonder, is there any downside to it? Performance maybe?  26.02.2014, 09:20, "Andrew Kelley" superjo...@gmail.com:Actually, there is a solution! fs.link to the new file. This will fail with EEXIST if it exists. And then fs.unlink on the old file. Everything

Re: [nodejs] Re: file system API race conditions

2014-02-26 Thread Matt Sergeant
There is no performance downside in the failure mode. But obviously in the success mode there's two function calls vs one. But realistically the overhead of file system operations on spinning disks will far outweigh the extra API calls. On Feb 26, 2014, at 7:40 PM, Alex Kocharin

[nodejs] Re: file system API race conditions

2014-02-25 Thread Andrew Kelley
Oops, I see that fs.createWriteStream has the flags as an option. But I think the point still stands for fs.rename. On Tuesday, February 25, 2014 11:56:44 PM UTC-5, Andrew Kelley wrote: fs.open has an important flag you can set to avoid race conditions: wx This allows you to open a file,

[nodejs] Re: file system API race conditions

2014-02-25 Thread Andrew Kelley
I guess it comes down to the rename C function: http://pubs.opengroup.org/onlinepubs/009695399/functions/rename.html Doesn't support no-overwrite flags. So there's not really a fix to this. On Wednesday, February 26, 2014 12:01:18 AM UTC-5, Andrew Kelley wrote: Oops, I see that

[nodejs] Re: file system API race conditions

2014-02-25 Thread Andrew Kelley
Actually, there is a solution! fs.link to the new file. This will fail with EEXIST if it exists. And then fs.unlink on the old file. Everything works, life is good On Wednesday, February 26, 2014 12:07:29 AM UTC-5, Andrew Kelley wrote: I guess it comes down to the rename C function: