@lossless.org/client 1.23.3 → 2.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_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/nosqldb/classes.persistence.d.ts +21 -1
- package/dist_ts/nosqldb/classes.persistence.js +23 -1
- package/dist_ts/nosqldb/classes.session.d.ts +8 -0
- package/dist_ts/nosqldb/classes.session.js +27 -2
- package/dist_ts/nosqldb/index.d.ts +1 -1
- package/dist_ts/nosqldb/index.js +2 -2
- package/dist_ts/objectstorage/classes.bucket.d.ts +11 -21
- package/dist_ts/objectstorage/classes.bucket.js +58 -29
- package/dist_ts/objectstorage/classes.connection.d.ts +2 -1
- package/dist_ts/objectstorage/classes.connection.js +3 -2
- package/dist_ts/objectstorage/classes.requestdeadlineerror.d.ts +11 -0
- package/dist_ts/objectstorage/classes.requestdeadlineerror.js +16 -0
- package/dist_ts/objectstorage/classes.smartbucket.d.ts +11 -2
- package/dist_ts/objectstorage/classes.smartbucket.js +20 -1
- package/dist_ts/objectstorage/helpers.d.ts +4 -0
- package/dist_ts/objectstorage/helpers.js +13 -1
- package/dist_ts/objectstorage/index.d.ts +1 -0
- package/dist_ts/objectstorage/index.js +2 -1
- package/dist_ts/objectstorage/interfaces.d.ts +49 -0
- package/dist_ts/objectstorage/internal.exactupload.capability.js +4 -2
- package/dist_ts/objectstorage/internal.requestbounds.d.ts +37 -0
- package/dist_ts/objectstorage/internal.requestbounds.js +154 -0
- package/dist_ts/objectstorage/plugins.d.ts +2 -1
- package/dist_ts/objectstorage/plugins.js +3 -2
- package/package.json +2 -2
- package/readme.md +7 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/nosqldb/classes.persistence.ts +30 -1
- package/ts/nosqldb/classes.session.ts +26 -0
- package/ts/nosqldb/index.ts +1 -1
- package/ts/objectstorage/classes.bucket.ts +80 -56
- package/ts/objectstorage/classes.connection.ts +4 -2
- package/ts/objectstorage/classes.requestdeadlineerror.ts +16 -0
- package/ts/objectstorage/classes.smartbucket.ts +30 -1
- package/ts/objectstorage/helpers.ts +16 -0
- package/ts/objectstorage/index.ts +1 -0
- package/ts/objectstorage/interfaces.ts +58 -0
- package/ts/objectstorage/internal.exactupload.capability.ts +3 -1
- package/ts/objectstorage/internal.requestbounds.ts +192 -0
- package/ts/objectstorage/plugins.ts +2 -1
|
@@ -22,6 +22,18 @@ export const reducePathDescriptorToPath = async (pathDescriptorArg) => {
|
|
|
22
22
|
}
|
|
23
23
|
return returnPath;
|
|
24
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* Validates a caller's cancellation signal: a genuine `AbortSignal`.
|
|
27
|
+
*/
|
|
28
|
+
export const requireOptionalAbortSignal = (valueArg, labelArg) => {
|
|
29
|
+
if (valueArg === undefined) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
if (plugins.nodeUtil.types.isProxy(valueArg) || !(valueArg instanceof AbortSignal)) {
|
|
33
|
+
throw new TypeError(`${labelArg} must be an AbortSignal.`);
|
|
34
|
+
}
|
|
35
|
+
return valueArg;
|
|
36
|
+
};
|
|
25
37
|
function coerceBooleanMaybe(value) {
|
|
26
38
|
if (typeof value === 'boolean')
|
|
27
39
|
return { value };
|
|
@@ -212,4 +224,4 @@ export function normalizeStorageDescriptor(input, logger) {
|
|
|
212
224
|
warnings,
|
|
213
225
|
};
|
|
214
226
|
}
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
227
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssVUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLEtBQUssRUFBRSxpQkFBNEMsRUFBbUIsRUFBRTtJQUNoSCxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUE7SUFDbkIsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoQyxJQUFJLGlCQUFpQixDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlFLE9BQU8sQ0FBQyxJQUFJLENBQUMsbURBQW1ELENBQUMsQ0FBQztZQUNsRSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQ3RDLENBQUM7YUFBTSxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEcsQ0FBQztJQUNILENBQUM7U0FBTSxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7SUFDdEMsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9CLFVBQVUsR0FBRyxVQUFVLENB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
|
|
@@ -3,6 +3,7 @@ export * from './classes.bucket.js';
|
|
|
3
3
|
export * from './classes.exactuploaderror.js';
|
|
4
4
|
export * from './classes.exactpathpurgeerror.js';
|
|
5
5
|
export * from './classes.objectrangeerror.js';
|
|
6
|
+
export * from './classes.requestdeadlineerror.js';
|
|
6
7
|
export * from './classes.directory.js';
|
|
7
8
|
export * from './classes.file.js';
|
|
8
9
|
export * from './classes.listcursor.js';
|
|
@@ -3,6 +3,7 @@ export * from './classes.bucket.js';
|
|
|
3
3
|
export * from './classes.exactuploaderror.js';
|
|
4
4
|
export * from './classes.exactpathpurgeerror.js';
|
|
5
5
|
export * from './classes.objectrangeerror.js';
|
|
6
|
+
export * from './classes.requestdeadlineerror.js';
|
|
6
7
|
export * from './classes.directory.js';
|
|
7
8
|
export * from './classes.file.js';
|
|
8
9
|
export * from './classes.listcursor.js';
|
|
@@ -11,4 +12,4 @@ export * from './classes.trash.js';
|
|
|
11
12
|
export * from './classes.watcher.js';
|
|
12
13
|
export * from './interfaces.js';
|
|
13
14
|
export { ObjectStorageConnection } from './classes.connection.js';
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9vYmplY3RzdG9yYWdlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUMifQ==
|
|
@@ -73,6 +73,22 @@ export interface IFastGetIfPresentOptions {
|
|
|
73
73
|
export interface IFastStatOptions extends IPathDecriptor {
|
|
74
74
|
signal?: AbortSignal;
|
|
75
75
|
}
|
|
76
|
+
export interface IFastPutOptions extends IPathDecriptor {
|
|
77
|
+
contents: string | Buffer;
|
|
78
|
+
overwrite?: boolean;
|
|
79
|
+
signal?: AbortSignal;
|
|
80
|
+
}
|
|
81
|
+
export interface IFastMoveOptions {
|
|
82
|
+
sourcePath: string;
|
|
83
|
+
destinationPath: string;
|
|
84
|
+
targetBucket?: Bucket;
|
|
85
|
+
overwrite?: boolean;
|
|
86
|
+
signal?: AbortSignal;
|
|
87
|
+
}
|
|
88
|
+
export interface IListAllObjectsOptions {
|
|
89
|
+
/** Optional caller-owned cancellation signal */
|
|
90
|
+
signal?: AbortSignal;
|
|
91
|
+
}
|
|
76
92
|
export interface IDirectoryFastPutStreamOptions {
|
|
77
93
|
path: string;
|
|
78
94
|
stream: Readable;
|
|
@@ -87,6 +103,39 @@ export interface IBucketRequestOptions {
|
|
|
87
103
|
/** Optional caller-owned cancellation signal */
|
|
88
104
|
signal?: AbortSignal;
|
|
89
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Bounds of every request sent by the storage client a SmartBucket builds.
|
|
108
|
+
* Each is a positive safe integer; an omitted one takes its default.
|
|
109
|
+
*/
|
|
110
|
+
export interface IObjectStorageRequestOptions {
|
|
111
|
+
/** Time one attempt may take to connect its socket in milliseconds (default: 10000, maximum: 60000) */
|
|
112
|
+
connectionTimeoutMs?: number;
|
|
113
|
+
/**
|
|
114
|
+
* Time from the start of one attempt to its response headers in
|
|
115
|
+
* milliseconds, connecting and uploading the request body included
|
|
116
|
+
* (default: 60000, maximum: 3600000)
|
|
117
|
+
*/
|
|
118
|
+
requestTimeoutMs?: number;
|
|
119
|
+
/** Attempts of one request, the first one included (default: 3, maximum: 10) */
|
|
120
|
+
maxAttempts?: number;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* The effective bounds of the storage client a SmartBucket built.
|
|
124
|
+
*/
|
|
125
|
+
export interface IObjectStorageRequestBounds {
|
|
126
|
+
readonly connectionTimeoutMs: number;
|
|
127
|
+
readonly requestTimeoutMs: number;
|
|
128
|
+
readonly maxAttempts: number;
|
|
129
|
+
/** The longest wait of the SDK before a retry */
|
|
130
|
+
readonly maxRetryDelayMs: number;
|
|
131
|
+
/**
|
|
132
|
+
* `maxAttempts * requestTimeoutMs + (maxAttempts - 1) * maxRetryDelayMs`
|
|
133
|
+
* plus 1000 ms for the client's own work around the attempts: the client
|
|
134
|
+
* destroys a request still unsettled after this time, retries included,
|
|
135
|
+
* and starts no further attempt of it
|
|
136
|
+
*/
|
|
137
|
+
readonly requestDeadlineMs: number;
|
|
138
|
+
}
|
|
90
139
|
/**
|
|
91
140
|
* Options for a bounded, read-only bucket readiness check.
|
|
92
141
|
*/
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
+
import { requireOptionalAbortSignal } from './helpers.js';
|
|
2
3
|
const lifecycleRecords = new WeakMap();
|
|
3
4
|
const capabilityBindings = new WeakMap();
|
|
4
5
|
const purgeCapabilityBindings = new WeakMap();
|
|
@@ -319,6 +320,7 @@ export const beginAccountOperation = (smartbucketRefArg, callerSignalArg) => {
|
|
|
319
320
|
}, accountIdentity, callerSignalArg);
|
|
320
321
|
};
|
|
321
322
|
export const beginBasicBucketOperation = (bucketRefArg, callerSignalArg) => {
|
|
323
|
+
const callerSignal = requireOptionalAbortSignal(callerSignalArg, 'Object storage request signal');
|
|
322
324
|
const smartbucketRef = bucketRefArg.smartbucketRef;
|
|
323
325
|
const lifecycleRecord = getLifecycleRecord(smartbucketRef);
|
|
324
326
|
const binding = {
|
|
@@ -328,7 +330,7 @@ export const beginBasicBucketOperation = (bucketRefArg, callerSignalArg) => {
|
|
|
328
330
|
storageClient: lifecycleRecord.storageClient,
|
|
329
331
|
lifecycleGeneration: lifecycleRecord.generation,
|
|
330
332
|
};
|
|
331
|
-
return beginOperation(binding,
|
|
333
|
+
return beginOperation(binding, callerSignal);
|
|
332
334
|
};
|
|
333
335
|
export const beginExactUploadProbeOperation = (bucketRefArg, callerSignalArg) => {
|
|
334
336
|
const smartbucketRef = bucketRefArg.smartbucketRef;
|
|
@@ -408,4 +410,4 @@ export const beginExactPathPurgeCapabilityOperation = (bucketRefArg, capabilityA
|
|
|
408
410
|
versioningMode: binding.versioningMode,
|
|
409
411
|
};
|
|
410
412
|
};
|
|
411
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuZXhhY3R1cGxvYWQuY2FwYWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvaW50ZXJuYWwuZXhhY3R1cGxvYWQuY2FwYWJpbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQXFHeEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFHakMsQ0FBQztBQUNKLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxPQUFPLEVBR25DLENBQUM7QUFDSixNQUFNLHVCQUF1QixHQUFHLElBQUksT0FBTyxFQUd4QyxDQUFDO0FBQ0osTUFBTSxpQ0FBaUMsR0FBRyxNQUFNLENBQUM7QUFDakQsTUFBTSxtQ0FBbUMsR0FBRyxLQUFLLENBQUM7QUFFbEQsTUFBTSw4QkFBOEIsR0FBRyxDQUNyQyxrQkFBOEMsRUFDOUMsUUFBaUIsRUFDWCxFQUFFO0lBQ1IsS0FBSyxNQUFNLFVBQVUsSUFBSSxrQkFBa0IsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ25FLFVBQVUsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxxQkFBcUIsR0FBRyxnRUFBZ0UsQ0FBQztBQUUvRixNQUFNLGtCQUFrQixHQUFHLENBQ3pCLGlCQUE0QyxFQUM1QyxrQkFBa0IsR0FBRyxxQkFBcUIsRUFDZCxFQUFFO0lBQzlCLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2hFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENB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
|
|
413
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuZXhhY3R1cGxvYWQuY2FwYWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvaW50ZXJuYWwuZXhhY3R1cGxvYWQuY2FwYWJpbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFxRzFELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxPQUFPLEVBR2pDLENBQUM7QUFDSixNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUduQyxDQUFDO0FBQ0osTUFBTSx1QkFBdUIsR0FBRyxJQUFJLE9BQU8sRUFHeEMsQ0FBQztBQUNKLE1BQU0saUNBQWlDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELE1BQU0sbUNBQW1DLEdBQUcsS0FBSyxDQUFDO0FBRWxELE1BQU0sOEJBQThCLEdBQUcsQ0FDckMsa0JBQThDLEVBQzlDLFFBQWlCLEVBQ1gsRUFBRTtJQUNSLEtBQUssTUFBTSxVQUFVLElBQUksa0JBQWtCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNuRSxVQUFVLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNELGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3BELENBQUMsQ0FBQztBQUVGLE1BQU0scUJBQXFCLEdBQUcsZ0VBQWdFLENBQUM7QUFFL0YsTUFBTSxrQkFBa0IsR0FBRyxDQUN6QixpQkFBNEMsRUFDNUMsa0JBQWtCLEdBQUcscUJBQXFCLEVBQ2QsRUFBRTtJQUM5QixNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNoRSxJQUFJLENBQUMsZUFBZSxFQUFFLENB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
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import type { IObjectStorageRequestBounds, IObjectStorageRequestOptions } from './interfaces.js';
|
|
3
|
+
/**
|
|
4
|
+
* Validates the request options of a storage client and derives its bounds.
|
|
5
|
+
*/
|
|
6
|
+
export declare const resolveRequestBounds: (optionsArg: IObjectStorageRequestOptions) => IObjectStorageRequestBounds;
|
|
7
|
+
/**
|
|
8
|
+
* The S3 client configuration that applies the bounds to every attempt:
|
|
9
|
+
* `@smithy/node-http-handler` destroys an attempt whose socket does not
|
|
10
|
+
* connect within `connectionTimeout` and, with `throwOnRequestTimeout`, one
|
|
11
|
+
* whose response headers did not arrive within `requestTimeout` of its start.
|
|
12
|
+
* `maxAttempts` and the standard retry mode are set explicitly, so
|
|
13
|
+
* `AWS_MAX_ATTEMPTS`, `AWS_RETRY_MODE` and shared config files cannot change
|
|
14
|
+
* them.
|
|
15
|
+
*/
|
|
16
|
+
export declare const createBoundedClientConfig: (boundsArg: IObjectStorageRequestBounds) => {
|
|
17
|
+
maxAttempts: number;
|
|
18
|
+
retryMode: string;
|
|
19
|
+
requestHandler: {
|
|
20
|
+
connectionTimeout: number;
|
|
21
|
+
requestTimeout: number;
|
|
22
|
+
throwOnRequestTimeout: true;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Bounds every `send()` of a storage client by `requestDeadlineMs`.
|
|
27
|
+
*
|
|
28
|
+
* Each request gets its own abort signal, which the caller's `abortSignal`
|
|
29
|
+
* and the deadline abort. The HTTP handler destroys the attempt in flight
|
|
30
|
+
* when it aborts, and refuses every later attempt of the request, so no
|
|
31
|
+
* attempt starts or sends after the deadline. The request rejects at the
|
|
32
|
+
* deadline with `ObjectStorageRequestDeadlineError`; the handler fails the
|
|
33
|
+
* aborted attempt with an `AbortError`, which the retry strategy never
|
|
34
|
+
* retries. A caller's abort still reaches a response body the request
|
|
35
|
+
* resolved with until that body closes.
|
|
36
|
+
*/
|
|
37
|
+
export declare const bindRequestDeadline: (clientArg: plugins.s3.S3Client, boundsArg: IObjectStorageRequestBounds) => void;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import { ObjectStorageRequestDeadlineError } from './classes.requestdeadlineerror.js';
|
|
3
|
+
const requestOptionLimits = {
|
|
4
|
+
connectionTimeoutMs: { defaultValue: 10_000, maximum: 60_000 },
|
|
5
|
+
requestTimeoutMs: { defaultValue: 60_000, maximum: 3_600_000 },
|
|
6
|
+
maxAttempts: { defaultValue: 3, maximum: 10 },
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* The longest wait of the SDK's standard retry strategy before a retry
|
|
10
|
+
* (`MAXIMUM_RETRY_DELAY` of `@smithy/core`, which caps a retry-after hint
|
|
11
|
+
* as well).
|
|
12
|
+
*/
|
|
13
|
+
const maxRetryDelayMs = 20_000;
|
|
14
|
+
/**
|
|
15
|
+
* Time the deadline grants beyond the attempts and retry waits for the
|
|
16
|
+
* client's own work around them (serializing, signing, checksums), so an
|
|
17
|
+
* attempt's own timeout decides its failure and the deadline only ends a
|
|
18
|
+
* request the attempt bounds do not.
|
|
19
|
+
*/
|
|
20
|
+
const requestDeadlineAllowanceMs = 1_000;
|
|
21
|
+
const requireRequestOption = (optionsArg, nameArg) => {
|
|
22
|
+
const value = optionsArg[nameArg];
|
|
23
|
+
const { defaultValue, maximum } = requestOptionLimits[nameArg];
|
|
24
|
+
if (value === undefined) {
|
|
25
|
+
return defaultValue;
|
|
26
|
+
}
|
|
27
|
+
if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1 || value > maximum) {
|
|
28
|
+
throw new TypeError(`Object storage ${nameArg} must be a positive safe integer no greater than ${maximum}.`);
|
|
29
|
+
}
|
|
30
|
+
return value;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Validates the request options of a storage client and derives its bounds.
|
|
34
|
+
*/
|
|
35
|
+
export const resolveRequestBounds = (optionsArg) => {
|
|
36
|
+
const connectionTimeoutMs = requireRequestOption(optionsArg, 'connectionTimeoutMs');
|
|
37
|
+
const requestTimeoutMs = requireRequestOption(optionsArg, 'requestTimeoutMs');
|
|
38
|
+
const maxAttempts = requireRequestOption(optionsArg, 'maxAttempts');
|
|
39
|
+
return Object.freeze({
|
|
40
|
+
connectionTimeoutMs,
|
|
41
|
+
requestTimeoutMs,
|
|
42
|
+
maxAttempts,
|
|
43
|
+
maxRetryDelayMs,
|
|
44
|
+
requestDeadlineMs: maxAttempts * requestTimeoutMs
|
|
45
|
+
+ (maxAttempts - 1) * maxRetryDelayMs
|
|
46
|
+
+ requestDeadlineAllowanceMs,
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* The S3 client configuration that applies the bounds to every attempt:
|
|
51
|
+
* `@smithy/node-http-handler` destroys an attempt whose socket does not
|
|
52
|
+
* connect within `connectionTimeout` and, with `throwOnRequestTimeout`, one
|
|
53
|
+
* whose response headers did not arrive within `requestTimeout` of its start.
|
|
54
|
+
* `maxAttempts` and the standard retry mode are set explicitly, so
|
|
55
|
+
* `AWS_MAX_ATTEMPTS`, `AWS_RETRY_MODE` and shared config files cannot change
|
|
56
|
+
* them.
|
|
57
|
+
*/
|
|
58
|
+
export const createBoundedClientConfig = (boundsArg) => ({
|
|
59
|
+
maxAttempts: boundsArg.maxAttempts,
|
|
60
|
+
retryMode: 'standard',
|
|
61
|
+
requestHandler: {
|
|
62
|
+
connectionTimeout: boundsArg.connectionTimeoutMs,
|
|
63
|
+
requestTimeout: boundsArg.requestTimeoutMs,
|
|
64
|
+
throwOnRequestTimeout: true,
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
const readStreamingBody = (outputArg) => {
|
|
68
|
+
if (typeof outputArg !== 'object' || outputArg === null) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
const body = outputArg.Body;
|
|
72
|
+
return body instanceof plugins.stream.Readable ? body : undefined;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Bounds every `send()` of a storage client by `requestDeadlineMs`.
|
|
76
|
+
*
|
|
77
|
+
* Each request gets its own abort signal, which the caller's `abortSignal`
|
|
78
|
+
* and the deadline abort. The HTTP handler destroys the attempt in flight
|
|
79
|
+
* when it aborts, and refuses every later attempt of the request, so no
|
|
80
|
+
* attempt starts or sends after the deadline. The request rejects at the
|
|
81
|
+
* deadline with `ObjectStorageRequestDeadlineError`; the handler fails the
|
|
82
|
+
* aborted attempt with an `AbortError`, which the retry strategy never
|
|
83
|
+
* retries. A caller's abort still reaches a response body the request
|
|
84
|
+
* resolved with until that body closes.
|
|
85
|
+
*/
|
|
86
|
+
export const bindRequestDeadline = (clientArg, boundsArg) => {
|
|
87
|
+
const sendWithoutDeadline = clientArg.send.bind(clientArg);
|
|
88
|
+
const sendWithinDeadline = (commandArg, optionsArg) => new Promise((resolve, reject) => {
|
|
89
|
+
const callerSignal = optionsArg?.abortSignal;
|
|
90
|
+
const requestAbortController = new AbortController();
|
|
91
|
+
const forwardCallerAbort = () => {
|
|
92
|
+
requestAbortController.abort(callerSignal?.reason);
|
|
93
|
+
};
|
|
94
|
+
const releaseCallerSignal = () => {
|
|
95
|
+
callerSignal?.removeEventListener('abort', forwardCallerAbort);
|
|
96
|
+
};
|
|
97
|
+
if (callerSignal?.aborted) {
|
|
98
|
+
forwardCallerAbort();
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
callerSignal?.addEventListener('abort', forwardCallerAbort, { once: true });
|
|
102
|
+
}
|
|
103
|
+
let settled = false;
|
|
104
|
+
const deadlineTimer = setTimeout(() => {
|
|
105
|
+
settled = true;
|
|
106
|
+
const deadlineError = new ObjectStorageRequestDeadlineError(boundsArg.requestDeadlineMs);
|
|
107
|
+
requestAbortController.abort(deadlineError);
|
|
108
|
+
reject(deadlineError);
|
|
109
|
+
}, boundsArg.requestDeadlineMs);
|
|
110
|
+
sendWithoutDeadline(commandArg, {
|
|
111
|
+
...optionsArg,
|
|
112
|
+
abortSignal: requestAbortController.signal,
|
|
113
|
+
}).then((outputArg) => {
|
|
114
|
+
clearTimeout(deadlineTimer);
|
|
115
|
+
const body = readStreamingBody(outputArg);
|
|
116
|
+
if (settled) {
|
|
117
|
+
releaseCallerSignal();
|
|
118
|
+
body?.destroy();
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
settled = true;
|
|
122
|
+
if (body && !body.destroyed) {
|
|
123
|
+
body.once('close', releaseCallerSignal);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
releaseCallerSignal();
|
|
127
|
+
}
|
|
128
|
+
resolve(outputArg);
|
|
129
|
+
}, (errorArg) => {
|
|
130
|
+
clearTimeout(deadlineTimer);
|
|
131
|
+
releaseCallerSignal();
|
|
132
|
+
if (settled) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
settled = true;
|
|
136
|
+
reject(errorArg);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
const boundedSend = (commandArg, optionsOrCallbackArg, callbackArg) => {
|
|
140
|
+
const callback = typeof optionsOrCallbackArg === 'function' ? optionsOrCallbackArg : callbackArg;
|
|
141
|
+
const options = typeof optionsOrCallbackArg === 'function' ? undefined : optionsOrCallbackArg;
|
|
142
|
+
const result = sendWithinDeadline(commandArg, options);
|
|
143
|
+
if (typeof callback !== 'function') {
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
146
|
+
// As the SDK's own callback form: a callback that throws must not become
|
|
147
|
+
// an unhandled rejection.
|
|
148
|
+
result.then((outputArg) => callback(null, outputArg), (errorArg) => callback(errorArg)).catch(() => { });
|
|
149
|
+
};
|
|
150
|
+
// S3Client.send() is generic over the SDK's Command type, which the
|
|
151
|
+
// optional peer does not export; the bounded send keeps its signature.
|
|
152
|
+
clientArg.send = boundedSend;
|
|
153
|
+
};
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwucmVxdWVzdGJvdW5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvaW50ZXJuYWwucmVxdWVzdGJvdW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQU10RixNQUFNLG1CQUFtQixHQUFHO0lBQzFCLG1CQUFtQixFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0lBQzlELGdCQUFnQixFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFO0lBQzlELFdBQVcsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtDQUNyQyxDQUFDO0FBRVg7Ozs7R0FJRztBQUNILE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztBQUUvQjs7Ozs7R0FLRztBQUNILE1BQU0sMEJBQTBCLEdBQUcsS0FBSyxDQUFDO0FBSXpDLE1BQU0sb0JBQW9CLEdBQUcsQ0FDM0IsVUFBd0MsRUFDeEMsT0FBMkIsRUFDbkIsRUFBRTtJQUNWLE1BQU0sS0FBSyxHQUFZLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxFQUFFLENBQUM7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
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as crypto from 'node:crypto';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
3
|
import * as stream from 'node:stream';
|
|
4
|
-
|
|
4
|
+
import * as nodeUtil from 'node:util';
|
|
5
|
+
export { crypto, nodeUtil, path, stream };
|
|
5
6
|
import * as smartmime from '@push.rocks/smartmime';
|
|
6
7
|
import * as smartpath from '@push.rocks/smartpath';
|
|
7
8
|
import * as smartpromise from '@push.rocks/smartpromise';
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
import * as crypto from 'node:crypto';
|
|
4
4
|
import * as path from 'node:path';
|
|
5
5
|
import * as stream from 'node:stream';
|
|
6
|
-
|
|
6
|
+
import * as nodeUtil from 'node:util';
|
|
7
|
+
export { crypto, nodeUtil, path, stream };
|
|
7
8
|
// @push.rocks scope
|
|
8
9
|
import * as smartmime from '@push.rocks/smartmime';
|
|
9
10
|
import * as smartpath from '@push.rocks/smartpath';
|
|
@@ -20,4 +21,4 @@ export { tsclass, };
|
|
|
20
21
|
import * as s3 from '@aws-sdk/client-s3';
|
|
21
22
|
import { Minimatch } from 'minimatch';
|
|
22
23
|
export { s3, Minimatch, };
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvcGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhO0FBRWIsY0FBYztBQUNkLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUUxQyxvQkFBb0I7QUFDcEIsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFFOUYsV0FBVztBQUNYLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxFQUNMLE9BQU8sR0FDUixDQUFBO0FBRUQsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxPQUFPLEVBQ0wsRUFBRSxFQUNGLFNBQVMsR0FDVixDQUFBIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lossless.org/client",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://verdaccio.lossless.digital"
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"@git.zone/tsbuild": "6.0.2",
|
|
87
87
|
"@git.zone/tsbundle": "3.2.1",
|
|
88
88
|
"@git.zone/tsrun": "3.0.3",
|
|
89
|
-
"@git.zone/tstest": "7.2.
|
|
89
|
+
"@git.zone/tstest": "7.2.1",
|
|
90
90
|
"@lossless.org/nosqldb": "8.0.2",
|
|
91
91
|
"@lossless.org/nosqldb-qualified": "npm:@lossless.org/nosqldb@10.9.0",
|
|
92
92
|
"@lossless.org/objectstorage": "10.3.1",
|
package/readme.md
CHANGED
|
@@ -113,6 +113,7 @@ Family imports preserve the established SmartData and SmartBucket names and cons
|
|
|
113
113
|
| Client deadlines | `timeoutMS` (1..120000) on every ordinary model read and write, instance `save()`/`saveIf()`/`delete()` included, on every exact call, and `session.withTransaction(callback, { timeoutMS })` for a whole transaction, retries and commit included; expiry rejects with `SmartdataPersistenceError` code `timeout`, and an exact write interrupted in flight with `ambiguous_write` |
|
|
114
114
|
| Bounded database close | `db.close({ timeoutMs })` bounds the whole close — session cleanup, the optional database removal and the driver client's close — and rejects at its deadline with `SmartdataPersistenceError` code `timeout`, leaving the database `close_failed`; the driver's close keeps running until it settles on its own, and the next `close()` joins it |
|
|
115
115
|
| Transactions ended by close | a `session.withTransaction()` whose session `db.close()` ends while it runs rejects with `SmartdataPersistenceError` code `unsupported_operation` — "nothing was committed" before the commit, "the commit outcome is unknown" during it — instead of resolving with the callback's result |
|
|
116
|
+
| Transaction conflicts | a `session.withTransaction()` whose every attempt the database aborted as transient (a write conflict or another error labelled `TransientTransactionError`) until the driver's 120-second retry window closed rejects with `SmartdataTransactionConflictError` (a `SmartdataPersistenceError` of code `transaction_conflict`) carrying `attempts`, `elapsedMS` and the last attempt's error as `cause`: nothing was committed and the transaction is safe to re-run. With `timeoutMS` it rejects with `timeout` instead. Ordinary model writes that run in their own transaction reject the same way |
|
|
116
117
|
| Transaction commit outcome | `SmartdataSession.getCommitOutcome(error)` states for every value a `session.withTransaction()` rejected with whether the transaction could have committed: `not_committed` (nothing was committed) or `unknown` (a commit was sent and never confirmed); the rejection itself keeps its identity |
|
|
117
118
|
| Cancellation | `signal` on every exact call, `atomicDeleteMany()` and `session.withTransaction(callback, { signal })`, which interrupts the session's operation in flight, rolls the attempt back and never commits after an abort |
|
|
118
119
|
| Nested array paths | `@svDb({ arrayPaths: [...] })` declares nested arrays below a persisted root; `$push`, `$addToSet` and `$pull` in `atomicUpdate()`, `atomicUpdateMany()`, `atomicFindOneAndUpdate()` and `atomicUpsertMany()` accept them, while undeclared and non-array nested paths stay refused with `invalid_argument` |
|
|
@@ -137,6 +138,8 @@ Family imports preserve the established SmartData and SmartBucket names and cons
|
|
|
137
138
|
| Bucket lookup for bucket-scoped credentials | `smartBucket.getBucketByName(name, { signal? })` and `smartBucket.bucketExists(name, { signal? })` send one HeadBucket; `createBucket(name, { signal? })` and `removeBucket(name, { signal? })` take the same options |
|
|
138
139
|
| Byte-range downloads | `bucket.fastGetRangeStream({ path, range: { start, end? }, signal? }, typeArg?)` — one ranged GetObject resolving `{ stream, range, size }`; range failures reject with `ObjectRangeError` code `invalid_argument`, `range_not_satisfiable` or `invalid_response` |
|
|
139
140
|
| Reads of objects that may be missing | `bucket.fastGetIfPresent({ path, signal? })` — one GetObject resolving the object's bytes, or `null` when the key does not exist |
|
|
141
|
+
| Bounded requests | `new SmartBucket(config, { connectionTimeoutMs?, requestTimeoutMs?, maxAttempts? })` and the same options on `new ObjectStorageConnection({ ... })` — every request of the client a SmartBucket builds ends within `smartBucket.requestBounds.requestDeadlineMs`, retries included, or rejects with `ObjectStorageRequestDeadlineError` |
|
|
142
|
+
| Signals on writes, moves and listings | `bucket.fastPut({ ..., signal? })`, `bucket.fastMove({ ..., signal? })`, `bucket.listObjectKeysPage({ ..., signal? })`, `bucket.listAllObjects(prefix?, { signal? })` and `bucket.listAllObjectsArray(prefix?, { signal? })`; `fastGet`, `fastPutStream`, `fastCopy` and `fastRemove` already took one |
|
|
140
143
|
|
|
141
144
|
A bucket lookup sends one HeadBucket for the named bucket, never ListBuckets, so a credential scoped to its bucket can open it without the account-wide list permission, and a lookup does not depend on which buckets a listing returns. A missing bucket (404) keeps its answer: `getBucketByName()` rejects with `Bucket '<name>' not found.` and `bucketExists()` resolves `false`. A bucket the credentials may not access (403) rejects both with an error that names the denial and keeps the provider error as `cause`; S3 does not say whether such a bucket exists. Any other provider failure is rethrown unchanged. `signal` aborts the in-flight request and rejects with the signal's reason. Lookups, creations and removals run as lifecycle-managed operations: `SmartBucket.close()` aborts and awaits them, and the storage client cannot be replaced while one is active.
|
|
142
145
|
|
|
@@ -146,6 +149,10 @@ A bucket lookup sends one HeadBucket for the named bucket, never ListBuckets, so
|
|
|
146
149
|
|
|
147
150
|
`fastGetIfPresent()` answers "read it, or tell me it is gone" with one GetObject, so an object removed between an existence check and a read can no longer turn into a failed read: a provider answer that the key does not exist — `NoSuchKey`, `NotFound` or any other HTTP 404 — resolves `null`. Every other failure rejects as `fastGet()` does, the provider error unchanged: a missing bucket (`NoSuchBucket`), a denied request, a failure while the body streams, and an abort through `signal` or `SmartBucket.close()`, which rejects with the abort reason even when the provider answers not-found after it. `fastExists()` and the create-only check of `fastPutStream()` classify a missing object the same way.
|
|
148
151
|
|
|
152
|
+
Every request of the S3 client a `SmartBucket` builds is bounded. An attempt whose socket does not connect within `connectionTimeoutMs` (default 10 s, at most 60 s), or whose response headers do not arrive within `requestTimeoutMs` of its start (default 60 s, at most 1 h; the upload of the request body counts), fails with the SDK's `TimeoutError`; the SDK retries it up to `maxAttempts` attempts in all (default 3, at most 10, standard retry mode, `AWS_MAX_ATTEMPTS` and shared config files ignored). Each value must be a positive safe integer; anything else is refused with a `TypeError` before a client is built. `smartBucket.requestBounds` (and `connection.requestBounds`) reads the frozen bounds, including `requestDeadlineMs = maxAttempts × requestTimeoutMs + (maxAttempts − 1) × 20 000 ms + 1 000 ms` — the attempts, the longest wait the retry strategy takes before a retry (a provider's retry-after hint included), and a second for the client's own work. 221 000 ms with the defaults. A request still unsettled at that deadline, a stalled error body included, rejects with `ObjectStorageRequestDeadlineError`, its attempt in flight is destroyed and no further attempt of it starts, so a consumer can hold the client to an upper bound of its own (`requestDeadlineMs < bound`). The bound does not undo a request: a PutObject the provider received completely before the deadline or an abort may still take effect. It covers requests, not the time a caller takes to read a download it received: a response body streams at the caller's pace until it is consumed, the caller's signal aborts or the SmartBucket closes. While a client assigned through `storageClient` or `replaceStorageClient()` is in use, `requestBounds` is `undefined` and that client's own configuration applies. A single-request upload (`fastPut`, `fastPutStream`) must finish sending its body within `requestTimeoutMs`; for large objects raise it or use `fastPutStreamExact()`, whose parts are separate requests of 5 MiB each.
|
|
153
|
+
|
|
154
|
+
A `signal` aborts the request in flight, stops its retries and rejects with the signal's reason; an already aborted signal sends nothing. A signal of a bucket read, write, copy, move, removal, existence check or listing that is not an `AbortSignal`, a `Proxy` of one included, is refused with a `TypeError` before any request. A per-call time limit is a signal as well, `AbortSignal.timeout(ms)` or an own `AbortController`.
|
|
155
|
+
|
|
149
156
|
### Document APIs that need a MongoDB backend
|
|
150
157
|
|
|
151
158
|
The document model runs on both NoSQLDB and MongoDB, but several APIs do not mean the same thing on both. The NoSQLDB engine is qualified at 8.0.2 and 10.9.0 (see [Verification](#verification)); the two releases part on the grouped-totals and guarded-`$expr` rows below — 10.9.0 groups composite keys exactly and evaluates the guard, 8.0.2 does neither — on whether a migration can create a partial index or a collection validator at all, on when a transaction learns of a write conflict, and on whether `$elemMatch` applies query operators to scalar array elements.
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -7,7 +7,8 @@ export type TSmartdataPersistenceErrorCode =
|
|
|
7
7
|
| 'unique_conflict'
|
|
8
8
|
| 'ambiguous_write'
|
|
9
9
|
| 'unsupported_operation'
|
|
10
|
-
| 'timeout'
|
|
10
|
+
| 'timeout'
|
|
11
|
+
| 'transaction_conflict';
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* Stable errors for ordinary SmartData model configuration and persistence.
|
|
@@ -28,6 +29,34 @@ export class SmartdataPersistenceError extends Error {
|
|
|
28
29
|
}
|
|
29
30
|
}
|
|
30
31
|
|
|
32
|
+
/**
|
|
33
|
+
* `session.withTransaction()` gave up because every attempt of the transaction
|
|
34
|
+
* was aborted as transient: a write conflict or another error the database
|
|
35
|
+
* labelled `TransientTransactionError`, through the driver's whole retry
|
|
36
|
+
* window. Nothing was committed, so the transaction is safe to re-run. The
|
|
37
|
+
* last attempt's error is the `cause` and tells which error it was; like every
|
|
38
|
+
* driver error it can contain statement data. A transaction with `timeoutMS`
|
|
39
|
+
* rejects with code `timeout` instead once its deadline expires.
|
|
40
|
+
*/
|
|
41
|
+
export class SmartdataTransactionConflictError extends SmartdataPersistenceError {
|
|
42
|
+
/** How many times the callback ran. */
|
|
43
|
+
public readonly attempts: number;
|
|
44
|
+
/** Milliseconds from the start of `withTransaction()` until it gave up. */
|
|
45
|
+
public readonly elapsedMS: number;
|
|
46
|
+
|
|
47
|
+
constructor(optionsArg: { attempts: number; elapsedMS: number; cause: unknown }) {
|
|
48
|
+
super(
|
|
49
|
+
'transaction_conflict',
|
|
50
|
+
`SmartData transaction gave up after ${optionsArg.attempts} attempts in ${optionsArg.elapsedMS} ms: `
|
|
51
|
+
+ 'every attempt was aborted as transient; nothing was committed.',
|
|
52
|
+
{ cause: optionsArg.cause },
|
|
53
|
+
);
|
|
54
|
+
this.name = 'SmartdataTransactionConflictError';
|
|
55
|
+
this.attempts = optionsArg.attempts;
|
|
56
|
+
this.elapsedMS = optionsArg.elapsedMS;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
31
60
|
/**
|
|
32
61
|
* The client-side deadline of a model call or transaction expired. The
|
|
33
62
|
* driver's own `MongoOperationTimeoutError` stays available as `cause` when
|