fix(vhd-lib, fs): use rmtree and not rmTree (#6041)

This commit is contained in:
Florent BEAUCHAMP
2021-12-06 14:25:09 +01:00
committed by GitHub
parent fc2dbbe3ee
commit faa7ba6f24
3 changed files with 15 additions and 5 deletions

View File

@@ -222,9 +222,9 @@ export default class S3Handler extends RemoteHandlerAbstract {
// nothing to do, directories do not exist, they are part of the files' path
}
// reimplement _rmTree to handle efficiantly path with more than 1000 entries in trees
// reimplement _rmtree to handle efficiantly path with more than 1000 entries in trees
// @todo : use parallel processing for unlink
async _rmTree(path) {
async _rmtree(path) {
let NextContinuationToken
do {
const result = await this._s3.listObjectsV2({
@@ -233,8 +233,13 @@ export default class S3Handler extends RemoteHandlerAbstract {
ContinuationToken: NextContinuationToken,
})
NextContinuationToken = result.isTruncated ? null : result.NextContinuationToken
for (const path of result.Contents) {
await this._unlink(path)
for (const { Key } of result.Contents) {
// _unlink will add the prefix, but Key contains everything
// also we don't need to check if we delete a directory, since the list only return files
await this._s3.deleteObject({
Bucket: this._bucket,
Key,
})
}
} while (NextContinuationToken !== null)
}

View File

@@ -12,6 +12,7 @@
> Users must be able to say: “I had this issue, happy to know it's fixed”
- [Tables/actions] Fix collapsed actions being clickable despite being disabled (PR [#6023](https://github.com/vatesfr/xen-orchestra/pull/6023))
- [Backup] Fix `handler.rmTree` is not a function (Forum [5256](https://xcp-ng.org/forum/topic/5256/s3-backup-try-it/29) PR [#6041](https://github.com/vatesfr/xen-orchestra/pull/6041) )
### Packages to release
@@ -30,4 +31,8 @@
>
> In case of conflict, the highest (lowest in previous list) `$version` wins.
- @xen-orchestra/fs patch
- vhd-lib patch
- xo-server patch
- @xen-orchestra/proxy patch
- xo-web patch

View File

@@ -162,7 +162,7 @@ export async function createVhdDirectoryFromStream(handler, path, inputStream, {
}
} catch (error) {
// cleanup on error
await handler.rmTree(path)
await handler.rmtree(path)
throw error
}
}