Repository navigation
fs: calling mkdir in fs.cp function can ignore EEXIST error - #53534
ShenHongFei wants to merge 2 commits into
Conversation
| await mkdir(dest); | ||
| } catch (error) { | ||
| // If the folder already exists, skip it. | ||
| if (error.code !== 'EEXIST') |
There was a problem hiding this comment.
This pull-request needs a test.
There was a problem hiding this comment.
I added a test and adjusted it to ignore this error only when the errorOnExist parameter is false
3ae92fb to
5659000
Compare
|
@anonrig I added a test and changed the logic to ignore the error only when the errorOnExist parameter is false. What else do I need to do? Can you take another look? |
| try { | ||
| await mkdir(dest); | ||
| } catch (error) { | ||
| // If the folder already exists, skip it. | ||
| if (error.code === 'EEXIST' && !opts.errorOnExist); else | ||
| throw error; | ||
| } |
There was a problem hiding this comment.
When set to recursive, it will automatically ignore the EEXIST error. And the situation that needs to consider force.
| try { | |
| await mkdir(dest); | |
| } catch (error) { | |
| // If the folder already exists, skip it. | |
| if (error.code === 'EEXIST' && !opts.errorOnExist); else | |
| throw error; | |
| } | |
| await mkdir(dest, { | |
| recursive: opts.force || !opts.errorOnExist | |
| }); |
|
PTAL @anonrig. I just encountered the same issue. When using fs.cp in a concurrent situation, this bug occurs. |
When installing duplicated dependencies, it triggers concurrency issues in Node.js (see: nodejs/node#53534). This can be avoided by pre-deduplication. Signed-off-by: Kevin Cui <bh@bugs.cc>
When installing duplicated dependencies, it triggers concurrency issues in Node.js (see: nodejs/node#53534). This can be avoided by pre-deduplication. Signed-off-by: Kevin Cui <bh@bugs.cc>
|
This pull request has been marked as stale due to 90 days of inactivity. |
This PR mainly aims to solve the following problem. During the execution of the fsp.cp function, due to other file operations, the target directory of fsp.cp is created in parallel. The actual situation may be more complicated. Multiple file operations are executed concurrently, resulting in an error in the internal fsp.cp when calling mkdir, because the folder has been created by other file operations. In this case, you can actually ignore this error and continue with the subsequent file copying operation.
The relevant code is in lib/internal/fs/cp/cp.js.
destStat is empty here, it did not exist when checking the folder before.
I want to ignore the EEXIST error thrown by mkdir