@fluidframework/container-runtime 2.0.0-dev.4.4.0.162574 → 2.0.0-dev.5.3.2.178189

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 (367) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/dist/batchTracker.d.ts +4 -4
  3. package/dist/batchTracker.d.ts.map +1 -1
  4. package/dist/batchTracker.js +2 -2
  5. package/dist/batchTracker.js.map +1 -1
  6. package/dist/blobManager.d.ts +5 -2
  7. package/dist/blobManager.d.ts.map +1 -1
  8. package/dist/blobManager.js +53 -24
  9. package/dist/blobManager.js.map +1 -1
  10. package/dist/connectionTelemetry.d.ts +2 -2
  11. package/dist/connectionTelemetry.d.ts.map +1 -1
  12. package/dist/connectionTelemetry.js +8 -1
  13. package/dist/connectionTelemetry.js.map +1 -1
  14. package/dist/containerRuntime.d.ts +19 -7
  15. package/dist/containerRuntime.d.ts.map +1 -1
  16. package/dist/containerRuntime.js +98 -22
  17. package/dist/containerRuntime.js.map +1 -1
  18. package/dist/dataStore.d.ts +2 -2
  19. package/dist/dataStore.d.ts.map +1 -1
  20. package/dist/dataStore.js +1 -1
  21. package/dist/dataStore.js.map +1 -1
  22. package/dist/dataStoreContext.d.ts +3 -4
  23. package/dist/dataStoreContext.d.ts.map +1 -1
  24. package/dist/dataStoreContext.js +5 -5
  25. package/dist/dataStoreContext.js.map +1 -1
  26. package/dist/dataStoreContexts.d.ts +2 -1
  27. package/dist/dataStoreContexts.d.ts.map +1 -1
  28. package/dist/dataStoreContexts.js +2 -1
  29. package/dist/dataStoreContexts.js.map +1 -1
  30. package/dist/dataStores.d.ts +1 -1
  31. package/dist/dataStores.d.ts.map +1 -1
  32. package/dist/dataStores.js +2 -1
  33. package/dist/dataStores.js.map +1 -1
  34. package/dist/deltaScheduler.d.ts +2 -2
  35. package/dist/deltaScheduler.d.ts.map +1 -1
  36. package/dist/deltaScheduler.js +1 -1
  37. package/dist/deltaScheduler.js.map +1 -1
  38. package/dist/gc/garbageCollection.d.ts +2 -2
  39. package/dist/gc/garbageCollection.d.ts.map +1 -1
  40. package/dist/gc/garbageCollection.js +4 -3
  41. package/dist/gc/garbageCollection.js.map +1 -1
  42. package/dist/gc/gcDefinitions.d.ts +3 -4
  43. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  44. package/dist/gc/gcDefinitions.js.map +1 -1
  45. package/dist/gc/gcTelemetry.d.ts +5 -5
  46. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  47. package/dist/gc/gcTelemetry.js.map +1 -1
  48. package/dist/id-compressor/idCompressor.d.ts +2 -2
  49. package/dist/id-compressor/idCompressor.d.ts.map +1 -1
  50. package/dist/id-compressor/idCompressor.js.map +1 -1
  51. package/dist/id-compressor/uuidUtilities.d.ts +0 -2
  52. package/dist/id-compressor/uuidUtilities.d.ts.map +1 -1
  53. package/dist/id-compressor/uuidUtilities.js +1 -3
  54. package/dist/id-compressor/uuidUtilities.js.map +1 -1
  55. package/dist/index.d.ts +1 -1
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js.map +1 -1
  58. package/dist/metadata.d.ts +18 -0
  59. package/dist/metadata.d.ts.map +1 -0
  60. package/dist/metadata.js +7 -0
  61. package/dist/metadata.js.map +1 -0
  62. package/dist/opLifecycle/batchManager.d.ts +2 -1
  63. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  64. package/dist/opLifecycle/batchManager.js +5 -1
  65. package/dist/opLifecycle/batchManager.js.map +1 -1
  66. package/dist/opLifecycle/definitions.d.ts +13 -2
  67. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  68. package/dist/opLifecycle/definitions.js.map +1 -1
  69. package/dist/opLifecycle/index.d.ts +1 -1
  70. package/dist/opLifecycle/index.d.ts.map +1 -1
  71. package/dist/opLifecycle/index.js +2 -1
  72. package/dist/opLifecycle/index.js.map +1 -1
  73. package/dist/opLifecycle/opCompressor.d.ts +2 -2
  74. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  75. package/dist/opLifecycle/opCompressor.js +3 -6
  76. package/dist/opLifecycle/opCompressor.js.map +1 -1
  77. package/dist/opLifecycle/opDecompressor.d.ts +2 -2
  78. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  79. package/dist/opLifecycle/opDecompressor.js +14 -8
  80. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  81. package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
  82. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  83. package/dist/opLifecycle/opGroupingManager.js +6 -11
  84. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  85. package/dist/opLifecycle/opSplitter.d.ts +2 -2
  86. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  87. package/dist/opLifecycle/opSplitter.js +5 -3
  88. package/dist/opLifecycle/opSplitter.js.map +1 -1
  89. package/dist/opLifecycle/outbox.d.ts +35 -4
  90. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  91. package/dist/opLifecycle/outbox.js +135 -45
  92. package/dist/opLifecycle/outbox.js.map +1 -1
  93. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  94. package/dist/opLifecycle/remoteMessageProcessor.js +3 -1
  95. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  96. package/dist/packageVersion.d.ts +1 -1
  97. package/dist/packageVersion.js +1 -1
  98. package/dist/packageVersion.js.map +1 -1
  99. package/dist/pendingStateManager.d.ts +24 -15
  100. package/dist/pendingStateManager.d.ts.map +1 -1
  101. package/dist/pendingStateManager.js +67 -72
  102. package/dist/pendingStateManager.js.map +1 -1
  103. package/dist/scheduleManager.d.ts +2 -2
  104. package/dist/scheduleManager.d.ts.map +1 -1
  105. package/dist/scheduleManager.js +8 -2
  106. package/dist/scheduleManager.js.map +1 -1
  107. package/dist/summary/index.d.ts +2 -2
  108. package/dist/summary/index.d.ts.map +1 -1
  109. package/dist/summary/index.js +2 -1
  110. package/dist/summary/index.js.map +1 -1
  111. package/dist/summary/orderedClientElection.d.ts +4 -3
  112. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  113. package/dist/summary/orderedClientElection.js +3 -18
  114. package/dist/summary/orderedClientElection.js.map +1 -1
  115. package/dist/summary/runningSummarizer.d.ts +4 -3
  116. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  117. package/dist/summary/runningSummarizer.js +5 -6
  118. package/dist/summary/runningSummarizer.js.map +1 -1
  119. package/dist/summary/summarizer.d.ts +2 -3
  120. package/dist/summary/summarizer.d.ts.map +1 -1
  121. package/dist/summary/summarizer.js +2 -3
  122. package/dist/summary/summarizer.js.map +1 -1
  123. package/dist/summary/summarizerClientElection.d.ts +3 -2
  124. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  125. package/dist/summary/summarizerClientElection.js.map +1 -1
  126. package/dist/summary/summarizerHeuristics.d.ts +2 -2
  127. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  128. package/dist/summary/summarizerHeuristics.js.map +1 -1
  129. package/dist/summary/summarizerNode/index.d.ts +1 -1
  130. package/dist/summary/summarizerNode/index.d.ts.map +1 -1
  131. package/dist/summary/summarizerNode/index.js.map +1 -1
  132. package/dist/summary/summarizerNode/summarizerNode.d.ts +41 -14
  133. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  134. package/dist/summary/summarizerNode/summarizerNode.js +91 -23
  135. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  136. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +24 -4
  137. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  138. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  139. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +23 -8
  140. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  141. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +60 -23
  142. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  143. package/dist/summary/summarizerTypes.d.ts +16 -9
  144. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  145. package/dist/summary/summarizerTypes.js.map +1 -1
  146. package/dist/summary/summaryCollection.d.ts +4 -2
  147. package/dist/summary/summaryCollection.d.ts.map +1 -1
  148. package/dist/summary/summaryCollection.js +4 -0
  149. package/dist/summary/summaryCollection.js.map +1 -1
  150. package/dist/summary/summaryFormat.d.ts +1 -0
  151. package/dist/summary/summaryFormat.d.ts.map +1 -1
  152. package/dist/summary/summaryFormat.js +2 -1
  153. package/dist/summary/summaryFormat.js.map +1 -1
  154. package/dist/summary/summaryGenerator.d.ts +14 -5
  155. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  156. package/dist/summary/summaryGenerator.js +23 -9
  157. package/dist/summary/summaryGenerator.js.map +1 -1
  158. package/dist/summary/summaryManager.d.ts +4 -2
  159. package/dist/summary/summaryManager.d.ts.map +1 -1
  160. package/dist/summary/summaryManager.js.map +1 -1
  161. package/dist/tsdoc-metadata.json +11 -0
  162. package/lib/batchTracker.d.ts +4 -4
  163. package/lib/batchTracker.d.ts.map +1 -1
  164. package/lib/batchTracker.js +2 -2
  165. package/lib/batchTracker.js.map +1 -1
  166. package/lib/blobManager.d.ts +5 -2
  167. package/lib/blobManager.d.ts.map +1 -1
  168. package/lib/blobManager.js +53 -24
  169. package/lib/blobManager.js.map +1 -1
  170. package/lib/connectionTelemetry.d.ts +2 -2
  171. package/lib/connectionTelemetry.d.ts.map +1 -1
  172. package/lib/connectionTelemetry.js +8 -1
  173. package/lib/connectionTelemetry.js.map +1 -1
  174. package/lib/containerRuntime.d.ts +19 -7
  175. package/lib/containerRuntime.d.ts.map +1 -1
  176. package/lib/containerRuntime.js +101 -25
  177. package/lib/containerRuntime.js.map +1 -1
  178. package/lib/dataStore.d.ts +2 -2
  179. package/lib/dataStore.d.ts.map +1 -1
  180. package/lib/dataStore.js +1 -1
  181. package/lib/dataStore.js.map +1 -1
  182. package/lib/dataStoreContext.d.ts +3 -4
  183. package/lib/dataStoreContext.d.ts.map +1 -1
  184. package/lib/dataStoreContext.js +5 -5
  185. package/lib/dataStoreContext.js.map +1 -1
  186. package/lib/dataStoreContexts.d.ts +2 -1
  187. package/lib/dataStoreContexts.d.ts.map +1 -1
  188. package/lib/dataStoreContexts.js +2 -1
  189. package/lib/dataStoreContexts.js.map +1 -1
  190. package/lib/dataStores.d.ts +1 -1
  191. package/lib/dataStores.d.ts.map +1 -1
  192. package/lib/dataStores.js +2 -1
  193. package/lib/dataStores.js.map +1 -1
  194. package/lib/deltaScheduler.d.ts +2 -2
  195. package/lib/deltaScheduler.d.ts.map +1 -1
  196. package/lib/deltaScheduler.js +1 -1
  197. package/lib/deltaScheduler.js.map +1 -1
  198. package/lib/gc/garbageCollection.d.ts +2 -2
  199. package/lib/gc/garbageCollection.d.ts.map +1 -1
  200. package/lib/gc/garbageCollection.js +2 -1
  201. package/lib/gc/garbageCollection.js.map +1 -1
  202. package/lib/gc/gcDefinitions.d.ts +3 -4
  203. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  204. package/lib/gc/gcDefinitions.js.map +1 -1
  205. package/lib/gc/gcTelemetry.d.ts +5 -5
  206. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  207. package/lib/gc/gcTelemetry.js +1 -1
  208. package/lib/gc/gcTelemetry.js.map +1 -1
  209. package/lib/id-compressor/idCompressor.d.ts +2 -2
  210. package/lib/id-compressor/idCompressor.d.ts.map +1 -1
  211. package/lib/id-compressor/idCompressor.js.map +1 -1
  212. package/lib/id-compressor/uuidUtilities.d.ts +0 -2
  213. package/lib/id-compressor/uuidUtilities.d.ts.map +1 -1
  214. package/lib/id-compressor/uuidUtilities.js +1 -3
  215. package/lib/id-compressor/uuidUtilities.js.map +1 -1
  216. package/lib/index.d.ts +1 -1
  217. package/lib/index.d.ts.map +1 -1
  218. package/lib/index.js.map +1 -1
  219. package/lib/metadata.d.ts +18 -0
  220. package/lib/metadata.d.ts.map +1 -0
  221. package/lib/metadata.js +6 -0
  222. package/lib/metadata.js.map +1 -0
  223. package/lib/opLifecycle/batchManager.d.ts +2 -1
  224. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  225. package/lib/opLifecycle/batchManager.js +5 -1
  226. package/lib/opLifecycle/batchManager.js.map +1 -1
  227. package/lib/opLifecycle/definitions.d.ts +13 -2
  228. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  229. package/lib/opLifecycle/definitions.js.map +1 -1
  230. package/lib/opLifecycle/index.d.ts +1 -1
  231. package/lib/opLifecycle/index.d.ts.map +1 -1
  232. package/lib/opLifecycle/index.js +1 -1
  233. package/lib/opLifecycle/index.js.map +1 -1
  234. package/lib/opLifecycle/opCompressor.d.ts +2 -2
  235. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  236. package/lib/opLifecycle/opCompressor.js +3 -6
  237. package/lib/opLifecycle/opCompressor.js.map +1 -1
  238. package/lib/opLifecycle/opDecompressor.d.ts +2 -2
  239. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  240. package/lib/opLifecycle/opDecompressor.js +14 -8
  241. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  242. package/lib/opLifecycle/opGroupingManager.d.ts +1 -1
  243. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
  244. package/lib/opLifecycle/opGroupingManager.js +6 -11
  245. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  246. package/lib/opLifecycle/opSplitter.d.ts +2 -2
  247. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  248. package/lib/opLifecycle/opSplitter.js +5 -3
  249. package/lib/opLifecycle/opSplitter.js.map +1 -1
  250. package/lib/opLifecycle/outbox.d.ts +35 -4
  251. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  252. package/lib/opLifecycle/outbox.js +133 -44
  253. package/lib/opLifecycle/outbox.js.map +1 -1
  254. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  255. package/lib/opLifecycle/remoteMessageProcessor.js +3 -1
  256. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  257. package/lib/packageVersion.d.ts +1 -1
  258. package/lib/packageVersion.js +1 -1
  259. package/lib/packageVersion.js.map +1 -1
  260. package/lib/pendingStateManager.d.ts +24 -15
  261. package/lib/pendingStateManager.d.ts.map +1 -1
  262. package/lib/pendingStateManager.js +67 -72
  263. package/lib/pendingStateManager.js.map +1 -1
  264. package/lib/scheduleManager.d.ts +2 -2
  265. package/lib/scheduleManager.d.ts.map +1 -1
  266. package/lib/scheduleManager.js +8 -2
  267. package/lib/scheduleManager.js.map +1 -1
  268. package/lib/summary/index.d.ts +2 -2
  269. package/lib/summary/index.d.ts.map +1 -1
  270. package/lib/summary/index.js +1 -1
  271. package/lib/summary/index.js.map +1 -1
  272. package/lib/summary/orderedClientElection.d.ts +4 -3
  273. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  274. package/lib/summary/orderedClientElection.js +3 -18
  275. package/lib/summary/orderedClientElection.js.map +1 -1
  276. package/lib/summary/runningSummarizer.d.ts +4 -3
  277. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  278. package/lib/summary/runningSummarizer.js +5 -6
  279. package/lib/summary/runningSummarizer.js.map +1 -1
  280. package/lib/summary/summarizer.d.ts +2 -3
  281. package/lib/summary/summarizer.d.ts.map +1 -1
  282. package/lib/summary/summarizer.js +2 -3
  283. package/lib/summary/summarizer.js.map +1 -1
  284. package/lib/summary/summarizerClientElection.d.ts +3 -2
  285. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  286. package/lib/summary/summarizerClientElection.js.map +1 -1
  287. package/lib/summary/summarizerHeuristics.d.ts +2 -2
  288. package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
  289. package/lib/summary/summarizerHeuristics.js.map +1 -1
  290. package/lib/summary/summarizerNode/index.d.ts +1 -1
  291. package/lib/summary/summarizerNode/index.d.ts.map +1 -1
  292. package/lib/summary/summarizerNode/index.js.map +1 -1
  293. package/lib/summary/summarizerNode/summarizerNode.d.ts +41 -14
  294. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  295. package/lib/summary/summarizerNode/summarizerNode.js +91 -23
  296. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  297. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +24 -4
  298. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  299. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  300. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +23 -8
  301. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  302. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +59 -22
  303. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  304. package/lib/summary/summarizerTypes.d.ts +16 -9
  305. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  306. package/lib/summary/summarizerTypes.js.map +1 -1
  307. package/lib/summary/summaryCollection.d.ts +4 -2
  308. package/lib/summary/summaryCollection.d.ts.map +1 -1
  309. package/lib/summary/summaryCollection.js +4 -0
  310. package/lib/summary/summaryCollection.js.map +1 -1
  311. package/lib/summary/summaryFormat.d.ts +1 -0
  312. package/lib/summary/summaryFormat.d.ts.map +1 -1
  313. package/lib/summary/summaryFormat.js +2 -1
  314. package/lib/summary/summaryFormat.js.map +1 -1
  315. package/lib/summary/summaryGenerator.d.ts +14 -5
  316. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  317. package/lib/summary/summaryGenerator.js +21 -8
  318. package/lib/summary/summaryGenerator.js.map +1 -1
  319. package/lib/summary/summaryManager.d.ts +4 -2
  320. package/lib/summary/summaryManager.d.ts.map +1 -1
  321. package/lib/summary/summaryManager.js +1 -1
  322. package/lib/summary/summaryManager.js.map +1 -1
  323. package/package.json +25 -41
  324. package/src/batchTracker.ts +5 -6
  325. package/src/blobManager.ts +70 -29
  326. package/src/connectionTelemetry.ts +14 -6
  327. package/src/containerRuntime.ts +124 -38
  328. package/src/dataStore.ts +3 -4
  329. package/src/dataStoreContext.ts +12 -9
  330. package/src/dataStoreContexts.ts +6 -8
  331. package/src/dataStores.ts +8 -3
  332. package/src/deltaScheduler.ts +2 -3
  333. package/src/gc/garbageCollection.ts +7 -6
  334. package/src/gc/gcDefinitions.ts +3 -4
  335. package/src/gc/gcTelemetry.ts +9 -5
  336. package/src/id-compressor/idCompressor.ts +2 -2
  337. package/src/id-compressor/uuidUtilities.ts +1 -4
  338. package/src/index.ts +2 -0
  339. package/src/metadata.ts +19 -0
  340. package/src/opLifecycle/README.md +20 -0
  341. package/src/opLifecycle/batchManager.ts +9 -1
  342. package/src/opLifecycle/definitions.ts +13 -2
  343. package/src/opLifecycle/index.ts +1 -1
  344. package/src/opLifecycle/opCompressor.ts +4 -8
  345. package/src/opLifecycle/opDecompressor.ts +43 -16
  346. package/src/opLifecycle/opGroupingManager.ts +19 -13
  347. package/src/opLifecycle/opSplitter.ts +7 -6
  348. package/src/opLifecycle/outbox.ts +172 -57
  349. package/src/opLifecycle/remoteMessageProcessor.ts +5 -1
  350. package/src/packageVersion.ts +1 -1
  351. package/src/pendingStateManager.ts +113 -129
  352. package/src/scheduleManager.ts +18 -10
  353. package/src/summary/index.ts +3 -1
  354. package/src/summary/orderedClientElection.ts +7 -20
  355. package/src/summary/runningSummarizer.ts +11 -10
  356. package/src/summary/summarizer.ts +8 -8
  357. package/src/summary/summarizerClientElection.ts +3 -2
  358. package/src/summary/summarizerHeuristics.ts +2 -2
  359. package/src/summary/summarizerNode/index.ts +1 -0
  360. package/src/summary/summarizerNode/summarizerNode.ts +121 -38
  361. package/src/summary/summarizerNode/summarizerNodeUtils.ts +27 -4
  362. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +73 -27
  363. package/src/summary/summarizerTypes.ts +19 -14
  364. package/src/summary/summaryCollection.ts +10 -4
  365. package/src/summary/summaryFormat.ts +5 -1
  366. package/src/summary/summaryGenerator.ts +38 -11
  367. package/src/summary/summaryManager.ts +9 -9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/container-runtime",
3
- "version": "2.0.0-dev.4.4.0.162574",
3
+ "version": "2.0.0-dev.5.3.2.178189",
4
4
  "description": "Fluid container runtime",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -37,19 +37,18 @@
37
37
  "dependencies": {
38
38
  "@fluidframework/common-definitions": "^0.20.1",
39
39
  "@fluidframework/common-utils": "^1.1.1",
40
- "@fluidframework/container-definitions": "2.0.0-dev.4.4.0.162574",
41
- "@fluidframework/container-runtime-definitions": "2.0.0-dev.4.4.0.162574",
42
- "@fluidframework/container-utils": "2.0.0-dev.4.4.0.162574",
43
- "@fluidframework/core-interfaces": "2.0.0-dev.4.4.0.162574",
44
- "@fluidframework/datastore": "2.0.0-dev.4.4.0.162574",
45
- "@fluidframework/driver-definitions": "2.0.0-dev.4.4.0.162574",
46
- "@fluidframework/driver-utils": "2.0.0-dev.4.4.0.162574",
47
- "@fluidframework/garbage-collector": "2.0.0-dev.4.4.0.162574",
48
- "@fluidframework/protocol-base": "^0.1039.1000",
40
+ "@fluidframework/container-definitions": "2.0.0-dev.5.3.2.178189",
41
+ "@fluidframework/container-runtime-definitions": "2.0.0-dev.5.3.2.178189",
42
+ "@fluidframework/container-utils": "2.0.0-dev.5.3.2.178189",
43
+ "@fluidframework/core-interfaces": "2.0.0-dev.5.3.2.178189",
44
+ "@fluidframework/core-utils": "2.0.0-dev.5.3.2.178189",
45
+ "@fluidframework/datastore": "2.0.0-dev.5.3.2.178189",
46
+ "@fluidframework/driver-definitions": "2.0.0-dev.5.3.2.178189",
47
+ "@fluidframework/driver-utils": "2.0.0-dev.5.3.2.178189",
49
48
  "@fluidframework/protocol-definitions": "^1.1.0",
50
- "@fluidframework/runtime-definitions": "2.0.0-dev.4.4.0.162574",
51
- "@fluidframework/runtime-utils": "2.0.0-dev.4.4.0.162574",
52
- "@fluidframework/telemetry-utils": "2.0.0-dev.4.4.0.162574",
49
+ "@fluidframework/runtime-definitions": "2.0.0-dev.5.3.2.178189",
50
+ "@fluidframework/runtime-utils": "2.0.0-dev.5.3.2.178189",
51
+ "@fluidframework/telemetry-utils": "2.0.0-dev.5.3.2.178189",
53
52
  "double-ended-queue": "^2.1.0-0",
54
53
  "events": "^3.1.0",
55
54
  "lz4js": "^0.2.0",
@@ -57,15 +56,15 @@
57
56
  "uuid": "^8.3.1"
58
57
  },
59
58
  "devDependencies": {
60
- "@fluid-internal/stochastic-test-utils": "2.0.0-dev.4.4.0.162574",
61
- "@fluid-tools/benchmark": "^0.46.0",
62
- "@fluid-tools/build-cli": "^0.17.0",
63
- "@fluidframework/build-common": "^1.1.0",
64
- "@fluidframework/build-tools": "^0.17.0",
65
- "@fluidframework/container-runtime-previous": "npm:@fluidframework/container-runtime@2.0.0-internal.4.1.0",
59
+ "@fluid-internal/stochastic-test-utils": "2.0.0-dev.5.3.2.178189",
60
+ "@fluid-tools/benchmark": "^0.48.0",
61
+ "@fluid-tools/build-cli": "^0.21.0",
62
+ "@fluidframework/build-common": "^1.2.0",
63
+ "@fluidframework/build-tools": "^0.21.0",
64
+ "@fluidframework/container-runtime-previous": "npm:@fluidframework/container-runtime@2.0.0-internal.5.2.0",
66
65
  "@fluidframework/eslint-config-fluid": "^2.0.0",
67
- "@fluidframework/mocha-test-setup": "2.0.0-dev.4.4.0.162574",
68
- "@fluidframework/test-runtime-utils": "2.0.0-dev.4.4.0.162574",
66
+ "@fluidframework/mocha-test-setup": "2.0.0-dev.5.3.2.178189",
67
+ "@fluidframework/test-runtime-utils": "2.0.0-dev.5.3.2.178189",
69
68
  "@microsoft/api-extractor": "^7.34.4",
70
69
  "@types/double-ended-queue": "^2.1.0",
71
70
  "@types/events": "^3.0.0",
@@ -87,29 +86,14 @@
87
86
  "typescript": "~4.5.5"
88
87
  },
89
88
  "typeValidation": {
90
- "broken": {
91
- "EnumDeclaration_ContainerMessageType": {
92
- "backCompat": false
93
- },
94
- "ClassDeclaration_ContainerRuntime": {
95
- "forwardCompat": false
96
- },
97
- "InterfaceDeclaration_ContainerRuntimeMessage": {
98
- "backCompat": false
99
- },
100
- "InterfaceDeclaration_IChunkedOp": {
101
- "backCompat": false
102
- }
103
- }
89
+ "broken": {}
104
90
  },
105
91
  "scripts": {
106
- "build": "npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs",
107
- "build:commonjs": "npm run tsc && npm run typetests:gen && npm run build:test",
108
- "build:compile": "concurrently npm:build:commonjs npm:build:esnext",
92
+ "build": "fluid-build . --task build",
93
+ "build:commonjs": "fluid-build . --task commonjs",
94
+ "build:compile": "fluid-build . --task compile",
109
95
  "build:docs": "api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/",
110
96
  "build:esnext": "tsc --project ./tsconfig.esnext.json",
111
- "build:full": "npm run build",
112
- "build:full:compile": "npm run build:compile",
113
97
  "build:genver": "gen-version",
114
98
  "build:test": "tsc --project ./src/test/tsconfig.json",
115
99
  "ci:build:docs": "api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/",
@@ -129,6 +113,6 @@
129
113
  "tsc": "tsc",
130
114
  "tsc:watch": "tsc --watch",
131
115
  "typetests:gen": "fluid-type-test-generator",
132
- "typetests:prepare": "flub generate typetests --prepare --dir . --pin"
116
+ "typetests:prepare": "flub typetests --dir . --reset --previous --normalize"
133
117
  }
134
118
  }
@@ -4,20 +4,19 @@
4
4
  */
5
5
 
6
6
  import { EventEmitter } from "events";
7
- import { ITelemetryLogger } from "@fluidframework/common-definitions";
7
+ import { ITelemetryLoggerExt, ChildLogger } from "@fluidframework/telemetry-utils";
8
8
  import { assert, performance } from "@fluidframework/common-utils";
9
9
  import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
10
- import { ChildLogger } from "@fluidframework/telemetry-utils";
11
10
 
12
11
  export class BatchTracker {
13
- private readonly logger: ITelemetryLogger;
12
+ private readonly logger: ITelemetryLoggerExt;
14
13
  private startBatchSequenceNumber: number | undefined;
15
14
  private trackedBatchCount: number = 0;
16
15
  private batchProcessingStartTimeStamp: number | undefined;
17
16
 
18
17
  constructor(
19
18
  private readonly batchEventEmitter: EventEmitter,
20
- logger: ITelemetryLogger,
19
+ logger: ITelemetryLoggerExt,
21
20
  batchLengthThreshold: number,
22
21
  batchCountSamplingRate: number,
23
22
  dateTimeProvider: () => number = () => performance.now(),
@@ -72,13 +71,13 @@ export class BatchTracker {
72
71
  * Track batch sizes in terms of op counts and processing times
73
72
  *
74
73
  * @param batchEventEmitter - event emitter which tracks the lifecycle of batch operations
75
- * @param logger - See {@link @fluidframework/common-definitions#ITelemetryLogger}
74
+ * @param logger - See {@link @fluidframework/common-definitions#ITelemetryLoggerExt}
76
75
  * @param batchLengthThreshold - threshold for the length of a batch when to send an error event
77
76
  * @param batchCountSamplingRate - rate for batches for which to send an event with its characteristics
78
77
  */
79
78
  export const BindBatchTracker = (
80
79
  batchEventEmitter: EventEmitter,
81
- logger: ITelemetryLogger,
80
+ logger: ITelemetryLoggerExt,
82
81
  batchLengthThreshold: number = 1000,
83
82
  batchCountSamplingRate: number = 1000,
84
83
  ) => new BatchTracker(batchEventEmitter, logger, batchLengthThreshold, batchCountSamplingRate);
@@ -45,6 +45,7 @@ import { ContainerRuntime, TombstoneResponseHeaderKey } from "./containerRuntime
45
45
  import { sendGCUnexpectedUsageEvent, sweepAttachmentBlobsKey, throwOnTombstoneLoadKey } from "./gc";
46
46
  import { Throttler, formExponentialFn, IThrottler } from "./throttler";
47
47
  import { summarizerClientType } from "./summary";
48
+ import { IBlobMetadata } from "./metadata";
48
49
 
49
50
  /**
50
51
  * This class represents blob (long string)
@@ -61,7 +62,7 @@ export class BlobHandle implements IFluidHandle<ArrayBufferLike> {
61
62
  }
62
63
 
63
64
  public get isAttached(): boolean {
64
- return this.attached;
65
+ return this.routeContext.isAttached && this.attached;
65
66
  }
66
67
 
67
68
  public readonly absolutePath: string;
@@ -70,12 +71,16 @@ export class BlobHandle implements IFluidHandle<ArrayBufferLike> {
70
71
  public readonly path: string,
71
72
  public readonly routeContext: IFluidHandleContext,
72
73
  public get: () => Promise<any>,
74
+ private readonly onAttachGraph?: () => void,
73
75
  ) {
74
76
  this.absolutePath = generateHandleContextPath(path, this.routeContext);
75
77
  }
76
78
 
77
79
  public attachGraph() {
78
- this.attached = true;
80
+ if (!this.attached) {
81
+ this.attached = true;
82
+ this.onAttachGraph?.();
83
+ }
79
84
  }
80
85
 
81
86
  public bind(handle: IFluidHandle) {
@@ -132,14 +137,22 @@ interface PendingBlob {
132
137
  blob: ArrayBufferLike;
133
138
  status: PendingBlobStatus;
134
139
  storageId?: string;
135
- handleP: Deferred<IFluidHandle<ArrayBufferLike>>;
140
+ handleP: Deferred<BlobHandle>;
136
141
  uploadP?: Promise<ICreateBlobResponse>;
137
142
  uploadTime?: number;
138
143
  minTTLInSeconds?: number;
144
+ attached?: boolean;
145
+ acked?: boolean;
139
146
  }
140
147
 
141
148
  export interface IPendingBlobs {
142
- [id: string]: { blob: string; uploadTime?: number; minTTLInSeconds?: number };
149
+ [id: string]: {
150
+ blob: string;
151
+ uploadTime?: number;
152
+ minTTLInSeconds?: number;
153
+ attached?: boolean;
154
+ acked?: boolean;
155
+ };
143
156
  }
144
157
 
145
158
  export interface IBlobManagerEvents {
@@ -227,11 +240,14 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
227
240
  this.runtime.clientDetails.type !== summarizerClientType;
228
241
 
229
242
  this.runtime.on("disconnected", () => this.onDisconnected());
243
+
230
244
  this.redirectTable = this.load(snapshot);
231
245
 
232
246
  // Begin uploading stashed blobs from previous container instance
233
247
  Object.entries(stashedBlobs).forEach(([localId, entry]) => {
234
248
  const blob = stringToBuffer(entry.blob, "base64");
249
+ const attached = entry.attached;
250
+ const acked = entry.acked;
235
251
  if (entry.minTTLInSeconds && entry.uploadTime) {
236
252
  const timeLapseSinceLocalUpload = (Date.now() - entry.uploadTime) / 1000;
237
253
  // stashed entries with more than half-life in storage will not be reuploaded
@@ -243,6 +259,8 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
243
259
  uploadP: undefined,
244
260
  uploadTime: entry.uploadTime,
245
261
  minTTLInSeconds: entry.minTTLInSeconds,
262
+ attached,
263
+ acked,
246
264
  });
247
265
  return;
248
266
  }
@@ -252,6 +270,8 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
252
270
  status: PendingBlobStatus.OfflinePendingUpload,
253
271
  handleP: new Deferred(),
254
272
  uploadP: this.uploadBlob(localId, blob),
273
+ attached,
274
+ acked,
255
275
  });
256
276
  });
257
277
 
@@ -391,13 +411,23 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
391
411
  );
392
412
  }
393
413
 
394
- private getBlobHandle(id: string): IFluidHandle<ArrayBufferLike> {
414
+ private getBlobHandle(id: string): BlobHandle {
395
415
  assert(
396
416
  this.redirectTable.has(id) || this.pendingBlobs.has(id),
397
417
  0x384 /* requesting handle for unknown blob */,
398
418
  );
399
- return new BlobHandle(`${BlobManager.basePath}/${id}`, this.routeContext, async () =>
400
- this.getBlob(id),
419
+ const pending = this.pendingBlobs.get(id);
420
+ const callback = pending
421
+ ? () => {
422
+ pending.attached = true;
423
+ this.deletePendingBlobMaybe(id);
424
+ }
425
+ : undefined;
426
+ return new BlobHandle(
427
+ `${BlobManager.basePath}/${id}`,
428
+ this.routeContext,
429
+ async () => this.getBlob(id),
430
+ callback,
401
431
  );
402
432
  }
403
433
 
@@ -433,6 +463,8 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
433
463
  status: PendingBlobStatus.OnlinePendingUpload,
434
464
  handleP: new Deferred(),
435
465
  uploadP: this.uploadBlob(localId, blob),
466
+ attached: false,
467
+ acked: false,
436
468
  };
437
469
  this.pendingBlobs.set(localId, pendingEntry);
438
470
 
@@ -459,18 +491,21 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
459
491
  this.redirectTable.set(fromId, toId);
460
492
  }
461
493
 
462
- private deleteAndEmitsIfEmpty(id: string) {
494
+ private deletePendingBlobMaybe(id: string) {
463
495
  if (this.pendingBlobs.has(id)) {
464
- this.pendingBlobs.delete(id);
465
- if (!this.hasPendingBlobs) {
466
- this.emit("noPendingBlobs");
496
+ const entry = this.pendingBlobs.get(id);
497
+ if (entry?.attached && entry?.acked) {
498
+ this.pendingBlobs.delete(id);
499
+ if (!this.hasPendingBlobs) {
500
+ this.emit("noPendingBlobs");
501
+ }
467
502
  }
468
503
  }
469
504
  }
470
505
 
471
506
  private onUploadResolve(localId: string, response: ICreateBlobResponseWithTTL) {
472
507
  const entry = this.pendingBlobs.get(localId);
473
- assert(entry !== undefined, "pending blob entry not found for uploaded blob");
508
+ assert(entry !== undefined, 0x6c8 /* pending blob entry not found for uploaded blob */);
474
509
  assert(
475
510
  entry.status === PendingBlobStatus.OnlinePendingUpload ||
476
511
  entry.status === PendingBlobStatus.OfflinePendingUpload,
@@ -493,7 +528,7 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
493
528
  // happened before and so, the server won't delete it.
494
529
  this.setRedirection(localId, response.id);
495
530
  entry.handleP.resolve(this.getBlobHandle(localId));
496
- this.deleteAndEmitsIfEmpty(localId);
531
+ this.deletePendingBlobMaybe(localId);
497
532
  } else {
498
533
  // If there is already an op for this storage ID, append the local ID to the list. Once any op for
499
534
  // this storage ID is ack'd, all pending blobs for it can be resolved since the op will keep the
@@ -594,8 +629,8 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
594
629
  }
595
630
 
596
631
  public processBlobAttachOp(message: ISequencedDocumentMessage, local: boolean) {
597
- const localId = message.metadata?.localId;
598
- const blobId = message.metadata?.blobId;
632
+ const localId = (message.metadata as IBlobMetadata | undefined)?.localId;
633
+ const blobId = (message.metadata as IBlobMetadata | undefined)?.blobId;
599
634
  assert(blobId !== undefined, 0x12a /* "Missing blob id on metadata" */);
600
635
 
601
636
  // Set up a mapping from local ID to storage ID. This is crucial since without this the blob cannot be
@@ -616,23 +651,29 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
616
651
  // This is safe because the server will keep the blob alive and the op containing the local ID to
617
652
  // storage ID is already in flight and any op containing this local ID will be sequenced after that.
618
653
  waitingBlobs.forEach((pendingLocalId) => {
619
- const pendingBlobEntry = this.pendingBlobs.get(pendingLocalId);
654
+ const entry = this.pendingBlobs.get(pendingLocalId);
620
655
  assert(
621
- pendingBlobEntry !== undefined,
656
+ entry !== undefined,
622
657
  0x38f /* local online BlobAttach op with no pending blob entry */,
623
658
  );
624
659
 
625
660
  // It's possible we transitioned to offline flow while waiting for this op.
626
- if (pendingBlobEntry.status === PendingBlobStatus.OnlinePendingOp) {
661
+ if (entry.status === PendingBlobStatus.OnlinePendingOp) {
627
662
  this.setRedirection(pendingLocalId, blobId);
628
- pendingBlobEntry.handleP.resolve(this.getBlobHandle(pendingLocalId));
629
- this.deleteAndEmitsIfEmpty(pendingLocalId);
663
+ entry.acked = true;
664
+ entry.handleP.resolve(this.getBlobHandle(pendingLocalId));
665
+ this.deletePendingBlobMaybe(pendingLocalId);
630
666
  }
631
667
  });
632
668
  this.opsInFlight.delete(blobId);
633
669
  }
634
- // For blobs that were transitioned to offline flow while waiting for this op, the entry should be deleted.
635
- this.deleteAndEmitsIfEmpty(localId);
670
+ // offline flow does not resolve the handle (since it was already resolved)
671
+ // but we still need to delete the entry in case is acked and attached.
672
+ const localEntry = this.pendingBlobs.get(localId);
673
+ if (localEntry) {
674
+ localEntry.acked = true;
675
+ this.deletePendingBlobMaybe(localId);
676
+ }
636
677
  }
637
678
  }
638
679
 
@@ -905,13 +946,13 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
905
946
  public getPendingBlobs(): IPendingBlobs {
906
947
  const blobs = {};
907
948
  for (const [key, entry] of this.pendingBlobs) {
908
- blobs[key] = entry.minTTLInSeconds
909
- ? {
910
- blob: bufferToString(entry.blob, "base64"),
911
- uploadTime: entry.uploadTime,
912
- minTTLInSeconds: entry.minTTLInSeconds,
913
- }
914
- : { blob: bufferToString(entry.blob, "base64") };
949
+ blobs[key] = {
950
+ blob: bufferToString(entry.blob, "base64"),
951
+ attached: entry.attached,
952
+ acked: entry.acked,
953
+ minTTLInSeconds: entry.minTTLInSeconds,
954
+ uploadTime: entry.uploadTime,
955
+ };
915
956
  }
916
957
  return blobs;
917
958
  }
@@ -3,8 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ITelemetryLogger } from "@fluidframework/common-definitions";
7
- import { ChildLogger, TelemetryLogger } from "@fluidframework/telemetry-utils";
6
+ import { ITelemetryLoggerExt, ChildLogger, TelemetryLogger } from "@fluidframework/telemetry-utils";
8
7
  import { IDeltaManager } from "@fluidframework/container-definitions";
9
8
  import {
10
9
  IDocumentMessage,
@@ -69,12 +68,12 @@ class OpPerfTelemetry {
69
68
  private connectionStartTime = 0;
70
69
  private gap = 0;
71
70
 
72
- private readonly logger: ITelemetryLogger;
71
+ private readonly logger: ITelemetryLoggerExt;
73
72
 
74
73
  public constructor(
75
74
  private clientId: string | undefined,
76
75
  private readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
77
- logger: ITelemetryLogger,
76
+ logger: ITelemetryLoggerExt,
78
77
  ) {
79
78
  this.logger = ChildLogger.create(logger, "OpPerf");
80
79
 
@@ -188,7 +187,16 @@ class OpPerfTelemetry {
188
187
 
189
188
  private recordPingTime(latency: number) {
190
189
  this.pingLatency = latency;
191
- // logging one in every 1000 pongs, including the first time, if it is a "write" client.
190
+
191
+ // Log if latency is longer than 1 min
192
+ if (latency > 1000 * 60) {
193
+ this.logger.sendErrorEvent({
194
+ eventName: "LatencyTooLong",
195
+ duration: latency,
196
+ });
197
+ }
198
+
199
+ // logging one in every 100 pongs, including the first time, if it is a "write" client.
192
200
  if (this.pongCount % 100 === 0 && this.deltaManager.active) {
193
201
  this.logger.sendPerformanceEvent({
194
202
  eventName: "DeltaLatency",
@@ -314,7 +322,7 @@ export interface IPerfSignalReport {
314
322
  export function ReportOpPerfTelemetry(
315
323
  clientId: string | undefined,
316
324
  deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
317
- logger: ITelemetryLogger,
325
+ logger: ITelemetryLoggerExt,
318
326
  ) {
319
327
  new OpPerfTelemetry(clientId, deltaManager, logger);
320
328
  }