@fluidframework/container-runtime 2.31.1 → 2.32.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.
Files changed (299) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/container-runtime.test-files.tar +0 -0
  3. package/dist/channelCollection.d.ts +0 -14
  4. package/dist/channelCollection.d.ts.map +1 -1
  5. package/dist/channelCollection.js +10 -25
  6. package/dist/channelCollection.js.map +1 -1
  7. package/dist/containerRuntime.d.ts +16 -9
  8. package/dist/containerRuntime.d.ts.map +1 -1
  9. package/dist/containerRuntime.js +137 -103
  10. package/dist/containerRuntime.js.map +1 -1
  11. package/dist/dataStoreContext.d.ts +1 -5
  12. package/dist/dataStoreContext.d.ts.map +1 -1
  13. package/dist/dataStoreContext.js +0 -8
  14. package/dist/dataStoreContext.js.map +1 -1
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +1 -2
  18. package/dist/index.js.map +1 -1
  19. package/dist/messageTypes.d.ts +3 -7
  20. package/dist/messageTypes.d.ts.map +1 -1
  21. package/dist/messageTypes.js.map +1 -1
  22. package/dist/opLifecycle/batchManager.d.ts +4 -4
  23. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  24. package/dist/opLifecycle/batchManager.js +4 -4
  25. package/dist/opLifecycle/batchManager.js.map +1 -1
  26. package/dist/opLifecycle/definitions.d.ts +40 -6
  27. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  28. package/dist/opLifecycle/definitions.js.map +1 -1
  29. package/dist/opLifecycle/index.d.ts +4 -3
  30. package/dist/opLifecycle/index.d.ts.map +1 -1
  31. package/dist/opLifecycle/index.js +4 -3
  32. package/dist/opLifecycle/index.js.map +1 -1
  33. package/dist/opLifecycle/opCompressor.d.ts +10 -11
  34. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  35. package/dist/opLifecycle/opCompressor.js +19 -18
  36. package/dist/opLifecycle/opCompressor.js.map +1 -1
  37. package/dist/opLifecycle/opGroupingManager.d.ts +9 -5
  38. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  39. package/dist/opLifecycle/opGroupingManager.js +18 -22
  40. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  41. package/dist/opLifecycle/opSerialization.d.ts +20 -0
  42. package/dist/opLifecycle/opSerialization.d.ts.map +1 -0
  43. package/dist/opLifecycle/opSerialization.js +40 -0
  44. package/dist/opLifecycle/opSerialization.js.map +1 -0
  45. package/dist/opLifecycle/opSplitter.d.ts +12 -13
  46. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  47. package/dist/opLifecycle/opSplitter.js +13 -13
  48. package/dist/opLifecycle/opSplitter.js.map +1 -1
  49. package/dist/opLifecycle/outbox.d.ts +16 -18
  50. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  51. package/dist/opLifecycle/outbox.js +57 -43
  52. package/dist/opLifecycle/outbox.js.map +1 -1
  53. package/dist/opLifecycle/remoteMessageProcessor.d.ts +0 -7
  54. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  55. package/dist/opLifecycle/remoteMessageProcessor.js +1 -15
  56. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  57. package/dist/packageVersion.d.ts +1 -1
  58. package/dist/packageVersion.js +1 -1
  59. package/dist/packageVersion.js.map +1 -1
  60. package/dist/pendingStateManager.d.ts +2 -2
  61. package/dist/pendingStateManager.d.ts.map +1 -1
  62. package/dist/pendingStateManager.js +1 -1
  63. package/dist/pendingStateManager.js.map +1 -1
  64. package/dist/runtimeLayerCompatState.d.ts.map +1 -1
  65. package/dist/runtimeLayerCompatState.js +6 -5
  66. package/dist/runtimeLayerCompatState.js.map +1 -1
  67. package/dist/summary/index.d.ts +5 -8
  68. package/dist/summary/index.d.ts.map +1 -1
  69. package/dist/summary/index.js +20 -21
  70. package/dist/summary/index.js.map +1 -1
  71. package/dist/summary/orderedClientElection.js +9 -9
  72. package/dist/summary/orderedClientElection.js.map +1 -1
  73. package/dist/summary/summarizerClientElection.d.ts +0 -1
  74. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  75. package/dist/summary/summarizerClientElection.js +3 -3
  76. package/dist/summary/summarizerClientElection.js.map +1 -1
  77. package/dist/summary/summarizerTypes.d.ts +3 -75
  78. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  79. package/dist/summary/summarizerTypes.js +2 -0
  80. package/dist/summary/summarizerTypes.js.map +1 -1
  81. package/{lib/summary/summaryGenerator.d.ts → dist/summary/summarizerUtils.d.ts} +12 -43
  82. package/dist/summary/summarizerUtils.d.ts.map +1 -0
  83. package/dist/summary/summarizerUtils.js +71 -0
  84. package/dist/summary/summarizerUtils.js.map +1 -0
  85. package/dist/summary/summaryDelayLoadedModule/index.d.ts +10 -0
  86. package/dist/summary/summaryDelayLoadedModule/index.d.ts.map +1 -0
  87. package/dist/summary/summaryDelayLoadedModule/index.js +20 -0
  88. package/dist/summary/summaryDelayLoadedModule/index.js.map +1 -0
  89. package/dist/summary/{runWhileConnectedCoordinator.d.ts → summaryDelayLoadedModule/runWhileConnectedCoordinator.d.ts} +1 -1
  90. package/dist/summary/summaryDelayLoadedModule/runWhileConnectedCoordinator.d.ts.map +1 -0
  91. package/dist/summary/summaryDelayLoadedModule/runWhileConnectedCoordinator.js.map +1 -0
  92. package/dist/summary/{runningSummarizer.d.ts → summaryDelayLoadedModule/runningSummarizer.d.ts} +4 -13
  93. package/dist/summary/summaryDelayLoadedModule/runningSummarizer.d.ts.map +1 -0
  94. package/dist/summary/{runningSummarizer.js → summaryDelayLoadedModule/runningSummarizer.js} +17 -24
  95. package/dist/summary/summaryDelayLoadedModule/runningSummarizer.js.map +1 -0
  96. package/dist/summary/{summarizer.d.ts → summaryDelayLoadedModule/summarizer.d.ts} +13 -2
  97. package/dist/summary/summaryDelayLoadedModule/summarizer.d.ts.map +1 -0
  98. package/dist/summary/{summarizer.js → summaryDelayLoadedModule/summarizer.js} +13 -3
  99. package/dist/summary/summaryDelayLoadedModule/summarizer.js.map +1 -0
  100. package/{lib/summary → dist/summary/summaryDelayLoadedModule}/summarizerHeuristics.d.ts +3 -3
  101. package/dist/summary/summaryDelayLoadedModule/summarizerHeuristics.d.ts.map +1 -0
  102. package/dist/summary/summaryDelayLoadedModule/summarizerHeuristics.js.map +1 -0
  103. package/dist/summary/summaryDelayLoadedModule/summaryGenerator.d.ts +36 -0
  104. package/dist/summary/summaryDelayLoadedModule/summaryGenerator.d.ts.map +1 -0
  105. package/dist/summary/{summaryGenerator.js → summaryDelayLoadedModule/summaryGenerator.js} +14 -99
  106. package/dist/summary/summaryDelayLoadedModule/summaryGenerator.js.map +1 -0
  107. package/dist/summary/summaryDelayLoadedModule/summaryResultBuilder.d.ts +21 -0
  108. package/dist/summary/summaryDelayLoadedModule/summaryResultBuilder.d.ts.map +1 -0
  109. package/dist/summary/summaryDelayLoadedModule/summaryResultBuilder.js +44 -0
  110. package/dist/summary/summaryDelayLoadedModule/summaryResultBuilder.js.map +1 -0
  111. package/dist/summary/summaryDelayLoadedModule/summaryResultTypes.d.ts +80 -0
  112. package/dist/summary/summaryDelayLoadedModule/summaryResultTypes.d.ts.map +1 -0
  113. package/dist/summary/summaryDelayLoadedModule/summaryResultTypes.js +7 -0
  114. package/dist/summary/summaryDelayLoadedModule/summaryResultTypes.js.map +1 -0
  115. package/dist/summary/summaryHelpers.d.ts +1 -1
  116. package/dist/summary/summaryHelpers.d.ts.map +1 -1
  117. package/dist/summary/summaryHelpers.js +2 -2
  118. package/dist/summary/summaryHelpers.js.map +1 -1
  119. package/dist/summary/summaryManager.d.ts +4 -3
  120. package/dist/summary/summaryManager.d.ts.map +1 -1
  121. package/dist/summary/summaryManager.js +2 -2
  122. package/dist/summary/summaryManager.js.map +1 -1
  123. package/lib/channelCollection.d.ts +0 -14
  124. package/lib/channelCollection.d.ts.map +1 -1
  125. package/lib/channelCollection.js +6 -21
  126. package/lib/channelCollection.js.map +1 -1
  127. package/lib/containerRuntime.d.ts +16 -9
  128. package/lib/containerRuntime.d.ts.map +1 -1
  129. package/lib/containerRuntime.js +140 -106
  130. package/lib/containerRuntime.js.map +1 -1
  131. package/lib/dataStoreContext.d.ts +1 -5
  132. package/lib/dataStoreContext.d.ts.map +1 -1
  133. package/lib/dataStoreContext.js +0 -8
  134. package/lib/dataStoreContext.js.map +1 -1
  135. package/lib/index.d.ts +1 -1
  136. package/lib/index.d.ts.map +1 -1
  137. package/lib/index.js +1 -1
  138. package/lib/index.js.map +1 -1
  139. package/lib/messageTypes.d.ts +3 -7
  140. package/lib/messageTypes.d.ts.map +1 -1
  141. package/lib/messageTypes.js.map +1 -1
  142. package/lib/opLifecycle/batchManager.d.ts +4 -4
  143. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  144. package/lib/opLifecycle/batchManager.js +4 -4
  145. package/lib/opLifecycle/batchManager.js.map +1 -1
  146. package/lib/opLifecycle/definitions.d.ts +40 -6
  147. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  148. package/lib/opLifecycle/definitions.js.map +1 -1
  149. package/lib/opLifecycle/index.d.ts +4 -3
  150. package/lib/opLifecycle/index.d.ts.map +1 -1
  151. package/lib/opLifecycle/index.js +3 -2
  152. package/lib/opLifecycle/index.js.map +1 -1
  153. package/lib/opLifecycle/opCompressor.d.ts +10 -11
  154. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  155. package/lib/opLifecycle/opCompressor.js +20 -19
  156. package/lib/opLifecycle/opCompressor.js.map +1 -1
  157. package/lib/opLifecycle/opGroupingManager.d.ts +9 -5
  158. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
  159. package/lib/opLifecycle/opGroupingManager.js +18 -22
  160. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  161. package/lib/opLifecycle/opSerialization.d.ts +20 -0
  162. package/lib/opLifecycle/opSerialization.d.ts.map +1 -0
  163. package/lib/opLifecycle/opSerialization.js +35 -0
  164. package/lib/opLifecycle/opSerialization.js.map +1 -0
  165. package/lib/opLifecycle/opSplitter.d.ts +12 -13
  166. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  167. package/lib/opLifecycle/opSplitter.js +13 -13
  168. package/lib/opLifecycle/opSplitter.js.map +1 -1
  169. package/lib/opLifecycle/outbox.d.ts +16 -18
  170. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  171. package/lib/opLifecycle/outbox.js +56 -41
  172. package/lib/opLifecycle/outbox.js.map +1 -1
  173. package/lib/opLifecycle/remoteMessageProcessor.d.ts +0 -7
  174. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  175. package/lib/opLifecycle/remoteMessageProcessor.js +0 -13
  176. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  177. package/lib/packageVersion.d.ts +1 -1
  178. package/lib/packageVersion.js +1 -1
  179. package/lib/packageVersion.js.map +1 -1
  180. package/lib/pendingStateManager.d.ts +2 -2
  181. package/lib/pendingStateManager.d.ts.map +1 -1
  182. package/lib/pendingStateManager.js +1 -1
  183. package/lib/pendingStateManager.js.map +1 -1
  184. package/lib/runtimeLayerCompatState.d.ts.map +1 -1
  185. package/lib/runtimeLayerCompatState.js +3 -2
  186. package/lib/runtimeLayerCompatState.js.map +1 -1
  187. package/lib/summary/index.d.ts +5 -8
  188. package/lib/summary/index.d.ts.map +1 -1
  189. package/lib/summary/index.js +5 -7
  190. package/lib/summary/index.js.map +1 -1
  191. package/lib/summary/orderedClientElection.js +1 -1
  192. package/lib/summary/orderedClientElection.js.map +1 -1
  193. package/lib/summary/summarizerClientElection.d.ts +0 -1
  194. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  195. package/lib/summary/summarizerClientElection.js +1 -1
  196. package/lib/summary/summarizerClientElection.js.map +1 -1
  197. package/lib/summary/summarizerTypes.d.ts +3 -75
  198. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  199. package/lib/summary/summarizerTypes.js +1 -1
  200. package/lib/summary/summarizerTypes.js.map +1 -1
  201. package/{dist/summary/summaryGenerator.d.ts → lib/summary/summarizerUtils.d.ts} +12 -43
  202. package/lib/summary/summarizerUtils.d.ts.map +1 -0
  203. package/lib/summary/summarizerUtils.js +64 -0
  204. package/lib/summary/summarizerUtils.js.map +1 -0
  205. package/lib/summary/summaryDelayLoadedModule/index.d.ts +10 -0
  206. package/lib/summary/summaryDelayLoadedModule/index.d.ts.map +1 -0
  207. package/lib/summary/summaryDelayLoadedModule/index.js +9 -0
  208. package/lib/summary/summaryDelayLoadedModule/index.js.map +1 -0
  209. package/lib/summary/{runWhileConnectedCoordinator.d.ts → summaryDelayLoadedModule/runWhileConnectedCoordinator.d.ts} +1 -1
  210. package/lib/summary/summaryDelayLoadedModule/runWhileConnectedCoordinator.d.ts.map +1 -0
  211. package/lib/summary/summaryDelayLoadedModule/runWhileConnectedCoordinator.js.map +1 -0
  212. package/lib/summary/{runningSummarizer.d.ts → summaryDelayLoadedModule/runningSummarizer.d.ts} +4 -13
  213. package/lib/summary/summaryDelayLoadedModule/runningSummarizer.d.ts.map +1 -0
  214. package/lib/summary/{runningSummarizer.js → summaryDelayLoadedModule/runningSummarizer.js} +5 -12
  215. package/lib/summary/summaryDelayLoadedModule/runningSummarizer.js.map +1 -0
  216. package/lib/summary/{summarizer.d.ts → summaryDelayLoadedModule/summarizer.d.ts} +13 -2
  217. package/lib/summary/summaryDelayLoadedModule/summarizer.d.ts.map +1 -0
  218. package/lib/summary/{summarizer.js → summaryDelayLoadedModule/summarizer.js} +11 -1
  219. package/lib/summary/summaryDelayLoadedModule/summarizer.js.map +1 -0
  220. package/{dist/summary → lib/summary/summaryDelayLoadedModule}/summarizerHeuristics.d.ts +3 -3
  221. package/lib/summary/summaryDelayLoadedModule/summarizerHeuristics.d.ts.map +1 -0
  222. package/lib/summary/summaryDelayLoadedModule/summarizerHeuristics.js.map +1 -0
  223. package/lib/summary/summaryDelayLoadedModule/summaryGenerator.d.ts +36 -0
  224. package/lib/summary/summaryDelayLoadedModule/summaryGenerator.d.ts.map +1 -0
  225. package/lib/summary/{summaryGenerator.js → summaryDelayLoadedModule/summaryGenerator.js} +4 -85
  226. package/lib/summary/summaryDelayLoadedModule/summaryGenerator.js.map +1 -0
  227. package/lib/summary/summaryDelayLoadedModule/summaryResultBuilder.d.ts +21 -0
  228. package/lib/summary/summaryDelayLoadedModule/summaryResultBuilder.d.ts.map +1 -0
  229. package/lib/summary/summaryDelayLoadedModule/summaryResultBuilder.js +40 -0
  230. package/lib/summary/summaryDelayLoadedModule/summaryResultBuilder.js.map +1 -0
  231. package/lib/summary/summaryDelayLoadedModule/summaryResultTypes.d.ts +80 -0
  232. package/lib/summary/summaryDelayLoadedModule/summaryResultTypes.d.ts.map +1 -0
  233. package/lib/summary/summaryDelayLoadedModule/summaryResultTypes.js +6 -0
  234. package/lib/summary/summaryDelayLoadedModule/summaryResultTypes.js.map +1 -0
  235. package/lib/summary/summaryHelpers.d.ts +1 -1
  236. package/lib/summary/summaryHelpers.d.ts.map +1 -1
  237. package/lib/summary/summaryHelpers.js +1 -1
  238. package/lib/summary/summaryHelpers.js.map +1 -1
  239. package/lib/summary/summaryManager.d.ts +4 -3
  240. package/lib/summary/summaryManager.d.ts.map +1 -1
  241. package/lib/summary/summaryManager.js +2 -2
  242. package/lib/summary/summaryManager.js.map +1 -1
  243. package/package.json +20 -19
  244. package/src/channelCollection.ts +5 -20
  245. package/src/containerRuntime.ts +220 -178
  246. package/src/dataStoreContext.ts +0 -11
  247. package/src/index.ts +0 -1
  248. package/src/messageTypes.ts +5 -19
  249. package/src/opLifecycle/batchManager.ts +19 -12
  250. package/src/opLifecycle/definitions.ts +45 -6
  251. package/src/opLifecycle/index.ts +14 -3
  252. package/src/opLifecycle/opCompressor.ts +25 -24
  253. package/src/opLifecycle/opGroupingManager.ts +27 -26
  254. package/src/opLifecycle/opSerialization.ts +46 -0
  255. package/src/opLifecycle/opSplitter.ts +20 -16
  256. package/src/opLifecycle/outbox.ts +101 -66
  257. package/src/opLifecycle/remoteMessageProcessor.ts +0 -17
  258. package/src/packageVersion.ts +1 -1
  259. package/src/pendingStateManager.ts +3 -3
  260. package/src/runtimeLayerCompatState.ts +3 -2
  261. package/src/summary/index.ts +35 -31
  262. package/src/summary/orderedClientElection.ts +1 -1
  263. package/src/summary/summarizerClientElection.ts +1 -2
  264. package/src/summary/summarizerTypes.ts +7 -91
  265. package/src/summary/summarizerUtils.ts +132 -0
  266. package/src/summary/summaryDelayLoadedModule/index.ts +28 -0
  267. package/src/summary/{runWhileConnectedCoordinator.ts → summaryDelayLoadedModule/runWhileConnectedCoordinator.ts} +1 -1
  268. package/src/summary/{runningSummarizer.ts → summaryDelayLoadedModule/runningSummarizer.ts} +13 -28
  269. package/src/summary/{summarizer.ts → summaryDelayLoadedModule/summarizer.ts} +19 -8
  270. package/src/summary/{summarizerHeuristics.ts → summaryDelayLoadedModule/summarizerHeuristics.ts} +3 -3
  271. package/src/summary/{summaryGenerator.ts → summaryDelayLoadedModule/summaryGenerator.ts} +13 -179
  272. package/src/summary/summaryDelayLoadedModule/summaryResultBuilder.ts +70 -0
  273. package/src/summary/summaryDelayLoadedModule/summaryResultTypes.ts +100 -0
  274. package/src/summary/summaryHelpers.ts +6 -6
  275. package/src/summary/summaryManager.ts +8 -6
  276. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +0 -1
  277. package/dist/summary/runWhileConnectedCoordinator.js.map +0 -1
  278. package/dist/summary/runningSummarizer.d.ts.map +0 -1
  279. package/dist/summary/runningSummarizer.js.map +0 -1
  280. package/dist/summary/summarizer.d.ts.map +0 -1
  281. package/dist/summary/summarizer.js.map +0 -1
  282. package/dist/summary/summarizerHeuristics.d.ts.map +0 -1
  283. package/dist/summary/summarizerHeuristics.js.map +0 -1
  284. package/dist/summary/summaryGenerator.d.ts.map +0 -1
  285. package/dist/summary/summaryGenerator.js.map +0 -1
  286. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +0 -1
  287. package/lib/summary/runWhileConnectedCoordinator.js.map +0 -1
  288. package/lib/summary/runningSummarizer.d.ts.map +0 -1
  289. package/lib/summary/runningSummarizer.js.map +0 -1
  290. package/lib/summary/summarizer.d.ts.map +0 -1
  291. package/lib/summary/summarizer.js.map +0 -1
  292. package/lib/summary/summarizerHeuristics.d.ts.map +0 -1
  293. package/lib/summary/summarizerHeuristics.js.map +0 -1
  294. package/lib/summary/summaryGenerator.d.ts.map +0 -1
  295. package/lib/summary/summaryGenerator.js.map +0 -1
  296. /package/dist/summary/{runWhileConnectedCoordinator.js → summaryDelayLoadedModule/runWhileConnectedCoordinator.js} +0 -0
  297. /package/dist/summary/{summarizerHeuristics.js → summaryDelayLoadedModule/summarizerHeuristics.js} +0 -0
  298. /package/lib/summary/{runWhileConnectedCoordinator.js → summaryDelayLoadedModule/runWhileConnectedCoordinator.js} +0 -0
  299. /package/lib/summary/{summarizerHeuristics.js → summaryDelayLoadedModule/summarizerHeuristics.js} +0 -0
@@ -0,0 +1,132 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import type { SummarizerStopReason } from "@fluidframework/container-runtime-definitions/internal";
7
+ import { ITelemetryBaseProperties } from "@fluidframework/core-interfaces";
8
+ import { IPromiseTimerResult } from "@fluidframework/core-utils/internal";
9
+ import { LoggingError } from "@fluidframework/telemetry-utils/internal";
10
+
11
+ import { ISummaryCancellationToken, type IRetriableFailureError } from "./summarizerTypes.js";
12
+
13
+ export type raceTimerResult<T> =
14
+ | { result: "done"; value: T }
15
+ | { result: IPromiseTimerResult["timerResult"] }
16
+ | { result: "cancelled" };
17
+
18
+ /**
19
+ * Wait for a promise or PromiseTimer to elapse.
20
+ */
21
+ export async function raceTimer<T>(
22
+ promise: Promise<T>,
23
+ timer: Promise<IPromiseTimerResult>,
24
+
25
+ cancellationToken?: ISummaryCancellationToken,
26
+ ): Promise<raceTimerResult<T>> {
27
+ const promises: Promise<raceTimerResult<T>>[] = [
28
+ promise.then((value) => ({ result: "done", value }) as const),
29
+ timer.then(({ timerResult: result }) => ({ result }) as const),
30
+ ];
31
+ if (cancellationToken !== undefined) {
32
+ promises.push(
33
+ cancellationToken.waitCancelled.then(() => ({ result: "cancelled" }) as const),
34
+ );
35
+ }
36
+ return Promise.race(promises);
37
+ }
38
+
39
+ /**
40
+ * Should we try to run a last summary for the given stop reason?
41
+ * Currently only allows "parentNotConnected"
42
+ * @param stopReason - SummarizerStopReason
43
+ * @returns `true` if the stop reason can run a last summary, otherwise `false`.
44
+ */
45
+ export function stopReasonCanRunLastSummary(stopReason: SummarizerStopReason): boolean {
46
+ return stopReason === "parentNotConnected";
47
+ }
48
+
49
+ export type SummarizeReason =
50
+ /**
51
+ * Attempt to summarize after idle timeout has elapsed.
52
+ * Idle timer restarts whenever an op is received. So this
53
+ * triggers only after some amount of time has passed with
54
+ * no ops being received.
55
+ */
56
+ | "idle"
57
+ /**
58
+ * Attempt to summarize after a maximum time since last
59
+ * successful summary has passed. This measures time since
60
+ * last summary ack op was processed.
61
+ */
62
+ | "maxTime"
63
+ /**
64
+ * Attempt to summarize after a maximum number of ops have
65
+ * passed since the last successful summary. This compares
66
+ * op sequence numbers with the reference sequence number
67
+ * of the summarize op corresponding to the last summary
68
+ * ack op.
69
+ */
70
+ | "maxOps"
71
+ /**
72
+ * Special case to attempt to summarize one last time before the
73
+ * summarizer client closes itself. This is to prevent cases where
74
+ * the summarizer client never gets a chance to summarize, because
75
+ * there are too many outstanding ops and/or parent client cannot
76
+ * stay connected long enough for summarizer client to catch up.
77
+ */
78
+ | "lastSummary"
79
+ /**
80
+ * On-demand summary requested with specified reason.
81
+ */
82
+ | `onDemand;${string}`
83
+ /**
84
+ * Enqueue summarize attempt with specified reason.
85
+ */
86
+ | `enqueue;${string}`;
87
+
88
+ const summarizeErrors = {
89
+ /**
90
+ * Error encountered while generating the summary tree, uploading
91
+ * it to storage, or submitting the op. It could be a result of
92
+ * the client becoming disconnected while generating or an actual error.
93
+ */
94
+ submitSummaryFailure: "Error while generating, uploading, or submitting summary",
95
+ /**
96
+ * The summaryAckWaitTimeout time has elapsed before receiving the summarize op
97
+ * sent by this summarize attempt. It is expected to be broadcast quickly.
98
+ */
99
+ summaryOpWaitTimeout: "Timeout while waiting for summarize op broadcast",
100
+ /**
101
+ * The summaryAckWaitTimeout time has elapsed before receiving either a
102
+ * summaryAck or summaryNack op from the server in response to this
103
+ * summarize attempt. It is expected that the server should respond.
104
+ */
105
+ summaryAckWaitTimeout: "Timeout while waiting for summaryAck/summaryNack op",
106
+ /**
107
+ * The server responded with a summaryNack op, thus rejecting this
108
+ * summarize attempt.
109
+ */
110
+ summaryNack: "Server rejected summary via summaryNack op",
111
+
112
+ disconnect: "Summary cancelled due to summarizer or main client disconnect",
113
+ } as const;
114
+
115
+ export type SummarizeErrorCode = keyof typeof summarizeErrors;
116
+
117
+ // Helper functions to report failures and return.
118
+ export const getFailMessage = (errorCode: SummarizeErrorCode): string =>
119
+ `${errorCode}: ${summarizeErrors[errorCode]}`;
120
+
121
+ /**
122
+ * Errors type for errors hit during summary that may be retriable.
123
+ */
124
+ export class RetriableSummaryError extends LoggingError implements IRetriableFailureError {
125
+ constructor(
126
+ message: string,
127
+ public readonly retryAfterSeconds?: number,
128
+ props?: ITelemetryBaseProperties,
129
+ ) {
130
+ super(message, props);
131
+ }
132
+ }
@@ -0,0 +1,28 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ export {
7
+ defaultMaxAttempts,
8
+ defaultMaxAttemptsForSubmitFailures,
9
+ Summarizer,
10
+ } from "./summarizer.js";
11
+ export {
12
+ ICancellableSummarizerController,
13
+ neverCancelledSummaryToken,
14
+ RunWhileConnectedCoordinator,
15
+ } from "./runWhileConnectedCoordinator.js";
16
+
17
+ export {
18
+ EnqueueSummarizeResult,
19
+ IAckSummaryResult,
20
+ INackSummaryResult,
21
+ IBroadcastSummaryResult,
22
+ ISummarizeResults,
23
+ } from "./summaryResultTypes.js";
24
+ export { RunningSummarizer } from "./runningSummarizer.js";
25
+ export {
26
+ SummarizeHeuristicData,
27
+ SummarizeHeuristicRunner,
28
+ } from "./summarizerHeuristics.js";
@@ -6,7 +6,7 @@
6
6
  import type { SummarizerStopReason } from "@fluidframework/container-runtime-definitions/internal";
7
7
  import { assert, Deferred } from "@fluidframework/core-utils/internal";
8
8
 
9
- import { IConnectableRuntime, ISummaryCancellationToken } from "./summarizerTypes.js";
9
+ import { IConnectableRuntime, ISummaryCancellationToken } from "../summarizerTypes.js";
10
10
 
11
11
  /**
12
12
  * Similar to AbortController, but using promise instead of events
@@ -26,52 +26,37 @@ import {
26
26
  type ITelemetryLoggerExt,
27
27
  } from "@fluidframework/telemetry-utils/internal";
28
28
 
29
- import { opSize } from "../opProperties.js";
30
-
31
- import { SummarizeHeuristicRunner } from "./summarizerHeuristics.js";
29
+ import { opSize } from "../../opProperties.js";
32
30
  import type {
33
- ISummaryConfiguration,
34
- EnqueueSummarizeResult,
35
31
  IEnqueueSummarizeOptions,
36
32
  IOnDemandSummarizeOptions,
37
33
  IRefreshSummaryAckOptions,
34
+ IRetriableFailureError,
38
35
  ISubmitSummaryOptions,
39
36
  ISummarizeHeuristicData,
40
37
  ISummarizeHeuristicRunner,
41
38
  ISummarizeOptions,
42
- ISummarizeResults,
39
+ ISummarizerRuntime,
43
40
  ISummarizeRunnerTelemetry,
44
41
  ISummarizeTelemetryProperties,
45
- ISummarizerRuntime,
46
42
  ISummaryCancellationToken,
43
+ ISummaryConfiguration,
47
44
  SubmitSummaryResult,
48
- IRetriableFailureError,
49
- } from "./summarizerTypes.js";
45
+ } from "../summarizerTypes.js";
46
+ import { raceTimer, RetriableSummaryError, type SummarizeReason } from "../summarizerUtils.js";
50
47
  import {
51
48
  IAckedSummary,
52
49
  IClientSummaryWatcher,
53
50
  SummaryCollection,
54
- } from "./summaryCollection.js";
55
- import {
56
- RetriableSummaryError,
57
- SummarizeReason,
58
- SummarizeResultBuilder,
59
- SummaryGenerator,
60
- raceTimer,
61
- } from "./summaryGenerator.js";
51
+ } from "../summaryCollection.js";
62
52
 
63
- const maxSummarizeAckWaitTime = 10 * 60 * 1000; // 10 minutes
53
+ import { defaultMaxAttempts, defaultMaxAttemptsForSubmitFailures } from "./summarizer.js";
54
+ import { SummarizeHeuristicRunner } from "./summarizerHeuristics.js";
55
+ import { SummaryGenerator } from "./summaryGenerator.js";
56
+ import { SummarizeResultBuilder } from "./summaryResultBuilder.js";
57
+ import type { EnqueueSummarizeResult, ISummarizeResults } from "./summaryResultTypes.js";
64
58
 
65
- /**
66
- * The maximum number of summarization attempts that will be done by default in case of failures
67
- * that can be retried.
68
- */
69
- export const defaultMaxAttempts = 2;
70
- /**
71
- * The default value for maximum number of summarization attempts that will be done for summarization failures where
72
- * submit fails and the failure can be retried.
73
- */
74
- export const defaultMaxAttemptsForSubmitFailures = 5;
59
+ const maxSummarizeAckWaitTime = 10 * 60 * 1000; // 10 minutes
75
60
 
76
61
  /**
77
62
  * An instance of RunningSummarizer manages the heuristics for summarizing.
@@ -19,25 +19,36 @@ import {
19
19
  wrapErrorAndLog,
20
20
  } from "@fluidframework/telemetry-utils/internal";
21
21
 
22
- import { ICancellableSummarizerController } from "./runWhileConnectedCoordinator.js";
23
- import { RunningSummarizer } from "./runningSummarizer.js";
24
- import { SummarizeHeuristicData } from "./summarizerHeuristics.js";
25
22
  import {
26
- EnqueueSummarizeResult,
27
23
  IConnectableRuntime,
28
24
  IEnqueueSummarizeOptions,
29
25
  IOnDemandSummarizeOptions,
30
26
  ISummarizeHeuristicData,
31
- ISummarizeResults,
32
27
  ISummarizer,
33
28
  ISummarizerInternalsProvider,
34
29
  ISummarizerRuntime,
35
30
  ISummarizingWarning,
36
31
  type IRetriableFailureError,
37
32
  type ISummaryConfiguration,
38
- } from "./summarizerTypes.js";
39
- import { SummaryCollection } from "./summaryCollection.js";
40
- import { SummarizeResultBuilder } from "./summaryGenerator.js";
33
+ } from "../summarizerTypes.js";
34
+ import { SummaryCollection } from "../summaryCollection.js";
35
+
36
+ import { ICancellableSummarizerController } from "./runWhileConnectedCoordinator.js";
37
+ import { RunningSummarizer } from "./runningSummarizer.js";
38
+ import { SummarizeHeuristicData } from "./summarizerHeuristics.js";
39
+ import { SummarizeResultBuilder } from "./summaryResultBuilder.js";
40
+ import type { EnqueueSummarizeResult, ISummarizeResults } from "./summaryResultTypes.js";
41
+
42
+ /**
43
+ * The maximum number of summarization attempts that will be done by default in case of failures
44
+ * that can be retried.
45
+ */
46
+ export const defaultMaxAttempts = 2;
47
+ /**
48
+ * The default value for maximum number of summarization attempts that will be done for summarization failures where
49
+ * submit fails and the failure can be retried.
50
+ */
51
+ export const defaultMaxAttemptsForSubmitFailures = 5;
41
52
 
42
53
  export class SummarizingWarning
43
54
  extends LoggingError
@@ -6,14 +6,14 @@
6
6
  import { Timer } from "@fluidframework/core-utils/internal";
7
7
  import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils/internal";
8
8
 
9
- import type { ISummaryConfigurationHeuristics } from "./summarizerTypes.js";
9
+ import type { ISummaryConfigurationHeuristics } from "../summarizerTypes.js";
10
10
  import {
11
11
  ISummarizeAttempt,
12
12
  ISummarizeHeuristicData,
13
13
  ISummarizeHeuristicRunner,
14
14
  ISummaryHeuristicStrategy,
15
- } from "./summarizerTypes.js";
16
- import { SummarizeReason } from "./summaryGenerator.js";
15
+ } from "../summarizerTypes.js";
16
+ import { SummarizeReason } from "../summarizerUtils.js";
17
17
 
18
18
  /**
19
19
  * Simple implementation of class for tracking summarize heuristic data.
@@ -3,206 +3,40 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ITelemetryBaseProperties } from "@fluidframework/core-interfaces";
7
- import {
8
- assert,
9
- Deferred,
10
- IPromiseTimer,
11
- IPromiseTimerResult,
12
- Timer,
13
- } from "@fluidframework/core-utils/internal";
6
+ import { assert, IPromiseTimer, Timer } from "@fluidframework/core-utils/internal";
14
7
  import { DriverErrorTypes, MessageType } from "@fluidframework/driver-definitions/internal";
15
8
  import { getRetryDelaySecondsFromError } from "@fluidframework/driver-utils/internal";
16
9
  import {
17
10
  isFluidError,
18
11
  ITelemetryLoggerExt,
19
- LoggingError,
20
12
  PerformanceEvent,
21
13
  wrapError,
22
14
  } from "@fluidframework/telemetry-utils/internal";
23
15
 
24
- import {
25
- IAckSummaryResult,
26
- IBroadcastSummaryResult,
27
- INackSummaryResult,
16
+ import type {
28
17
  IRefreshSummaryAckOptions,
18
+ IRetriableFailureError,
29
19
  ISubmitSummaryOptions,
30
20
  ISummarizeHeuristicData,
31
- ISummarizeResults,
32
- ISummaryCancellationToken,
33
21
  SubmitSummaryFailureData,
34
22
  SubmitSummaryResult,
35
- SummarizeResultPart,
36
23
  SummaryGeneratorTelemetry,
37
- type IRetriableFailureError,
38
- } from "./summarizerTypes.js";
39
- import { IClientSummaryWatcher } from "./summaryCollection.js";
24
+ } from "../summarizerTypes.js";
25
+ import {
26
+ RetriableSummaryError,
27
+ getFailMessage,
28
+ raceTimer,
29
+ type SummarizeErrorCode,
30
+ } from "../summarizerUtils.js";
31
+ import type { IClientSummaryWatcher } from "../summaryCollection.js";
40
32
 
41
- export type raceTimerResult<T> =
42
- | { result: "done"; value: T }
43
- | { result: IPromiseTimerResult["timerResult"] }
44
- | { result: "cancelled" };
45
-
46
- /**
47
- * Wait for a promise or PromiseTimer to elapse.
48
- */
49
- export async function raceTimer<T>(
50
- promise: Promise<T>,
51
- timer: Promise<IPromiseTimerResult>,
52
-
53
- cancellationToken?: ISummaryCancellationToken,
54
- ): Promise<raceTimerResult<T>> {
55
- const promises: Promise<raceTimerResult<T>>[] = [
56
- promise.then((value) => ({ result: "done", value }) as const),
57
- timer.then(({ timerResult: result }) => ({ result }) as const),
58
- ];
59
- if (cancellationToken !== undefined) {
60
- promises.push(
61
- cancellationToken.waitCancelled.then(() => ({ result: "cancelled" }) as const),
62
- );
63
- }
64
- return Promise.race(promises);
65
- }
33
+ import { SummarizeResultBuilder } from "./summaryResultBuilder.js";
34
+ import { type INackSummaryResult, type ISummarizeResults } from "./summaryResultTypes.js";
66
35
 
67
36
  // Send some telemetry if generate summary takes too long
68
37
  const maxSummarizeTimeoutTime = 20000; // 20 sec
69
38
  const maxSummarizeTimeoutCount = 5; // Double and resend 5 times
70
39
 
71
- export type SummarizeReason =
72
- /**
73
- * Attempt to summarize after idle timeout has elapsed.
74
- * Idle timer restarts whenever an op is received. So this
75
- * triggers only after some amount of time has passed with
76
- * no ops being received.
77
- */
78
- | "idle"
79
- /**
80
- * Attempt to summarize after a maximum time since last
81
- * successful summary has passed. This measures time since
82
- * last summary ack op was processed.
83
- */
84
- | "maxTime"
85
- /**
86
- * Attempt to summarize after a maximum number of ops have
87
- * passed since the last successful summary. This compares
88
- * op sequence numbers with the reference sequence number
89
- * of the summarize op corresponding to the last summary
90
- * ack op.
91
- */
92
- | "maxOps"
93
- /**
94
- * Special case to attempt to summarize one last time before the
95
- * summarizer client closes itself. This is to prevent cases where
96
- * the summarizer client never gets a chance to summarize, because
97
- * there are too many outstanding ops and/or parent client cannot
98
- * stay connected long enough for summarizer client to catch up.
99
- */
100
- | "lastSummary"
101
- /**
102
- * On-demand summary requested with specified reason.
103
- */
104
- | `onDemand;${string}`
105
- /**
106
- * Enqueue summarize attempt with specified reason.
107
- */
108
- | `enqueue;${string}`;
109
-
110
- const summarizeErrors = {
111
- /**
112
- * Error encountered while generating the summary tree, uploading
113
- * it to storage, or submitting the op. It could be a result of
114
- * the client becoming disconnected while generating or an actual error.
115
- */
116
- submitSummaryFailure: "Error while generating, uploading, or submitting summary",
117
- /**
118
- * The summaryAckWaitTimeout time has elapsed before receiving the summarize op
119
- * sent by this summarize attempt. It is expected to be broadcast quickly.
120
- */
121
- summaryOpWaitTimeout: "Timeout while waiting for summarize op broadcast",
122
- /**
123
- * The summaryAckWaitTimeout time has elapsed before receiving either a
124
- * summaryAck or summaryNack op from the server in response to this
125
- * summarize attempt. It is expected that the server should respond.
126
- */
127
- summaryAckWaitTimeout: "Timeout while waiting for summaryAck/summaryNack op",
128
- /**
129
- * The server responded with a summaryNack op, thus rejecting this
130
- * summarize attempt.
131
- */
132
- summaryNack: "Server rejected summary via summaryNack op",
133
-
134
- disconnect: "Summary cancelled due to summarizer or main client disconnect",
135
- } as const;
136
-
137
- export type SummarizeErrorCode = keyof typeof summarizeErrors;
138
-
139
- // Helper functions to report failures and return.
140
- export const getFailMessage = (errorCode: SummarizeErrorCode): string =>
141
- `${errorCode}: ${summarizeErrors[errorCode]}`;
142
-
143
- export class SummarizeResultBuilder {
144
- public readonly summarySubmitted = new Deferred<
145
- SummarizeResultPart<SubmitSummaryResult, SubmitSummaryFailureData>
146
- >();
147
- public readonly summaryOpBroadcasted = new Deferred<
148
- SummarizeResultPart<IBroadcastSummaryResult>
149
- >();
150
- public readonly receivedSummaryAckOrNack = new Deferred<
151
- SummarizeResultPart<IAckSummaryResult, INackSummaryResult>
152
- >();
153
-
154
- /**
155
- * Fails one or more of the three results as per the passed params.
156
- * If submit fails, all three results fail.
157
- * If op broadcast fails, only op broadcast result and ack nack result fails.
158
- * If ack nack fails, only ack nack result fails.
159
- */
160
- public fail(
161
- message: string,
162
- error: IRetriableFailureError,
163
- submitFailureResult?: SubmitSummaryFailureData,
164
- nackSummaryResult?: INackSummaryResult,
165
- ): void {
166
- assert(
167
- !this.receivedSummaryAckOrNack.isCompleted,
168
- 0x25e /* "no reason to call fail if all promises have been completed" */,
169
- );
170
-
171
- const result: SummarizeResultPart<undefined> = {
172
- success: false,
173
- message,
174
- data: undefined,
175
- error,
176
- } as const;
177
-
178
- // Note that if any of these are already resolved, it will be a no-op. For example, if ack nack failed but
179
- // submit summary and op broadcast has already been resolved as passed, only ack nack result will get modified.
180
- this.summarySubmitted.resolve({ ...result, data: submitFailureResult });
181
- this.summaryOpBroadcasted.resolve(result);
182
- this.receivedSummaryAckOrNack.resolve({ ...result, data: nackSummaryResult });
183
- }
184
- public build(): ISummarizeResults {
185
- return {
186
- summarySubmitted: this.summarySubmitted.promise,
187
- summaryOpBroadcasted: this.summaryOpBroadcasted.promise,
188
- receivedSummaryAckOrNack: this.receivedSummaryAckOrNack.promise,
189
- } as const;
190
- }
191
- }
192
-
193
- /**
194
- * Errors type for errors hit during summary that may be retriable.
195
- */
196
- export class RetriableSummaryError extends LoggingError implements IRetriableFailureError {
197
- constructor(
198
- message: string,
199
- public readonly retryAfterSeconds?: number,
200
- props?: ITelemetryBaseProperties,
201
- ) {
202
- super(message, props);
203
- }
204
- }
205
-
206
40
  /**
207
41
  * This class generates and tracks a summary attempt.
208
42
  */
@@ -0,0 +1,70 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { assert, Deferred } from "@fluidframework/core-utils/internal";
7
+
8
+ import {
9
+ SubmitSummaryFailureData,
10
+ SubmitSummaryResult,
11
+ SummarizeResultPart,
12
+ type IRetriableFailureError,
13
+ } from "../index.js";
14
+
15
+ import type {
16
+ IAckSummaryResult,
17
+ IBroadcastSummaryResult,
18
+ INackSummaryResult,
19
+ ISummarizeResults,
20
+ } from "./summaryResultTypes.js";
21
+
22
+ export class SummarizeResultBuilder {
23
+ public readonly summarySubmitted = new Deferred<
24
+ SummarizeResultPart<SubmitSummaryResult, SubmitSummaryFailureData>
25
+ >();
26
+ public readonly summaryOpBroadcasted = new Deferred<
27
+ SummarizeResultPart<IBroadcastSummaryResult>
28
+ >();
29
+ public readonly receivedSummaryAckOrNack = new Deferred<
30
+ SummarizeResultPart<IAckSummaryResult, INackSummaryResult>
31
+ >();
32
+
33
+ /**
34
+ * Fails one or more of the three results as per the passed params.
35
+ * If submit fails, all three results fail.
36
+ * If op broadcast fails, only op broadcast result and ack nack result fails.
37
+ * If ack nack fails, only ack nack result fails.
38
+ */
39
+ public fail(
40
+ message: string,
41
+ error: IRetriableFailureError,
42
+ submitFailureResult?: SubmitSummaryFailureData,
43
+ nackSummaryResult?: INackSummaryResult,
44
+ ): void {
45
+ assert(
46
+ !this.receivedSummaryAckOrNack.isCompleted,
47
+ 0x25e /* "no reason to call fail if all promises have been completed" */,
48
+ );
49
+
50
+ const result: SummarizeResultPart<undefined> = {
51
+ success: false,
52
+ message,
53
+ data: undefined,
54
+ error,
55
+ } as const;
56
+
57
+ // Note that if any of these are already resolved, it will be a no-op. For example, if ack nack failed but
58
+ // submit summary and op broadcast has already been resolved as passed, only ack nack result will get modified.
59
+ this.summarySubmitted.resolve({ ...result, data: submitFailureResult });
60
+ this.summaryOpBroadcasted.resolve(result);
61
+ this.receivedSummaryAckOrNack.resolve({ ...result, data: nackSummaryResult });
62
+ }
63
+ public build(): ISummarizeResults {
64
+ return {
65
+ summarySubmitted: this.summarySubmitted.promise,
66
+ summaryOpBroadcasted: this.summaryOpBroadcasted.promise,
67
+ receivedSummaryAckOrNack: this.receivedSummaryAckOrNack.promise,
68
+ } as const;
69
+ }
70
+ }
@@ -0,0 +1,100 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import type {
7
+ SubmitSummaryFailureData,
8
+ SubmitSummaryResult,
9
+ SummarizeResultPart,
10
+ } from "../summarizerTypes.js";
11
+ import type {
12
+ ISummaryAckMessage,
13
+ ISummaryNackMessage,
14
+ ISummaryOpMessage,
15
+ } from "../summaryCollection.js";
16
+
17
+ /**
18
+ * @legacy
19
+ * @alpha
20
+ */
21
+ export interface IBroadcastSummaryResult {
22
+ readonly summarizeOp: ISummaryOpMessage;
23
+ readonly broadcastDuration: number;
24
+ }
25
+
26
+ /**
27
+ * @legacy
28
+ * @alpha
29
+ */
30
+ export interface IAckSummaryResult {
31
+ readonly summaryAckOp: ISummaryAckMessage;
32
+ readonly ackNackDuration: number;
33
+ }
34
+
35
+ /**
36
+ * @legacy
37
+ * @alpha
38
+ */
39
+ export interface INackSummaryResult {
40
+ readonly summaryNackOp: ISummaryNackMessage;
41
+ readonly ackNackDuration: number;
42
+ }
43
+
44
+ /**
45
+ * @legacy
46
+ * @alpha
47
+ */
48
+ export interface ISummarizeResults {
49
+ /**
50
+ * Resolves when we generate, upload, and submit the summary.
51
+ */
52
+ readonly summarySubmitted: Promise<
53
+ SummarizeResultPart<SubmitSummaryResult, SubmitSummaryFailureData>
54
+ >;
55
+ /**
56
+ * Resolves when we observe our summarize op broadcast.
57
+ */
58
+ readonly summaryOpBroadcasted: Promise<SummarizeResultPart<IBroadcastSummaryResult>>;
59
+ /**
60
+ * Resolves when we receive a summaryAck or summaryNack.
61
+ */
62
+ readonly receivedSummaryAckOrNack: Promise<
63
+ SummarizeResultPart<IAckSummaryResult, INackSummaryResult>
64
+ >;
65
+ }
66
+
67
+ /**
68
+ * @legacy
69
+ * @alpha
70
+ */
71
+ export type EnqueueSummarizeResult =
72
+ | (ISummarizeResults & {
73
+ /**
74
+ * Indicates that another summarize attempt is not already enqueued,
75
+ * and this attempt has been enqueued.
76
+ */
77
+ readonly alreadyEnqueued?: undefined;
78
+ })
79
+ | (ISummarizeResults & {
80
+ /**
81
+ * Indicates that another summarize attempt was already enqueued.
82
+ */
83
+ readonly alreadyEnqueued: true;
84
+ /**
85
+ * Indicates that the other enqueued summarize attempt was abandoned,
86
+ * and this attempt has been enqueued enqueued.
87
+ */
88
+ readonly overridden: true;
89
+ })
90
+ | {
91
+ /**
92
+ * Indicates that another summarize attempt was already enqueued.
93
+ */
94
+ readonly alreadyEnqueued: true;
95
+ /**
96
+ * Indicates that the other enqueued summarize attempt remains enqueued,
97
+ * and this attempt has not been enqueued.
98
+ */
99
+ readonly overridden?: undefined;
100
+ };