fix(fs/rmtree): fix huge memory usage (#7073)

Fixes zammad#15258

This adds a sane concurrency limit of 2 per depth level.

Co-authored-by: Florent BEAUCHAMP <florent.beauchamp@vates.fr>
This commit is contained in:
Julien Fontanet 2023-10-06 09:52:11 +02:00 committed by GitHub
parent 8727c3cf96
commit afb110c473
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -624,14 +624,18 @@ export default class RemoteHandlerAbstract {
const files = await this._list(dir) const files = await this._list(dir)
await asyncEach(files, file => await asyncEach(files, file =>
this._unlink(`${dir}/${file}`).catch(error => { this._unlink(`${dir}/${file}`).catch(
// Unlink dir behavior is not consistent across platforms error => {
// https://github.com/nodejs/node-v0.x-archive/issues/5791 // Unlink dir behavior is not consistent across platforms
if (error.code === 'EISDIR' || error.code === 'EPERM') { // https://github.com/nodejs/node-v0.x-archive/issues/5791
return this._rmtree(`${dir}/${file}`) if (error.code === 'EISDIR' || error.code === 'EPERM') {
} return this._rmtree(`${dir}/${file}`)
throw error }
}) throw error
},
// real unlink concurrency will be 2**max directory depth
{ concurrency: 2 }
)
) )
return this._rmtree(dir) return this._rmtree(dir)
} }