@fluidframework/odsp-driver 0.56.0 → 0.57.0-51086
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/createFile.d.ts.map +1 -1
- package/dist/createFile.js +6 -5
- package/dist/createFile.js.map +1 -1
- package/dist/createOdspUrl.d.ts.map +1 -1
- package/dist/createOdspUrl.js.map +1 -1
- package/dist/epochTracker.d.ts.map +1 -1
- package/dist/epochTracker.js +5 -4
- package/dist/epochTracker.js.map +1 -1
- package/dist/fetchSnapshot.d.ts.map +1 -1
- package/dist/fetchSnapshot.js +2 -1
- package/dist/fetchSnapshot.js.map +1 -1
- package/dist/getFileLink.d.ts.map +1 -1
- package/dist/getFileLink.js +5 -4
- package/dist/getFileLink.js.map +1 -1
- package/dist/getQueryString.d.ts.map +1 -1
- package/dist/getQueryString.js.map +1 -1
- package/dist/odspDeltaStorageService.js +1 -1
- package/dist/odspDeltaStorageService.js.map +1 -1
- package/dist/odspDocumentDeltaConnection.d.ts +6 -6
- package/dist/odspDocumentDeltaConnection.d.ts.map +1 -1
- package/dist/odspDocumentDeltaConnection.js +1 -0
- package/dist/odspDocumentDeltaConnection.js.map +1 -1
- package/dist/odspDocumentService.d.ts.map +1 -1
- package/dist/odspDocumentService.js +3 -2
- package/dist/odspDocumentService.js.map +1 -1
- package/dist/odspDocumentStorageManager.d.ts.map +1 -1
- package/dist/odspDocumentStorageManager.js +10 -9
- package/dist/odspDocumentStorageManager.js.map +1 -1
- package/dist/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
- package/dist/odspDriverUrlResolverForShareLink.js +2 -1
- package/dist/odspDriverUrlResolverForShareLink.js.map +1 -1
- package/dist/odspSummaryUploadManager.d.ts.map +1 -1
- package/dist/odspSummaryUploadManager.js +4 -1
- package/dist/odspSummaryUploadManager.js.map +1 -1
- package/dist/odspUtils.d.ts +1 -1
- package/dist/odspUtils.d.ts.map +1 -1
- package/dist/odspUtils.js +17 -14
- package/dist/odspUtils.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/retryUtils.js.map +1 -1
- package/dist/vroom.js +1 -1
- package/dist/vroom.js.map +1 -1
- package/dist/zipItDataRepresentationUtils.d.ts.map +1 -1
- package/dist/zipItDataRepresentationUtils.js +2 -0
- package/dist/zipItDataRepresentationUtils.js.map +1 -1
- package/lib/createFile.d.ts.map +1 -1
- package/lib/createFile.js +6 -5
- package/lib/createFile.js.map +1 -1
- package/lib/createOdspUrl.d.ts.map +1 -1
- package/lib/createOdspUrl.js.map +1 -1
- package/lib/epochTracker.d.ts.map +1 -1
- package/lib/epochTracker.js +5 -4
- package/lib/epochTracker.js.map +1 -1
- package/lib/fetchSnapshot.d.ts.map +1 -1
- package/lib/fetchSnapshot.js +2 -1
- package/lib/fetchSnapshot.js.map +1 -1
- package/lib/getFileLink.d.ts.map +1 -1
- package/lib/getFileLink.js +5 -4
- package/lib/getFileLink.js.map +1 -1
- package/lib/getQueryString.d.ts.map +1 -1
- package/lib/getQueryString.js.map +1 -1
- package/lib/odspDeltaStorageService.js +1 -1
- package/lib/odspDeltaStorageService.js.map +1 -1
- package/lib/odspDocumentDeltaConnection.d.ts +6 -6
- package/lib/odspDocumentDeltaConnection.d.ts.map +1 -1
- package/lib/odspDocumentDeltaConnection.js +1 -0
- package/lib/odspDocumentDeltaConnection.js.map +1 -1
- package/lib/odspDocumentService.d.ts.map +1 -1
- package/lib/odspDocumentService.js +3 -2
- package/lib/odspDocumentService.js.map +1 -1
- package/lib/odspDocumentStorageManager.d.ts.map +1 -1
- package/lib/odspDocumentStorageManager.js +10 -9
- package/lib/odspDocumentStorageManager.js.map +1 -1
- package/lib/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
- package/lib/odspDriverUrlResolverForShareLink.js +2 -1
- package/lib/odspDriverUrlResolverForShareLink.js.map +1 -1
- package/lib/odspSummaryUploadManager.d.ts.map +1 -1
- package/lib/odspSummaryUploadManager.js +4 -1
- package/lib/odspSummaryUploadManager.js.map +1 -1
- package/lib/odspUtils.d.ts +1 -1
- package/lib/odspUtils.d.ts.map +1 -1
- package/lib/odspUtils.js +20 -17
- package/lib/odspUtils.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/retryUtils.js.map +1 -1
- package/lib/vroom.js +1 -1
- package/lib/vroom.js.map +1 -1
- package/lib/zipItDataRepresentationUtils.d.ts.map +1 -1
- package/lib/zipItDataRepresentationUtils.js +2 -0
- package/lib/zipItDataRepresentationUtils.js.map +1 -1
- package/package.json +8 -8
- package/src/createFile.ts +8 -5
- package/src/createOdspUrl.ts +1 -1
- package/src/epochTracker.ts +6 -10
- package/src/fetchSnapshot.ts +8 -7
- package/src/getFileLink.ts +7 -4
- package/src/getQueryString.ts +1 -1
- package/src/odspDeltaStorageService.ts +1 -1
- package/src/odspDocumentDeltaConnection.ts +9 -8
- package/src/odspDocumentService.ts +4 -2
- package/src/odspDocumentStorageManager.ts +15 -11
- package/src/odspDriverUrlResolverForShareLink.ts +3 -1
- package/src/odspSummaryUploadManager.ts +4 -1
- package/src/odspUtils.ts +34 -19
- package/src/packageVersion.ts +1 -1
- package/src/retryUtils.ts +1 -1
- package/src/vroom.ts +1 -1
- package/src/zipItDataRepresentationUtils.ts +2 -0
|
@@ -46,7 +46,9 @@ export class OdspSummaryUploadManager {
|
|
|
46
46
|
public async writeSummaryTree(tree: api.ISummaryTree, context: ISummaryContext) {
|
|
47
47
|
// If the last proposed handle is not the proposed handle of the acked summary(could happen when the last summary get nacked),
|
|
48
48
|
// then re-initialize the caches with the previous ones else just update the previous caches with the caches from acked summary.
|
|
49
|
-
if
|
|
49
|
+
// Don't bother logging if lastSummaryProposalHandle hasn't been set before; only log on a positive mismatch.
|
|
50
|
+
if (this.lastSummaryProposalHandle !== undefined &&
|
|
51
|
+
this.lastSummaryProposalHandle !== context.proposalHandle) {
|
|
50
52
|
this.mc.logger.sendTelemetryEvent({
|
|
51
53
|
eventName: "LastSummaryProposedHandleMismatch",
|
|
52
54
|
ackedSummaryProposedHandle: context.proposalHandle,
|
|
@@ -106,6 +108,7 @@ export class OdspSummaryUploadManager {
|
|
|
106
108
|
headers: Object.keys(headers).length !== 0 ? true : undefined,
|
|
107
109
|
blobs,
|
|
108
110
|
size: postBody.length,
|
|
111
|
+
referenceSequenceNumber,
|
|
109
112
|
},
|
|
110
113
|
async () => {
|
|
111
114
|
const response = await this.epochTracker.fetchAndParseAsJSON<IWriteSummaryResponse>(
|
package/src/odspUtils.ts
CHANGED
|
@@ -5,7 +5,13 @@
|
|
|
5
5
|
|
|
6
6
|
import { ITelemetryProperties, ITelemetryBaseLogger, ITelemetryLogger } from "@fluidframework/common-definitions";
|
|
7
7
|
import { IResolvedUrl, DriverErrorType } from "@fluidframework/driver-definitions";
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
isOnline,
|
|
10
|
+
OnlineStatus,
|
|
11
|
+
RetryableError,
|
|
12
|
+
NonRetryableError,
|
|
13
|
+
NetworkErrorBasic,
|
|
14
|
+
} from "@fluidframework/driver-utils";
|
|
9
15
|
import { assert, performance } from "@fluidframework/common-utils";
|
|
10
16
|
import { ISequencedDocumentMessage, ISnapshotTree } from "@fluidframework/protocol-definitions";
|
|
11
17
|
import { ChildLogger, PerformanceEvent, wrapError } from "@fluidframework/telemetry-utils";
|
|
@@ -28,7 +34,7 @@ import {
|
|
|
28
34
|
InstrumentedStorageTokenFetcher,
|
|
29
35
|
} from "@fluidframework/odsp-driver-definitions";
|
|
30
36
|
import { fetch } from "./fetch";
|
|
31
|
-
import { pkgVersion } from "./packageVersion";
|
|
37
|
+
import { pkgVersion as driverVersion } from "./packageVersion";
|
|
32
38
|
import { IOdspSnapshot } from "./contracts";
|
|
33
39
|
|
|
34
40
|
export const getWithRetryForTokenRefreshRepeat = "getWithRetryForTokenRefreshRepeat";
|
|
@@ -46,7 +52,7 @@ export interface ISnapshotContents {
|
|
|
46
52
|
export interface IOdspResponse<T> {
|
|
47
53
|
content: T;
|
|
48
54
|
headers: Map<string, string>;
|
|
49
|
-
|
|
55
|
+
propsToLog: ITelemetryProperties;
|
|
50
56
|
duration: number,
|
|
51
57
|
}
|
|
52
58
|
|
|
@@ -105,7 +111,8 @@ export async function fetchHelper(
|
|
|
105
111
|
throw new NonRetryableError(
|
|
106
112
|
"odspFetchErrorNoResponse",
|
|
107
113
|
"No response from fetch call",
|
|
108
|
-
DriverErrorType.incorrectServerResponse
|
|
114
|
+
DriverErrorType.incorrectServerResponse,
|
|
115
|
+
{ driverVersion });
|
|
109
116
|
}
|
|
110
117
|
if (!response.ok || response.status < 200 || response.status >= 300) {
|
|
111
118
|
throwOdspNetworkError(
|
|
@@ -116,7 +123,7 @@ export async function fetchHelper(
|
|
|
116
123
|
return {
|
|
117
124
|
content: response,
|
|
118
125
|
headers,
|
|
119
|
-
|
|
126
|
+
propsToLog: getSPOAndGraphRequestIdsFromResponse(headers),
|
|
120
127
|
duration: performance.now() - start,
|
|
121
128
|
};
|
|
122
129
|
}, (error) => {
|
|
@@ -130,11 +137,13 @@ export async function fetchHelper(
|
|
|
130
137
|
}
|
|
131
138
|
// This error is thrown by fetch() when AbortSignal is provided and it gets cancelled
|
|
132
139
|
if (error.name === "AbortError") {
|
|
133
|
-
throw new RetryableError(
|
|
140
|
+
throw new RetryableError(
|
|
141
|
+
"fetchAbort", "Fetch Timeout (AbortError)", OdspErrorType.fetchTimeout, { driverVersion });
|
|
134
142
|
}
|
|
135
143
|
// TCP/IP timeout
|
|
136
144
|
if (errorText.indexOf("ETIMEDOUT") !== -1) {
|
|
137
|
-
throw new RetryableError(
|
|
145
|
+
throw new RetryableError(
|
|
146
|
+
"fetchETimedout", "Fetch Timeout (ETIMEDOUT)", OdspErrorType.fetchTimeout, { driverVersion });
|
|
138
147
|
}
|
|
139
148
|
|
|
140
149
|
//
|
|
@@ -143,9 +152,11 @@ export async function fetchHelper(
|
|
|
143
152
|
// It is also non-serializable object due to circular references.
|
|
144
153
|
//
|
|
145
154
|
if (online === OnlineStatus.Offline) {
|
|
146
|
-
throw new RetryableError(
|
|
155
|
+
throw new RetryableError(
|
|
156
|
+
"OdspFetchOffline", `Offline: ${errorText}`, DriverErrorType.offlineError, { driverVersion });
|
|
147
157
|
} else {
|
|
148
|
-
throw new RetryableError(
|
|
158
|
+
throw new RetryableError(
|
|
159
|
+
"OdspFetchError", `Fetch error: ${errorText}`, DriverErrorType.fetchFailure, { driverVersion });
|
|
149
160
|
}
|
|
150
161
|
});
|
|
151
162
|
}
|
|
@@ -159,14 +170,14 @@ export async function fetchArray(
|
|
|
159
170
|
requestInfo: RequestInfo,
|
|
160
171
|
requestInit: RequestInit | undefined,
|
|
161
172
|
): Promise<IOdspResponse<ArrayBuffer>> {
|
|
162
|
-
const { content, headers,
|
|
173
|
+
const { content, headers, propsToLog, duration } = await fetchHelper(requestInfo, requestInit);
|
|
163
174
|
|
|
164
175
|
const arrayBuffer = await content.arrayBuffer();
|
|
165
|
-
|
|
176
|
+
propsToLog.bodySize = arrayBuffer.byteLength;
|
|
166
177
|
return {
|
|
167
178
|
headers,
|
|
168
179
|
content: arrayBuffer,
|
|
169
|
-
|
|
180
|
+
propsToLog,
|
|
170
181
|
duration,
|
|
171
182
|
};
|
|
172
183
|
}
|
|
@@ -180,7 +191,7 @@ export async function fetchAndParseAsJSONHelper<T>(
|
|
|
180
191
|
requestInfo: RequestInfo,
|
|
181
192
|
requestInit: RequestInit | undefined,
|
|
182
193
|
): Promise<IOdspResponse<T>> {
|
|
183
|
-
const { content, headers,
|
|
194
|
+
const { content, headers, propsToLog, duration } = await fetchHelper(requestInfo, requestInit);
|
|
184
195
|
let text: string | undefined;
|
|
185
196
|
try {
|
|
186
197
|
text = await content.text();
|
|
@@ -198,11 +209,11 @@ export async function fetchAndParseAsJSONHelper<T>(
|
|
|
198
209
|
);
|
|
199
210
|
}
|
|
200
211
|
|
|
201
|
-
|
|
212
|
+
propsToLog.bodySize = text.length;
|
|
202
213
|
const res = {
|
|
203
214
|
headers,
|
|
204
215
|
content: JSON.parse(text),
|
|
205
|
-
|
|
216
|
+
propsToLog,
|
|
206
217
|
duration,
|
|
207
218
|
};
|
|
208
219
|
return res;
|
|
@@ -232,7 +243,7 @@ export const createOdspLogger = (logger?: ITelemetryBaseLogger) =>
|
|
|
232
243
|
"OdspDriver",
|
|
233
244
|
{ all :
|
|
234
245
|
{
|
|
235
|
-
driverVersion
|
|
246
|
+
driverVersion,
|
|
236
247
|
},
|
|
237
248
|
});
|
|
238
249
|
|
|
@@ -298,17 +309,21 @@ export function toInstrumentedOdspTokenFetcher(
|
|
|
298
309
|
"storageTokenIsNull",
|
|
299
310
|
`Token is null for ${name} call`,
|
|
300
311
|
OdspErrorType.fetchTokenError,
|
|
301
|
-
{ method: name });
|
|
312
|
+
{ method: name, driverVersion });
|
|
302
313
|
}
|
|
303
314
|
return token;
|
|
304
315
|
}, (error) => {
|
|
316
|
+
// There is an important but unofficial contract here where token providers can set canRetry: true
|
|
317
|
+
// to hook into the driver's retry logic (e.g. the retry loop when initiating a connection)
|
|
318
|
+
const rawCanRetry = error?.canRetry;
|
|
305
319
|
const tokenError = wrapError(
|
|
306
320
|
error,
|
|
307
|
-
(errorMessage) => new
|
|
321
|
+
(errorMessage) => new NetworkErrorBasic(
|
|
308
322
|
"tokenFetcherFailed",
|
|
309
323
|
errorMessage,
|
|
310
324
|
OdspErrorType.fetchTokenError,
|
|
311
|
-
|
|
325
|
+
typeof rawCanRetry === "boolean" ? rawCanRetry : false /* canRetry */,
|
|
326
|
+
{ method: name, driverVersion }));
|
|
312
327
|
throw tokenError;
|
|
313
328
|
}),
|
|
314
329
|
{ cancel: "generic" });
|
package/src/packageVersion.ts
CHANGED
package/src/retryUtils.ts
CHANGED
|
@@ -68,7 +68,7 @@ export async function runWithRetry<T>(
|
|
|
68
68
|
|
|
69
69
|
assert(canRetry, 0x24d /* "can retry" */);
|
|
70
70
|
await delay(Math.floor(retryAfter));
|
|
71
|
-
retryAfter += retryAfter / 4
|
|
71
|
+
retryAfter += retryAfter / 4 * (1 + Math.random());
|
|
72
72
|
lastError = error;
|
|
73
73
|
}
|
|
74
74
|
}
|
package/src/vroom.ts
CHANGED
|
@@ -94,7 +94,7 @@ export async function fetchJoinSession(
|
|
|
94
94
|
|
|
95
95
|
// TODO SPO-specific telemetry
|
|
96
96
|
event.end({
|
|
97
|
-
...response.
|
|
97
|
+
...response.propsToLog,
|
|
98
98
|
// pushV2 websocket urls will contain pushf
|
|
99
99
|
pushv2: socketUrl.includes("pushf"),
|
|
100
100
|
webSocketHostName,
|
|
@@ -12,6 +12,7 @@ import { assert, IsoBuffer, Uint8ArrayToArrayBuffer, Uint8ArrayToString } from "
|
|
|
12
12
|
import { NonRetryableError } from "@fluidframework/driver-utils";
|
|
13
13
|
import { DriverErrorType } from "@fluidframework/driver-definitions";
|
|
14
14
|
import { ReadBuffer } from "./ReadBufferUtils";
|
|
15
|
+
import { pkgVersion as driverVersion } from "./packageVersion";
|
|
15
16
|
|
|
16
17
|
// eslint-disable-next-line max-len
|
|
17
18
|
// https://onedrive.visualstudio.com/SharePoint%20Online/_git/SPO?path=/cobalt/Base/Property/BinaryEncodedPropertyReader.cs&version=GBmaster&_a=contents
|
|
@@ -485,6 +486,7 @@ function throwBufferParseException(
|
|
|
485
486
|
{
|
|
486
487
|
nodeType: getNodeType(node),
|
|
487
488
|
expectedNodeType,
|
|
489
|
+
driverVersion,
|
|
488
490
|
});
|
|
489
491
|
}
|
|
490
492
|
|