@xen-orchestra/fs 4.0.1 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/s3.js +22 -20
- package/dist/s3.js.map +1 -1
- package/package.json +2 -2
package/dist/s3.js
CHANGED
|
@@ -10,9 +10,7 @@ var _nodeHttpHandler = require("@aws-sdk/node-http-handler");
|
|
|
10
10
|
var _middlewareApplyBodyChecksum = require("@aws-sdk/middleware-apply-body-checksum");
|
|
11
11
|
var _http = require("http");
|
|
12
12
|
var _https = require("https");
|
|
13
|
-
var _retry = _interopRequireDefault(require("promise-toolbox/retry"));
|
|
14
13
|
var _log = require("@xen-orchestra/log");
|
|
15
|
-
var _decorateWith = require("@vates/decorate-with");
|
|
16
14
|
var _stream = require("stream");
|
|
17
15
|
var _xoRemoteParser = require("xo-remote-parser");
|
|
18
16
|
var _copyStreamToBuffer = _interopRequireDefault(require("./_copyStreamToBuffer.js"));
|
|
@@ -20,28 +18,13 @@ var _guessAwsRegion = _interopRequireDefault(require("./_guessAwsRegion.js"));
|
|
|
20
18
|
var _abstract = _interopRequireDefault(require("./abstract"));
|
|
21
19
|
var _path = require("./path");
|
|
22
20
|
var _asyncEach = require("@vates/async-each");
|
|
23
|
-
var
|
|
21
|
+
var _promiseToolbox = require("promise-toolbox");
|
|
24
22
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
-
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
|
|
26
23
|
const MAX_PART_SIZE = 1024 * 1024 * 1024 * 5;
|
|
27
24
|
const {
|
|
28
25
|
warn
|
|
29
26
|
} = (0, _log.createLogger)('xo:fs:s3');
|
|
30
|
-
|
|
31
|
-
delays: [100, 200, 500, 1000, 2000],
|
|
32
|
-
when: e => {
|
|
33
|
-
var _e$$metadata;
|
|
34
|
-
return ((_e$$metadata = e.$metadata) === null || _e$$metadata === void 0 ? void 0 : _e$$metadata.httpStatusCode) === 500;
|
|
35
|
-
},
|
|
36
|
-
onRetry(error) {
|
|
37
|
-
warn('retrying writing file', {
|
|
38
|
-
attemptNumber: this.attemptNumber,
|
|
39
|
-
delay: this.delay,
|
|
40
|
-
error,
|
|
41
|
-
file: this.arguments[0]
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
}), (_class = class S3Handler extends _abstract.default {
|
|
27
|
+
class S3Handler extends _abstract.default {
|
|
45
28
|
#bucket;
|
|
46
29
|
#dir;
|
|
47
30
|
#s3;
|
|
@@ -81,6 +64,25 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
|
|
|
81
64
|
const parts = (0, _path.split)(path);
|
|
82
65
|
this.#bucket = parts.shift();
|
|
83
66
|
this.#dir = (0, _path.join)(...parts);
|
|
67
|
+
const WITH_RETRY = ['_closeFile', '_copy', '_getInfo', '_getSize', '_list', '_mkdir', '_openFile', '_outputFile', '_read', '_readFile', '_rename', '_rmdir', '_truncate', '_unlink', '_write', '_writeFile'];
|
|
68
|
+
WITH_RETRY.forEach(functionName => {
|
|
69
|
+
if (this[functionName] !== undefined) {
|
|
70
|
+
this[functionName] = _promiseToolbox.pRetry.wrap(this[functionName], {
|
|
71
|
+
delays: [100, 200, 500, 1000, 2000],
|
|
72
|
+
when: err => !['EEXIST', 'EISDIR', 'ENOTEMPTY', 'ENOENT', 'ENOTDIR', 'EISDIR'].includes(err === null || err === void 0 ? void 0 : err.code),
|
|
73
|
+
onRetry(error) {
|
|
74
|
+
var _this$arguments;
|
|
75
|
+
warn('retrying method on fs ', {
|
|
76
|
+
method: functionName,
|
|
77
|
+
attemptNumber: this.attemptNumber,
|
|
78
|
+
delay: this.delay,
|
|
79
|
+
error,
|
|
80
|
+
file: (_this$arguments = this.arguments) === null || _this$arguments === void 0 ? void 0 : _this$arguments[0]
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
});
|
|
84
86
|
}
|
|
85
87
|
get type() {
|
|
86
88
|
return 's3';
|
|
@@ -335,6 +337,6 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
|
|
|
335
337
|
useVhdDirectory() {
|
|
336
338
|
return true;
|
|
337
339
|
}
|
|
338
|
-
}
|
|
340
|
+
}
|
|
339
341
|
exports.default = S3Handler;
|
|
340
342
|
//# sourceMappingURL=s3.js.map
|
package/dist/s3.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3.js","names":["_clientS","require","_libStorage","_nodeHttpHandler","_middlewareApplyBodyChecksum","_http","_https","_retry","_interopRequireDefault","_log","_decorateWith","_stream","_xoRemoteParser","_copyStreamToBuffer","_guessAwsRegion","_abstract","_path","_asyncEach","_dec","_class","obj","__esModule","default","_applyDecoratedDescriptor","target","property","decorators","descriptor","context","desc","Object","keys","forEach","key","enumerable","configurable","initializer","writable","slice","reverse","reduce","decorator","value","call","undefined","defineProperty","MAX_PART_SIZE","warn","createLogger","S3Handler","decorateWith","pRetry","wrap","delays","when","e","_e$$metadata","$metadata","httpStatusCode","onRetry","error","attemptNumber","delay","file","arguments","RemoteHandlerAbstract","bucket","dir","s3","constructor","remote","_opts","allowUnauthorized","host","path","username","password","protocol","region","guessAwsRegion","parse","url","S3Client","apiVersion","endpoint","forcePathStyle","credentials","accessKeyId","secretAccessKey","tls","requestHandler","NodeHttpHandler","socketTimeout","httpAgent","HttpAgent","keepAlive","httpsAgent","HttpsAgent","rejectUnauthorized","middlewareStack","use","getApplyMd5BodyChecksumPlugin","config","parts","split","shift","join","type","makeCopySource","#makeCopySource","makeKey","#makeKey","makePrefix","#makePrefix","prefix","createParams","#createParams","Bucket","Key","multipartCopy","#multipartCopy","oldPath","newPath","size","_getSize","CopySource","multipartParams","send","CreateMultipartUploadCommand","start","partNumber","length","upload","UploadPartCopyCommand","CopySourceRange","Math","min","PartNumber","push","ETag","CopyPartResult","CompleteMultipartUploadCommand","MultipartUpload","Parts","AbortMultipartUploadCommand","_copy","CopyObjectCommand","name","Error","cause","code","isNotEmptyDir","#isNotEmptyDir","_result$Contents","result","ListObjectsV2Command","MaxKeys","Prefix","Contents","isFile","#isFile","HeadObjectCommand","_outputStream","input","validator","Body","PassThrough","pipeline","Upload","client","params","done","__unlink","_writeFile","data","options","PutObjectCommand","_createReadStream","GetObjectCommand","_unlink","DeleteObjectCommand","_list","NextContinuationToken","uniq","Set","Delimiter","ContinuationToken","IsTruncated","entry","CommonPrefixes","add","basename","_mkdir","_rename","__copy","fd","ContentLength","_read","buffer","position","Range","bytesRead","copyStreamToBuffer","_rmdir","_rmtree","asyncEach","concurrency","_openFile","flags","_closeFile","useVhdDirectory","prototype","getOwnPropertyDescriptor","exports"],"sources":["../src/s3.js"],"sourcesContent":["import {\n AbortMultipartUploadCommand,\n CompleteMultipartUploadCommand,\n CopyObjectCommand,\n CreateMultipartUploadCommand,\n DeleteObjectCommand,\n GetObjectCommand,\n HeadObjectCommand,\n ListObjectsV2Command,\n PutObjectCommand,\n S3Client,\n UploadPartCopyCommand,\n} from '@aws-sdk/client-s3'\nimport { Upload } from '@aws-sdk/lib-storage'\nimport { NodeHttpHandler } from '@aws-sdk/node-http-handler'\nimport { getApplyMd5BodyChecksumPlugin } from '@aws-sdk/middleware-apply-body-checksum'\nimport { Agent as HttpAgent } from 'http'\nimport { Agent as HttpsAgent } from 'https'\nimport pRetry from 'promise-toolbox/retry'\nimport { createLogger } from '@xen-orchestra/log'\nimport { decorateWith } from '@vates/decorate-with'\nimport { PassThrough, pipeline } from 'stream'\nimport { parse } from 'xo-remote-parser'\nimport copyStreamToBuffer from './_copyStreamToBuffer.js'\nimport guessAwsRegion from './_guessAwsRegion.js'\nimport RemoteHandlerAbstract from './abstract'\nimport { basename, join, split } from './path'\nimport { asyncEach } from '@vates/async-each'\n\n// endpoints https://docs.aws.amazon.com/general/latest/gr/s3.html\n\n// limits: https://docs.aws.amazon.com/AmazonS3/latest/dev/qfacts.html\nconst MAX_PART_SIZE = 1024 * 1024 * 1024 * 5 // 5GB\nconst { warn } = createLogger('xo:fs:s3')\n\nexport default class S3Handler extends RemoteHandlerAbstract {\n #bucket\n #dir\n #s3\n\n constructor(remote, _opts) {\n super(remote)\n const {\n allowUnauthorized,\n host,\n path,\n username,\n password,\n protocol,\n region = guessAwsRegion(host),\n } = parse(remote.url)\n\n this.#s3 = new S3Client({\n apiVersion: '2006-03-01',\n endpoint: `${protocol}://${host}`,\n forcePathStyle: true,\n credentials: {\n accessKeyId: username,\n secretAccessKey: password,\n },\n tls: protocol === 'https',\n region,\n requestHandler: new NodeHttpHandler({\n socketTimeout: 600000,\n httpAgent: new HttpAgent({\n keepAlive: true,\n }),\n httpsAgent: new HttpsAgent({\n rejectUnauthorized: !allowUnauthorized,\n keepAlive: true,\n }),\n }),\n })\n\n // Workaround for https://github.com/aws/aws-sdk-js-v3/issues/2673\n this.#s3.middlewareStack.use(getApplyMd5BodyChecksumPlugin(this.#s3.config))\n\n const parts = split(path)\n this.#bucket = parts.shift()\n this.#dir = join(...parts)\n }\n\n get type() {\n return 's3'\n }\n\n #makeCopySource(path) {\n return join(this.#bucket, this.#dir, path)\n }\n\n #makeKey(file) {\n return join(this.#dir, file)\n }\n\n #makePrefix(dir) {\n const prefix = join(this.#dir, dir, '/')\n\n // no prefix for root\n if (prefix !== './') {\n return prefix\n }\n }\n\n #createParams(file) {\n return { Bucket: this.#bucket, Key: this.#makeKey(file) }\n }\n\n async #multipartCopy(oldPath, newPath) {\n const size = await this._getSize(oldPath)\n const CopySource = this.#makeCopySource(oldPath)\n const multipartParams = await this.#s3.send(new CreateMultipartUploadCommand({ ...this.#createParams(newPath) }))\n try {\n const parts = []\n let start = 0\n while (start < size) {\n const partNumber = parts.length + 1\n const upload = await this.#s3.send(\n new UploadPartCopyCommand({\n ...multipartParams,\n CopySource,\n CopySourceRange: `bytes=${start}-${Math.min(start + MAX_PART_SIZE, size) - 1}`,\n PartNumber: partNumber,\n })\n )\n parts.push({ ETag: upload.CopyPartResult.ETag, PartNumber: partNumber })\n start += MAX_PART_SIZE\n }\n await this.#s3.send(\n new CompleteMultipartUploadCommand({\n ...multipartParams,\n MultipartUpload: { Parts: parts },\n })\n )\n } catch (e) {\n await this.#s3.send(new AbortMultipartUploadCommand(multipartParams))\n throw e\n }\n }\n\n async _copy(oldPath, newPath) {\n const CopySource = this.#makeCopySource(oldPath)\n try {\n await this.#s3.send(\n new CopyObjectCommand({\n ...this.#createParams(newPath),\n CopySource,\n })\n )\n } catch (e) {\n // object > 5GB must be copied part by part\n if (e.name === 'EntityTooLarge') {\n return this.#multipartCopy(oldPath, newPath)\n }\n // normalize this error code\n if (e.name === 'NoSuchKey') {\n const error = new Error(`ENOENT: no such file or directory '${oldPath}'`)\n error.cause = e\n error.code = 'ENOENT'\n error.path = oldPath\n throw error\n }\n throw e\n }\n }\n\n async #isNotEmptyDir(path) {\n const result = await this.#s3.send(\n new ListObjectsV2Command({\n Bucket: this.#bucket,\n MaxKeys: 1,\n Prefix: this.#makePrefix(path),\n })\n )\n return result.Contents?.length > 0\n }\n\n async #isFile(path) {\n try {\n await this.#s3.send(new HeadObjectCommand(this.#createParams(path)))\n return true\n } catch (error) {\n if (error.name === 'NotFound') {\n return false\n }\n throw error\n }\n }\n\n async _outputStream(path, input, { validator }) {\n // Workaround for \"ReferenceError: ReadableStream is not defined\"\n // https://github.com/aws/aws-sdk-js-v3/issues/2522\n const Body = new PassThrough()\n pipeline(input, Body, () => {})\n\n const upload = new Upload({\n client: this.#s3,\n params: {\n ...this.#createParams(path),\n Body,\n },\n })\n\n await upload.done()\n\n if (validator !== undefined) {\n try {\n await validator.call(this, path)\n } catch (error) {\n await this.__unlink(path)\n throw error\n }\n }\n }\n\n // some objectstorage provider like backblaze, can answer a 500/503 routinely\n // in this case we should retry, and let their load balancing do its magic\n // https://www.backblaze.com/b2/docs/calling.html#error_handling\n @decorateWith(pRetry.wrap, {\n delays: [100, 200, 500, 1000, 2000],\n when: e => e.$metadata?.httpStatusCode === 500,\n onRetry(error) {\n warn('retrying writing file', {\n attemptNumber: this.attemptNumber,\n delay: this.delay,\n error,\n file: this.arguments[0],\n })\n },\n })\n async _writeFile(file, data, options) {\n return this.#s3.send(\n new PutObjectCommand({\n ...this.#createParams(file),\n Body: data,\n })\n )\n }\n\n async _createReadStream(path, options) {\n try {\n return (await this.#s3.send(new GetObjectCommand(this.#createParams(path)))).Body\n } catch (e) {\n if (e.name === 'NoSuchKey') {\n const error = new Error(`ENOENT: no such file '${path}'`)\n error.code = 'ENOENT'\n error.path = path\n throw error\n }\n throw e\n }\n }\n\n async _unlink(path) {\n await this.#s3.send(new DeleteObjectCommand(this.#createParams(path)))\n\n if (await this.#isNotEmptyDir(path)) {\n const error = new Error(`EISDIR: illegal operation on a directory, unlink '${path}'`)\n error.code = 'EISDIR'\n error.path = path\n throw error\n }\n }\n\n async _list(dir) {\n let NextContinuationToken\n const uniq = new Set()\n const Prefix = this.#makePrefix(dir)\n\n do {\n const result = await this.#s3.send(\n new ListObjectsV2Command({\n Bucket: this.#bucket,\n Prefix,\n Delimiter: '/',\n // will only return path until delimiters\n ContinuationToken: NextContinuationToken,\n })\n )\n\n if (result.IsTruncated) {\n warn(`need pagination to browse the directory ${dir} completely`)\n NextContinuationToken = result.NextContinuationToken\n } else {\n NextContinuationToken = undefined\n }\n\n // subdirectories\n for (const entry of result.CommonPrefixes ?? []) {\n uniq.add(basename(entry.Prefix))\n }\n\n // files\n for (const entry of result.Contents ?? []) {\n uniq.add(basename(entry.Key))\n }\n } while (NextContinuationToken !== undefined)\n\n return [...uniq]\n }\n\n async _mkdir(path) {\n if (await this.#isFile(path)) {\n const error = new Error(`ENOTDIR: file already exists, mkdir '${path}'`)\n error.code = 'ENOTDIR'\n error.path = path\n throw error\n }\n // nothing to do, directories do not exist, they are part of the files' path\n }\n\n // s3 doesn't have a rename operation, so copy + delete source\n async _rename(oldPath, newPath) {\n await this.__copy(oldPath, newPath)\n await this.#s3.send(new DeleteObjectCommand(this.#createParams(oldPath)))\n }\n\n async _getSize(file) {\n if (typeof file !== 'string') {\n file = file.fd\n }\n const result = await this.#s3.send(new HeadObjectCommand(this.#createParams(file)))\n return +result.ContentLength\n }\n\n async _read(file, buffer, position = 0) {\n if (typeof file !== 'string') {\n file = file.fd\n }\n const params = this.#createParams(file)\n params.Range = `bytes=${position}-${position + buffer.length - 1}`\n try {\n const result = await this.#s3.send(new GetObjectCommand(params))\n const bytesRead = await copyStreamToBuffer(result.Body, buffer)\n return { bytesRead, buffer }\n } catch (e) {\n if (e.name === 'NoSuchKey') {\n if (await this.#isNotEmptyDir(file)) {\n const error = new Error(`${file} is a directory`)\n error.code = 'EISDIR'\n error.path = file\n throw error\n }\n }\n throw e\n }\n }\n\n async _rmdir(path) {\n if (await this.#isNotEmptyDir(path)) {\n const error = new Error(`ENOTEMPTY: directory not empty, rmdir '${path}`)\n error.code = 'ENOTEMPTY'\n error.path = path\n throw error\n }\n\n // nothing to do, directories do not exist, they are part of the files' path\n }\n\n // reimplement _rmtree to handle efficiantly path with more than 1000 entries in trees\n // @todo : use parallel processing for unlink\n async _rmtree(path) {\n let NextContinuationToken\n const Prefix = this.#makePrefix(path)\n do {\n const result = await this.#s3.send(\n new ListObjectsV2Command({\n Bucket: this.#bucket,\n Prefix,\n ContinuationToken: NextContinuationToken,\n })\n )\n\n NextContinuationToken = result.IsTruncated ? result.NextContinuationToken : undefined\n await asyncEach(\n result.Contents ?? [],\n async ({ Key }) => {\n // _unlink will add the prefix, but Key contains everything\n // also we don't need to check if we delete a directory, since the list only return files\n await this.#s3.send(\n new DeleteObjectCommand({\n Bucket: this.#bucket,\n Key,\n })\n )\n },\n {\n concurrency: 16,\n }\n )\n } while (NextContinuationToken !== undefined)\n }\n\n async _openFile(path, flags) {\n return path\n }\n\n async _closeFile(fd) {}\n\n useVhdDirectory() {\n return true\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"s3.js","names":["_clientS","require","_libStorage","_nodeHttpHandler","_middlewareApplyBodyChecksum","_http","_https","_log","_stream","_xoRemoteParser","_copyStreamToBuffer","_interopRequireDefault","_guessAwsRegion","_abstract","_path","_asyncEach","_promiseToolbox","obj","__esModule","default","MAX_PART_SIZE","warn","createLogger","S3Handler","RemoteHandlerAbstract","bucket","dir","s3","constructor","remote","_opts","allowUnauthorized","host","path","username","password","protocol","region","guessAwsRegion","parse","url","S3Client","apiVersion","endpoint","forcePathStyle","credentials","accessKeyId","secretAccessKey","tls","requestHandler","NodeHttpHandler","socketTimeout","httpAgent","HttpAgent","keepAlive","httpsAgent","HttpsAgent","rejectUnauthorized","middlewareStack","use","getApplyMd5BodyChecksumPlugin","config","parts","split","shift","join","WITH_RETRY","forEach","functionName","undefined","pRetry","wrap","delays","when","err","includes","code","onRetry","error","_this$arguments","method","attemptNumber","delay","file","arguments","type","makeCopySource","#makeCopySource","makeKey","#makeKey","makePrefix","#makePrefix","prefix","createParams","#createParams","Bucket","Key","multipartCopy","#multipartCopy","oldPath","newPath","size","_getSize","CopySource","multipartParams","send","CreateMultipartUploadCommand","start","partNumber","length","upload","UploadPartCopyCommand","CopySourceRange","Math","min","PartNumber","push","ETag","CopyPartResult","CompleteMultipartUploadCommand","MultipartUpload","Parts","e","AbortMultipartUploadCommand","_copy","CopyObjectCommand","name","Error","cause","isNotEmptyDir","#isNotEmptyDir","_result$Contents","result","ListObjectsV2Command","MaxKeys","Prefix","Contents","isFile","#isFile","HeadObjectCommand","_outputStream","input","validator","Body","PassThrough","pipeline","Upload","client","params","done","call","__unlink","_writeFile","data","options","PutObjectCommand","_createReadStream","GetObjectCommand","_unlink","DeleteObjectCommand","_list","NextContinuationToken","uniq","Set","Delimiter","ContinuationToken","IsTruncated","entry","CommonPrefixes","add","basename","_mkdir","_rename","__copy","fd","ContentLength","_read","buffer","position","Range","bytesRead","copyStreamToBuffer","_rmdir","_rmtree","asyncEach","concurrency","_openFile","flags","_closeFile","useVhdDirectory","exports"],"sources":["../src/s3.js"],"sourcesContent":["import {\n AbortMultipartUploadCommand,\n CompleteMultipartUploadCommand,\n CopyObjectCommand,\n CreateMultipartUploadCommand,\n DeleteObjectCommand,\n GetObjectCommand,\n HeadObjectCommand,\n ListObjectsV2Command,\n PutObjectCommand,\n S3Client,\n UploadPartCopyCommand,\n} from '@aws-sdk/client-s3'\nimport { Upload } from '@aws-sdk/lib-storage'\nimport { NodeHttpHandler } from '@aws-sdk/node-http-handler'\nimport { getApplyMd5BodyChecksumPlugin } from '@aws-sdk/middleware-apply-body-checksum'\nimport { Agent as HttpAgent } from 'http'\nimport { Agent as HttpsAgent } from 'https'\nimport { createLogger } from '@xen-orchestra/log'\nimport { PassThrough, pipeline } from 'stream'\nimport { parse } from 'xo-remote-parser'\nimport copyStreamToBuffer from './_copyStreamToBuffer.js'\nimport guessAwsRegion from './_guessAwsRegion.js'\nimport RemoteHandlerAbstract from './abstract'\nimport { basename, join, split } from './path'\nimport { asyncEach } from '@vates/async-each'\nimport { pRetry } from 'promise-toolbox'\n\n// endpoints https://docs.aws.amazon.com/general/latest/gr/s3.html\n\n// limits: https://docs.aws.amazon.com/AmazonS3/latest/dev/qfacts.html\nconst MAX_PART_SIZE = 1024 * 1024 * 1024 * 5 // 5GB\nconst { warn } = createLogger('xo:fs:s3')\n\nexport default class S3Handler extends RemoteHandlerAbstract {\n #bucket\n #dir\n #s3\n\n constructor(remote, _opts) {\n super(remote)\n const {\n allowUnauthorized,\n host,\n path,\n username,\n password,\n protocol,\n region = guessAwsRegion(host),\n } = parse(remote.url)\n\n this.#s3 = new S3Client({\n apiVersion: '2006-03-01',\n endpoint: `${protocol}://${host}`,\n forcePathStyle: true,\n credentials: {\n accessKeyId: username,\n secretAccessKey: password,\n },\n tls: protocol === 'https',\n region,\n requestHandler: new NodeHttpHandler({\n socketTimeout: 600000,\n httpAgent: new HttpAgent({\n keepAlive: true,\n }),\n httpsAgent: new HttpsAgent({\n rejectUnauthorized: !allowUnauthorized,\n keepAlive: true,\n }),\n }),\n })\n\n // Workaround for https://github.com/aws/aws-sdk-js-v3/issues/2673\n this.#s3.middlewareStack.use(getApplyMd5BodyChecksumPlugin(this.#s3.config))\n\n const parts = split(path)\n this.#bucket = parts.shift()\n this.#dir = join(...parts)\n const WITH_RETRY = [\n '_closeFile',\n '_copy',\n '_getInfo',\n '_getSize',\n '_list',\n '_mkdir',\n '_openFile',\n '_outputFile',\n '_read',\n '_readFile',\n '_rename',\n '_rmdir',\n '_truncate',\n '_unlink',\n '_write',\n '_writeFile',\n ]\n WITH_RETRY.forEach(functionName => {\n if (this[functionName] !== undefined) {\n // adding the retry on the top level mtehod won't\n // cover when _functionName are called internally\n this[functionName] = pRetry.wrap(this[functionName], {\n delays: [100, 200, 500, 1000, 2000],\n // these errors should not change on retry\n when: err => !['EEXIST', 'EISDIR', 'ENOTEMPTY', 'ENOENT', 'ENOTDIR', 'EISDIR'].includes(err?.code),\n onRetry(error) {\n warn('retrying method on fs ', {\n method: functionName,\n attemptNumber: this.attemptNumber,\n delay: this.delay,\n error,\n file: this.arguments?.[0],\n })\n },\n })\n }\n })\n }\n\n get type() {\n return 's3'\n }\n\n #makeCopySource(path) {\n return join(this.#bucket, this.#dir, path)\n }\n\n #makeKey(file) {\n return join(this.#dir, file)\n }\n\n #makePrefix(dir) {\n const prefix = join(this.#dir, dir, '/')\n\n // no prefix for root\n if (prefix !== './') {\n return prefix\n }\n }\n\n #createParams(file) {\n return { Bucket: this.#bucket, Key: this.#makeKey(file) }\n }\n\n async #multipartCopy(oldPath, newPath) {\n const size = await this._getSize(oldPath)\n const CopySource = this.#makeCopySource(oldPath)\n const multipartParams = await this.#s3.send(new CreateMultipartUploadCommand({ ...this.#createParams(newPath) }))\n try {\n const parts = []\n let start = 0\n while (start < size) {\n const partNumber = parts.length + 1\n const upload = await this.#s3.send(\n new UploadPartCopyCommand({\n ...multipartParams,\n CopySource,\n CopySourceRange: `bytes=${start}-${Math.min(start + MAX_PART_SIZE, size) - 1}`,\n PartNumber: partNumber,\n })\n )\n parts.push({ ETag: upload.CopyPartResult.ETag, PartNumber: partNumber })\n start += MAX_PART_SIZE\n }\n await this.#s3.send(\n new CompleteMultipartUploadCommand({\n ...multipartParams,\n MultipartUpload: { Parts: parts },\n })\n )\n } catch (e) {\n await this.#s3.send(new AbortMultipartUploadCommand(multipartParams))\n throw e\n }\n }\n\n async _copy(oldPath, newPath) {\n const CopySource = this.#makeCopySource(oldPath)\n try {\n await this.#s3.send(\n new CopyObjectCommand({\n ...this.#createParams(newPath),\n CopySource,\n })\n )\n } catch (e) {\n // object > 5GB must be copied part by part\n if (e.name === 'EntityTooLarge') {\n return this.#multipartCopy(oldPath, newPath)\n }\n // normalize this error code\n if (e.name === 'NoSuchKey') {\n const error = new Error(`ENOENT: no such file or directory '${oldPath}'`)\n error.cause = e\n error.code = 'ENOENT'\n error.path = oldPath\n throw error\n }\n throw e\n }\n }\n\n async #isNotEmptyDir(path) {\n const result = await this.#s3.send(\n new ListObjectsV2Command({\n Bucket: this.#bucket,\n MaxKeys: 1,\n Prefix: this.#makePrefix(path),\n })\n )\n return result.Contents?.length > 0\n }\n\n async #isFile(path) {\n try {\n await this.#s3.send(new HeadObjectCommand(this.#createParams(path)))\n return true\n } catch (error) {\n if (error.name === 'NotFound') {\n return false\n }\n throw error\n }\n }\n\n async _outputStream(path, input, { validator }) {\n // Workaround for \"ReferenceError: ReadableStream is not defined\"\n // https://github.com/aws/aws-sdk-js-v3/issues/2522\n const Body = new PassThrough()\n pipeline(input, Body, () => {})\n\n const upload = new Upload({\n client: this.#s3,\n params: {\n ...this.#createParams(path),\n Body,\n },\n })\n\n await upload.done()\n\n if (validator !== undefined) {\n try {\n await validator.call(this, path)\n } catch (error) {\n await this.__unlink(path)\n throw error\n }\n }\n }\n\n async _writeFile(file, data, options) {\n return this.#s3.send(\n new PutObjectCommand({\n ...this.#createParams(file),\n Body: data,\n })\n )\n }\n\n async _createReadStream(path, options) {\n try {\n return (await this.#s3.send(new GetObjectCommand(this.#createParams(path)))).Body\n } catch (e) {\n if (e.name === 'NoSuchKey') {\n const error = new Error(`ENOENT: no such file '${path}'`)\n error.code = 'ENOENT'\n error.path = path\n throw error\n }\n throw e\n }\n }\n\n async _unlink(path) {\n await this.#s3.send(new DeleteObjectCommand(this.#createParams(path)))\n\n if (await this.#isNotEmptyDir(path)) {\n const error = new Error(`EISDIR: illegal operation on a directory, unlink '${path}'`)\n error.code = 'EISDIR'\n error.path = path\n throw error\n }\n }\n\n async _list(dir) {\n let NextContinuationToken\n const uniq = new Set()\n const Prefix = this.#makePrefix(dir)\n\n do {\n const result = await this.#s3.send(\n new ListObjectsV2Command({\n Bucket: this.#bucket,\n Prefix,\n Delimiter: '/',\n // will only return path until delimiters\n ContinuationToken: NextContinuationToken,\n })\n )\n\n if (result.IsTruncated) {\n warn(`need pagination to browse the directory ${dir} completely`)\n NextContinuationToken = result.NextContinuationToken\n } else {\n NextContinuationToken = undefined\n }\n\n // subdirectories\n for (const entry of result.CommonPrefixes ?? []) {\n uniq.add(basename(entry.Prefix))\n }\n\n // files\n for (const entry of result.Contents ?? []) {\n uniq.add(basename(entry.Key))\n }\n } while (NextContinuationToken !== undefined)\n\n return [...uniq]\n }\n\n async _mkdir(path) {\n if (await this.#isFile(path)) {\n const error = new Error(`ENOTDIR: file already exists, mkdir '${path}'`)\n error.code = 'ENOTDIR'\n error.path = path\n throw error\n }\n // nothing to do, directories do not exist, they are part of the files' path\n }\n\n // s3 doesn't have a rename operation, so copy + delete source\n async _rename(oldPath, newPath) {\n await this.__copy(oldPath, newPath)\n await this.#s3.send(new DeleteObjectCommand(this.#createParams(oldPath)))\n }\n\n async _getSize(file) {\n if (typeof file !== 'string') {\n file = file.fd\n }\n const result = await this.#s3.send(new HeadObjectCommand(this.#createParams(file)))\n return +result.ContentLength\n }\n\n async _read(file, buffer, position = 0) {\n if (typeof file !== 'string') {\n file = file.fd\n }\n const params = this.#createParams(file)\n params.Range = `bytes=${position}-${position + buffer.length - 1}`\n try {\n const result = await this.#s3.send(new GetObjectCommand(params))\n const bytesRead = await copyStreamToBuffer(result.Body, buffer)\n return { bytesRead, buffer }\n } catch (e) {\n if (e.name === 'NoSuchKey') {\n if (await this.#isNotEmptyDir(file)) {\n const error = new Error(`${file} is a directory`)\n error.code = 'EISDIR'\n error.path = file\n throw error\n }\n }\n throw e\n }\n }\n\n async _rmdir(path) {\n if (await this.#isNotEmptyDir(path)) {\n const error = new Error(`ENOTEMPTY: directory not empty, rmdir '${path}`)\n error.code = 'ENOTEMPTY'\n error.path = path\n throw error\n }\n\n // nothing to do, directories do not exist, they are part of the files' path\n }\n\n // reimplement _rmtree to handle efficiantly path with more than 1000 entries in trees\n // @todo : use parallel processing for unlink\n async _rmtree(path) {\n let NextContinuationToken\n const Prefix = this.#makePrefix(path)\n do {\n const result = await this.#s3.send(\n new ListObjectsV2Command({\n Bucket: this.#bucket,\n Prefix,\n ContinuationToken: NextContinuationToken,\n })\n )\n\n NextContinuationToken = result.IsTruncated ? result.NextContinuationToken : undefined\n await asyncEach(\n result.Contents ?? [],\n async ({ Key }) => {\n // _unlink will add the prefix, but Key contains everything\n // also we don't need to check if we delete a directory, since the list only return files\n await this.#s3.send(\n new DeleteObjectCommand({\n Bucket: this.#bucket,\n Key,\n })\n )\n },\n {\n concurrency: 16,\n }\n )\n } while (NextContinuationToken !== undefined)\n }\n\n async _openFile(path, flags) {\n return path\n }\n\n async _closeFile(fd) {}\n\n useVhdDirectory() {\n return true\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"private": false,
|
|
3
3
|
"name": "@xen-orchestra/fs",
|
|
4
|
-
"version": "4.0
|
|
4
|
+
"version": "4.1.0",
|
|
5
5
|
"license": "AGPL-3.0-or-later",
|
|
6
6
|
"description": "The File System for Xen Orchestra backups.",
|
|
7
7
|
"homepage": "https://github.com/vatesfr/xen-orchestra/tree/master/@xen-orchestra/fs",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"@vates/async-each": "^1.0.0",
|
|
30
30
|
"@vates/coalesce-calls": "^0.1.0",
|
|
31
31
|
"@vates/decorate-with": "^2.0.0",
|
|
32
|
-
"@vates/read-chunk": "^1.
|
|
32
|
+
"@vates/read-chunk": "^1.2.0",
|
|
33
33
|
"@xen-orchestra/log": "^0.6.0",
|
|
34
34
|
"bind-property-descriptor": "^2.0.0",
|
|
35
35
|
"decorator-synchronized": "^0.6.0",
|