@fluidframework/container-runtime 2.0.0-dev.5.2.0.169897 → 2.0.0-dev.6.4.0.191258

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 (561) hide show
  1. package/CHANGELOG.md +147 -0
  2. package/README.md +4 -3
  3. package/dist/batchTracker.d.ts +3 -2
  4. package/dist/batchTracker.d.ts.map +1 -1
  5. package/dist/batchTracker.js +6 -5
  6. package/dist/batchTracker.js.map +1 -1
  7. package/dist/blobManager.d.ts +15 -18
  8. package/dist/blobManager.d.ts.map +1 -1
  9. package/dist/blobManager.js +212 -171
  10. package/dist/blobManager.js.map +1 -1
  11. package/dist/connectionTelemetry.d.ts.map +1 -1
  12. package/dist/connectionTelemetry.js +33 -17
  13. package/dist/connectionTelemetry.js.map +1 -1
  14. package/dist/containerRuntime.d.ts +172 -35
  15. package/dist/containerRuntime.d.ts.map +1 -1
  16. package/dist/containerRuntime.js +722 -425
  17. package/dist/containerRuntime.js.map +1 -1
  18. package/dist/dataStore.d.ts.map +1 -1
  19. package/dist/dataStore.js +15 -7
  20. package/dist/dataStore.js.map +1 -1
  21. package/dist/dataStoreContext.d.ts +4 -4
  22. package/dist/dataStoreContext.d.ts.map +1 -1
  23. package/dist/dataStoreContext.js +87 -90
  24. package/dist/dataStoreContext.js.map +1 -1
  25. package/dist/dataStoreContexts.d.ts +1 -1
  26. package/dist/dataStoreContexts.d.ts.map +1 -1
  27. package/dist/dataStoreContexts.js +10 -10
  28. package/dist/dataStoreContexts.js.map +1 -1
  29. package/dist/dataStoreRegistry.js +2 -2
  30. package/dist/dataStoreRegistry.js.map +1 -1
  31. package/dist/dataStores.d.ts +23 -7
  32. package/dist/dataStores.d.ts.map +1 -1
  33. package/dist/dataStores.js +125 -82
  34. package/dist/dataStores.js.map +1 -1
  35. package/dist/deltaManagerProxyBase.d.ts +35 -0
  36. package/dist/deltaManagerProxyBase.d.ts.map +1 -0
  37. package/dist/deltaManagerProxyBase.js +77 -0
  38. package/dist/deltaManagerProxyBase.js.map +1 -0
  39. package/dist/deltaManagerSummarizerProxy.d.ts +1 -1
  40. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
  41. package/dist/deltaManagerSummarizerProxy.js +4 -2
  42. package/dist/deltaManagerSummarizerProxy.js.map +1 -1
  43. package/dist/deltaScheduler.d.ts.map +1 -1
  44. package/dist/deltaScheduler.js +10 -10
  45. package/dist/deltaScheduler.js.map +1 -1
  46. package/dist/error.d.ts +14 -0
  47. package/dist/error.d.ts.map +1 -0
  48. package/dist/error.js +21 -0
  49. package/dist/error.js.map +1 -0
  50. package/dist/gc/garbageCollection.d.ts +10 -9
  51. package/dist/gc/garbageCollection.d.ts.map +1 -1
  52. package/dist/gc/garbageCollection.js +65 -56
  53. package/dist/gc/garbageCollection.js.map +1 -1
  54. package/dist/gc/gcConfigs.d.ts.map +1 -1
  55. package/dist/gc/gcConfigs.js +18 -14
  56. package/dist/gc/gcConfigs.js.map +1 -1
  57. package/dist/gc/gcDefinitions.d.ts +17 -5
  58. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  59. package/dist/gc/gcDefinitions.js +14 -15
  60. package/dist/gc/gcDefinitions.js.map +1 -1
  61. package/dist/gc/gcHelpers.d.ts +0 -8
  62. package/dist/gc/gcHelpers.d.ts.map +1 -1
  63. package/dist/gc/gcHelpers.js +11 -24
  64. package/dist/gc/gcHelpers.js.map +1 -1
  65. package/dist/gc/gcSummaryStateTracker.d.ts +4 -7
  66. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  67. package/dist/gc/gcSummaryStateTracker.js +19 -58
  68. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  69. package/dist/gc/gcTelemetry.d.ts +1 -1
  70. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  71. package/dist/gc/gcTelemetry.js +45 -35
  72. package/dist/gc/gcTelemetry.js.map +1 -1
  73. package/dist/gc/gcUnreferencedStateTracker.js +4 -4
  74. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  75. package/dist/gc/index.d.ts +2 -2
  76. package/dist/gc/index.d.ts.map +1 -1
  77. package/dist/gc/index.js +3 -5
  78. package/dist/gc/index.js.map +1 -1
  79. package/dist/id-compressor/appendOnlySortedMap.d.ts +8 -30
  80. package/dist/id-compressor/appendOnlySortedMap.d.ts.map +1 -1
  81. package/dist/id-compressor/appendOnlySortedMap.js +26 -68
  82. package/dist/id-compressor/appendOnlySortedMap.js.map +1 -1
  83. package/dist/id-compressor/finalSpace.d.ts +29 -0
  84. package/dist/id-compressor/finalSpace.d.ts.map +1 -0
  85. package/dist/id-compressor/finalSpace.js +62 -0
  86. package/dist/id-compressor/finalSpace.js.map +1 -0
  87. package/dist/id-compressor/idCompressor.d.ts +25 -250
  88. package/dist/id-compressor/idCompressor.d.ts.map +1 -1
  89. package/dist/id-compressor/idCompressor.js +390 -1153
  90. package/dist/id-compressor/idCompressor.js.map +1 -1
  91. package/dist/id-compressor/identifiers.d.ts +32 -0
  92. package/dist/id-compressor/identifiers.d.ts.map +1 -0
  93. package/dist/id-compressor/identifiers.js +15 -0
  94. package/dist/id-compressor/identifiers.js.map +1 -0
  95. package/dist/id-compressor/index.d.ts +5 -6
  96. package/dist/id-compressor/index.d.ts.map +1 -1
  97. package/dist/id-compressor/index.js +20 -26
  98. package/dist/id-compressor/index.js.map +1 -1
  99. package/dist/id-compressor/persistanceUtilities.d.ts +22 -0
  100. package/dist/id-compressor/persistanceUtilities.d.ts.map +1 -0
  101. package/dist/id-compressor/persistanceUtilities.js +43 -0
  102. package/dist/id-compressor/persistanceUtilities.js.map +1 -0
  103. package/dist/id-compressor/sessionSpaceNormalizer.d.ts +46 -0
  104. package/dist/id-compressor/sessionSpaceNormalizer.d.ts.map +1 -0
  105. package/dist/id-compressor/sessionSpaceNormalizer.js +80 -0
  106. package/dist/id-compressor/sessionSpaceNormalizer.js.map +1 -0
  107. package/dist/id-compressor/sessions.d.ts +115 -0
  108. package/dist/id-compressor/sessions.d.ts.map +1 -0
  109. package/dist/id-compressor/sessions.js +305 -0
  110. package/dist/id-compressor/sessions.js.map +1 -0
  111. package/dist/id-compressor/utilities.d.ts +49 -0
  112. package/dist/id-compressor/utilities.d.ts.map +1 -0
  113. package/dist/id-compressor/utilities.js +166 -0
  114. package/dist/id-compressor/utilities.js.map +1 -0
  115. package/dist/index.d.ts +3 -3
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +6 -4
  118. package/dist/index.js.map +1 -1
  119. package/dist/metadata.d.ts +18 -0
  120. package/dist/metadata.d.ts.map +1 -0
  121. package/dist/metadata.js +7 -0
  122. package/dist/metadata.js.map +1 -0
  123. package/dist/opLifecycle/batchManager.d.ts +2 -1
  124. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  125. package/dist/opLifecycle/batchManager.js +15 -7
  126. package/dist/opLifecycle/batchManager.js.map +1 -1
  127. package/dist/opLifecycle/definitions.d.ts +11 -0
  128. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  129. package/dist/opLifecycle/definitions.js.map +1 -1
  130. package/dist/opLifecycle/index.d.ts +1 -1
  131. package/dist/opLifecycle/index.d.ts.map +1 -1
  132. package/dist/opLifecycle/index.js +2 -1
  133. package/dist/opLifecycle/index.js.map +1 -1
  134. package/dist/opLifecycle/opCompressor.d.ts +2 -2
  135. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  136. package/dist/opLifecycle/opCompressor.js +12 -7
  137. package/dist/opLifecycle/opCompressor.js.map +1 -1
  138. package/dist/opLifecycle/opDecompressor.d.ts +2 -2
  139. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  140. package/dist/opLifecycle/opDecompressor.js +30 -21
  141. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  142. package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
  143. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  144. package/dist/opLifecycle/opGroupingManager.js +19 -13
  145. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  146. package/dist/opLifecycle/opSplitter.d.ts +2 -2
  147. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  148. package/dist/opLifecycle/opSplitter.js +24 -19
  149. package/dist/opLifecycle/opSplitter.js.map +1 -1
  150. package/dist/opLifecycle/outbox.d.ts +39 -6
  151. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  152. package/dist/opLifecycle/outbox.js +138 -61
  153. package/dist/opLifecycle/outbox.js.map +1 -1
  154. package/dist/opLifecycle/remoteMessageProcessor.d.ts +6 -1
  155. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  156. package/dist/opLifecycle/remoteMessageProcessor.js +22 -8
  157. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  158. package/dist/opProperties.js +1 -2
  159. package/dist/opProperties.js.map +1 -1
  160. package/dist/packageVersion.d.ts +1 -1
  161. package/dist/packageVersion.js +1 -1
  162. package/dist/packageVersion.js.map +1 -1
  163. package/dist/pendingStateManager.d.ts +25 -10
  164. package/dist/pendingStateManager.d.ts.map +1 -1
  165. package/dist/pendingStateManager.js +101 -64
  166. package/dist/pendingStateManager.js.map +1 -1
  167. package/dist/scheduleManager.d.ts.map +1 -1
  168. package/dist/scheduleManager.js +43 -33
  169. package/dist/scheduleManager.js.map +1 -1
  170. package/dist/summary/index.d.ts +4 -4
  171. package/dist/summary/index.d.ts.map +1 -1
  172. package/dist/summary/index.js +3 -1
  173. package/dist/summary/index.js.map +1 -1
  174. package/dist/summary/orderedClientElection.d.ts +3 -3
  175. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  176. package/dist/summary/orderedClientElection.js +26 -27
  177. package/dist/summary/orderedClientElection.js.map +1 -1
  178. package/dist/summary/runWhileConnectedCoordinator.js +3 -3
  179. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  180. package/dist/summary/runningSummarizer.d.ts +31 -10
  181. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  182. package/dist/summary/runningSummarizer.js +271 -139
  183. package/dist/summary/runningSummarizer.js.map +1 -1
  184. package/dist/summary/summarizer.d.ts +8 -7
  185. package/dist/summary/summarizer.d.ts.map +1 -1
  186. package/dist/summary/summarizer.js +79 -78
  187. package/dist/summary/summarizer.js.map +1 -1
  188. package/dist/summary/summarizerClientElection.d.ts +2 -2
  189. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  190. package/dist/summary/summarizerClientElection.js +7 -11
  191. package/dist/summary/summarizerClientElection.js.map +1 -1
  192. package/dist/summary/summarizerHeuristics.js +10 -14
  193. package/dist/summary/summarizerHeuristics.js.map +1 -1
  194. package/dist/summary/summarizerNode/index.d.ts +1 -1
  195. package/dist/summary/summarizerNode/index.d.ts.map +1 -1
  196. package/dist/summary/summarizerNode/index.js.map +1 -1
  197. package/dist/summary/summarizerNode/summarizerNode.d.ts +40 -23
  198. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  199. package/dist/summary/summarizerNode/summarizerNode.js +144 -149
  200. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  201. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +25 -29
  202. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  203. package/dist/summary/summarizerNode/summarizerNodeUtils.js +2 -4
  204. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  205. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +21 -16
  206. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  207. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +74 -123
  208. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  209. package/dist/summary/summarizerTypes.d.ts +44 -24
  210. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  211. package/dist/summary/summarizerTypes.js.map +1 -1
  212. package/dist/summary/summaryCollection.d.ts +2 -2
  213. package/dist/summary/summaryCollection.d.ts.map +1 -1
  214. package/dist/summary/summaryCollection.js +16 -13
  215. package/dist/summary/summaryCollection.js.map +1 -1
  216. package/dist/summary/summaryFormat.d.ts +4 -0
  217. package/dist/summary/summaryFormat.d.ts.map +1 -1
  218. package/dist/summary/summaryFormat.js +8 -5
  219. package/dist/summary/summaryFormat.js.map +1 -1
  220. package/dist/summary/summaryGenerator.d.ts +21 -6
  221. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  222. package/dist/summary/summaryGenerator.js +117 -54
  223. package/dist/summary/summaryGenerator.js.map +1 -1
  224. package/dist/summary/summaryManager.d.ts +8 -7
  225. package/dist/summary/summaryManager.d.ts.map +1 -1
  226. package/dist/summary/summaryManager.js +38 -28
  227. package/dist/summary/summaryManager.js.map +1 -1
  228. package/lib/batchTracker.d.ts +3 -2
  229. package/lib/batchTracker.d.ts.map +1 -1
  230. package/lib/batchTracker.js +5 -4
  231. package/lib/batchTracker.js.map +1 -1
  232. package/lib/blobManager.d.ts +15 -18
  233. package/lib/blobManager.d.ts.map +1 -1
  234. package/lib/blobManager.js +187 -146
  235. package/lib/blobManager.js.map +1 -1
  236. package/lib/connectionTelemetry.d.ts.map +1 -1
  237. package/lib/connectionTelemetry.js +23 -7
  238. package/lib/connectionTelemetry.js.map +1 -1
  239. package/lib/containerRuntime.d.ts +172 -35
  240. package/lib/containerRuntime.d.ts.map +1 -1
  241. package/lib/containerRuntime.js +678 -380
  242. package/lib/containerRuntime.js.map +1 -1
  243. package/lib/dataStore.d.ts.map +1 -1
  244. package/lib/dataStore.js +13 -5
  245. package/lib/dataStore.js.map +1 -1
  246. package/lib/dataStoreContext.d.ts +4 -4
  247. package/lib/dataStoreContext.d.ts.map +1 -1
  248. package/lib/dataStoreContext.js +49 -52
  249. package/lib/dataStoreContext.js.map +1 -1
  250. package/lib/dataStoreContexts.d.ts +1 -1
  251. package/lib/dataStoreContexts.d.ts.map +1 -1
  252. package/lib/dataStoreContexts.js +3 -3
  253. package/lib/dataStoreContexts.js.map +1 -1
  254. package/lib/dataStoreRegistry.js +1 -1
  255. package/lib/dataStoreRegistry.js.map +1 -1
  256. package/lib/dataStores.d.ts +23 -7
  257. package/lib/dataStores.d.ts.map +1 -1
  258. package/lib/dataStores.js +107 -64
  259. package/lib/dataStores.js.map +1 -1
  260. package/lib/deltaManagerProxyBase.d.ts +35 -0
  261. package/lib/deltaManagerProxyBase.d.ts.map +1 -0
  262. package/lib/deltaManagerProxyBase.js +73 -0
  263. package/lib/deltaManagerProxyBase.js.map +1 -0
  264. package/lib/deltaManagerSummarizerProxy.d.ts +1 -1
  265. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -1
  266. package/lib/deltaManagerSummarizerProxy.js +3 -1
  267. package/lib/deltaManagerSummarizerProxy.js.map +1 -1
  268. package/lib/deltaScheduler.d.ts.map +1 -1
  269. package/lib/deltaScheduler.js +7 -7
  270. package/lib/deltaScheduler.js.map +1 -1
  271. package/lib/error.d.ts +14 -0
  272. package/lib/error.d.ts.map +1 -0
  273. package/lib/error.js +17 -0
  274. package/lib/error.js.map +1 -0
  275. package/lib/gc/garbageCollection.d.ts +10 -9
  276. package/lib/gc/garbageCollection.d.ts.map +1 -1
  277. package/lib/gc/garbageCollection.js +61 -52
  278. package/lib/gc/garbageCollection.js.map +1 -1
  279. package/lib/gc/gcConfigs.d.ts.map +1 -1
  280. package/lib/gc/gcConfigs.js +16 -12
  281. package/lib/gc/gcConfigs.js.map +1 -1
  282. package/lib/gc/gcDefinitions.d.ts +17 -5
  283. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  284. package/lib/gc/gcDefinitions.js +13 -14
  285. package/lib/gc/gcDefinitions.js.map +1 -1
  286. package/lib/gc/gcHelpers.d.ts +0 -8
  287. package/lib/gc/gcHelpers.d.ts.map +1 -1
  288. package/lib/gc/gcHelpers.js +5 -17
  289. package/lib/gc/gcHelpers.js.map +1 -1
  290. package/lib/gc/gcSummaryStateTracker.d.ts +4 -7
  291. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
  292. package/lib/gc/gcSummaryStateTracker.js +20 -59
  293. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  294. package/lib/gc/gcTelemetry.d.ts +1 -1
  295. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  296. package/lib/gc/gcTelemetry.js +46 -36
  297. package/lib/gc/gcTelemetry.js.map +1 -1
  298. package/lib/gc/gcUnreferencedStateTracker.js +1 -1
  299. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
  300. package/lib/gc/index.d.ts +2 -2
  301. package/lib/gc/index.d.ts.map +1 -1
  302. package/lib/gc/index.js +2 -2
  303. package/lib/gc/index.js.map +1 -1
  304. package/lib/id-compressor/appendOnlySortedMap.d.ts +8 -30
  305. package/lib/id-compressor/appendOnlySortedMap.d.ts.map +1 -1
  306. package/lib/id-compressor/appendOnlySortedMap.js +25 -66
  307. package/lib/id-compressor/appendOnlySortedMap.js.map +1 -1
  308. package/lib/id-compressor/finalSpace.d.ts +29 -0
  309. package/lib/id-compressor/finalSpace.d.ts.map +1 -0
  310. package/lib/id-compressor/finalSpace.js +58 -0
  311. package/lib/id-compressor/finalSpace.js.map +1 -0
  312. package/lib/id-compressor/idCompressor.d.ts +25 -250
  313. package/lib/id-compressor/idCompressor.d.ts.map +1 -1
  314. package/lib/id-compressor/idCompressor.js +385 -1142
  315. package/lib/id-compressor/idCompressor.js.map +1 -1
  316. package/lib/id-compressor/identifiers.d.ts +32 -0
  317. package/lib/id-compressor/identifiers.d.ts.map +1 -0
  318. package/lib/id-compressor/identifiers.js +11 -0
  319. package/lib/id-compressor/identifiers.js.map +1 -0
  320. package/lib/id-compressor/index.d.ts +5 -6
  321. package/lib/id-compressor/index.d.ts.map +1 -1
  322. package/lib/id-compressor/index.js +5 -6
  323. package/lib/id-compressor/index.js.map +1 -1
  324. package/lib/id-compressor/persistanceUtilities.d.ts +22 -0
  325. package/lib/id-compressor/persistanceUtilities.d.ts.map +1 -0
  326. package/lib/id-compressor/persistanceUtilities.js +34 -0
  327. package/lib/id-compressor/persistanceUtilities.js.map +1 -0
  328. package/lib/id-compressor/sessionSpaceNormalizer.d.ts +46 -0
  329. package/lib/id-compressor/sessionSpaceNormalizer.d.ts.map +1 -0
  330. package/lib/id-compressor/sessionSpaceNormalizer.js +76 -0
  331. package/lib/id-compressor/sessionSpaceNormalizer.js.map +1 -0
  332. package/lib/id-compressor/sessions.d.ts +115 -0
  333. package/lib/id-compressor/sessions.d.ts.map +1 -0
  334. package/lib/id-compressor/sessions.js +290 -0
  335. package/lib/id-compressor/sessions.js.map +1 -0
  336. package/lib/id-compressor/utilities.d.ts +49 -0
  337. package/lib/id-compressor/utilities.d.ts.map +1 -0
  338. package/lib/id-compressor/utilities.js +148 -0
  339. package/lib/id-compressor/utilities.js.map +1 -0
  340. package/lib/index.d.ts +3 -3
  341. package/lib/index.d.ts.map +1 -1
  342. package/lib/index.js +2 -2
  343. package/lib/index.js.map +1 -1
  344. package/lib/metadata.d.ts +18 -0
  345. package/lib/metadata.d.ts.map +1 -0
  346. package/lib/metadata.js +6 -0
  347. package/lib/metadata.js.map +1 -0
  348. package/lib/opLifecycle/batchManager.d.ts +2 -1
  349. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  350. package/lib/opLifecycle/batchManager.js +15 -7
  351. package/lib/opLifecycle/batchManager.js.map +1 -1
  352. package/lib/opLifecycle/definitions.d.ts +11 -0
  353. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  354. package/lib/opLifecycle/definitions.js.map +1 -1
  355. package/lib/opLifecycle/index.d.ts +1 -1
  356. package/lib/opLifecycle/index.d.ts.map +1 -1
  357. package/lib/opLifecycle/index.js +1 -1
  358. package/lib/opLifecycle/index.js.map +1 -1
  359. package/lib/opLifecycle/opCompressor.d.ts +2 -2
  360. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  361. package/lib/opLifecycle/opCompressor.js +10 -5
  362. package/lib/opLifecycle/opCompressor.js.map +1 -1
  363. package/lib/opLifecycle/opDecompressor.d.ts +2 -2
  364. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  365. package/lib/opLifecycle/opDecompressor.js +22 -13
  366. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  367. package/lib/opLifecycle/opGroupingManager.d.ts +1 -1
  368. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
  369. package/lib/opLifecycle/opGroupingManager.js +17 -11
  370. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  371. package/lib/opLifecycle/opSplitter.d.ts +2 -2
  372. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  373. package/lib/opLifecycle/opSplitter.js +15 -10
  374. package/lib/opLifecycle/opSplitter.js.map +1 -1
  375. package/lib/opLifecycle/outbox.d.ts +39 -6
  376. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  377. package/lib/opLifecycle/outbox.js +132 -56
  378. package/lib/opLifecycle/outbox.js.map +1 -1
  379. package/lib/opLifecycle/remoteMessageProcessor.d.ts +6 -1
  380. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  381. package/lib/opLifecycle/remoteMessageProcessor.js +23 -9
  382. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  383. package/lib/opProperties.js +1 -2
  384. package/lib/opProperties.js.map +1 -1
  385. package/lib/packageVersion.d.ts +1 -1
  386. package/lib/packageVersion.js +1 -1
  387. package/lib/packageVersion.js.map +1 -1
  388. package/lib/pendingStateManager.d.ts +25 -10
  389. package/lib/pendingStateManager.d.ts.map +1 -1
  390. package/lib/pendingStateManager.js +90 -53
  391. package/lib/pendingStateManager.js.map +1 -1
  392. package/lib/scheduleManager.d.ts.map +1 -1
  393. package/lib/scheduleManager.js +25 -15
  394. package/lib/scheduleManager.js.map +1 -1
  395. package/lib/summary/index.d.ts +4 -4
  396. package/lib/summary/index.d.ts.map +1 -1
  397. package/lib/summary/index.js +2 -2
  398. package/lib/summary/index.js.map +1 -1
  399. package/lib/summary/orderedClientElection.d.ts +3 -3
  400. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  401. package/lib/summary/orderedClientElection.js +21 -22
  402. package/lib/summary/orderedClientElection.js.map +1 -1
  403. package/lib/summary/runWhileConnectedCoordinator.js +1 -1
  404. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
  405. package/lib/summary/runningSummarizer.d.ts +31 -10
  406. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  407. package/lib/summary/runningSummarizer.js +265 -133
  408. package/lib/summary/runningSummarizer.js.map +1 -1
  409. package/lib/summary/summarizer.d.ts +8 -7
  410. package/lib/summary/summarizer.d.ts.map +1 -1
  411. package/lib/summary/summarizer.js +75 -74
  412. package/lib/summary/summarizer.js.map +1 -1
  413. package/lib/summary/summarizerClientElection.d.ts +2 -2
  414. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  415. package/lib/summary/summarizerClientElection.js +6 -10
  416. package/lib/summary/summarizerClientElection.js.map +1 -1
  417. package/lib/summary/summarizerHeuristics.js +9 -13
  418. package/lib/summary/summarizerHeuristics.js.map +1 -1
  419. package/lib/summary/summarizerNode/index.d.ts +1 -1
  420. package/lib/summary/summarizerNode/index.d.ts.map +1 -1
  421. package/lib/summary/summarizerNode/index.js.map +1 -1
  422. package/lib/summary/summarizerNode/summarizerNode.d.ts +40 -23
  423. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  424. package/lib/summary/summarizerNode/summarizerNode.js +132 -137
  425. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  426. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +25 -29
  427. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  428. package/lib/summary/summarizerNode/summarizerNodeUtils.js +2 -4
  429. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  430. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +21 -16
  431. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  432. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +70 -119
  433. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  434. package/lib/summary/summarizerTypes.d.ts +44 -24
  435. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  436. package/lib/summary/summarizerTypes.js.map +1 -1
  437. package/lib/summary/summaryCollection.d.ts +2 -2
  438. package/lib/summary/summaryCollection.d.ts.map +1 -1
  439. package/lib/summary/summaryCollection.js +9 -6
  440. package/lib/summary/summaryCollection.js.map +1 -1
  441. package/lib/summary/summaryFormat.d.ts +4 -0
  442. package/lib/summary/summaryFormat.d.ts.map +1 -1
  443. package/lib/summary/summaryFormat.js +7 -4
  444. package/lib/summary/summaryFormat.js.map +1 -1
  445. package/lib/summary/summaryGenerator.d.ts +21 -6
  446. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  447. package/lib/summary/summaryGenerator.js +109 -47
  448. package/lib/summary/summaryGenerator.js.map +1 -1
  449. package/lib/summary/summaryManager.d.ts +8 -7
  450. package/lib/summary/summaryManager.d.ts.map +1 -1
  451. package/lib/summary/summaryManager.js +35 -25
  452. package/lib/summary/summaryManager.js.map +1 -1
  453. package/package.json +30 -32
  454. package/src/batchTracker.ts +7 -5
  455. package/src/blobManager.ts +235 -172
  456. package/src/connectionTelemetry.ts +19 -5
  457. package/src/containerRuntime.ts +853 -431
  458. package/src/dataStore.ts +12 -4
  459. package/src/dataStoreContext.ts +49 -46
  460. package/src/dataStoreContexts.ts +4 -4
  461. package/src/dataStoreRegistry.ts +1 -1
  462. package/src/dataStores.ts +119 -80
  463. package/src/deltaManagerProxyBase.ts +111 -0
  464. package/src/deltaManagerSummarizerProxy.ts +4 -1
  465. package/src/deltaScheduler.ts +7 -11
  466. package/src/error.ts +18 -0
  467. package/src/gc/garbageCollection.md +53 -5
  468. package/src/gc/garbageCollection.ts +58 -51
  469. package/src/gc/gcConfigs.ts +4 -2
  470. package/src/gc/gcDefinitions.ts +17 -21
  471. package/src/gc/gcEarlyAdoption.md +145 -0
  472. package/src/gc/gcHelpers.ts +1 -12
  473. package/src/gc/gcSummaryStateTracker.ts +19 -65
  474. package/src/gc/gcTelemetry.ts +15 -13
  475. package/src/gc/gcUnreferencedStateTracker.ts +1 -1
  476. package/src/gc/index.ts +2 -4
  477. package/src/id-compressor/appendOnlySortedMap.ts +26 -87
  478. package/src/id-compressor/finalSpace.ts +67 -0
  479. package/src/id-compressor/idCompressor.ts +458 -1682
  480. package/src/id-compressor/identifiers.ts +42 -0
  481. package/src/id-compressor/index.ts +11 -20
  482. package/src/id-compressor/persistanceUtilities.ts +58 -0
  483. package/src/id-compressor/sessionSpaceNormalizer.ts +83 -0
  484. package/src/id-compressor/sessions.ts +405 -0
  485. package/src/id-compressor/utilities.ts +187 -0
  486. package/src/index.ts +9 -2
  487. package/src/metadata.ts +19 -0
  488. package/src/opLifecycle/README.md +20 -0
  489. package/src/opLifecycle/batchManager.ts +9 -1
  490. package/src/opLifecycle/definitions.ts +11 -0
  491. package/src/opLifecycle/index.ts +1 -1
  492. package/src/opLifecycle/opCompressor.ts +6 -5
  493. package/src/opLifecycle/opDecompressor.ts +47 -17
  494. package/src/opLifecycle/opGroupingManager.ts +18 -8
  495. package/src/opLifecycle/opSplitter.ts +10 -7
  496. package/src/opLifecycle/outbox.ts +177 -72
  497. package/src/opLifecycle/remoteMessageProcessor.ts +32 -9
  498. package/src/packageVersion.ts +1 -1
  499. package/src/pendingStateManager.ts +123 -78
  500. package/src/scheduleManager.ts +22 -11
  501. package/src/summary/index.ts +7 -4
  502. package/src/summary/orderedClientElection.ts +10 -6
  503. package/src/summary/runWhileConnectedCoordinator.ts +1 -1
  504. package/src/summary/runningSummarizer.ts +291 -163
  505. package/src/summary/summarizer.ts +27 -16
  506. package/src/summary/summarizerClientElection.ts +2 -2
  507. package/src/summary/summarizerHeuristics.ts +1 -1
  508. package/src/summary/summarizerNode/index.ts +2 -2
  509. package/src/summary/summarizerNode/summarizerNode.ts +142 -184
  510. package/src/summary/summarizerNode/summarizerNodeUtils.ts +27 -35
  511. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +72 -148
  512. package/src/summary/summarizerTypes.ts +49 -24
  513. package/src/summary/summaryCollection.ts +9 -4
  514. package/src/summary/summaryFormat.ts +9 -2
  515. package/src/summary/summaryGenerator.ts +72 -49
  516. package/src/summary/summaryManager.ts +44 -16
  517. package/dist/id-compressor/idRange.d.ts +0 -11
  518. package/dist/id-compressor/idRange.d.ts.map +0 -1
  519. package/dist/id-compressor/idRange.js +0 -29
  520. package/dist/id-compressor/idRange.js.map +0 -1
  521. package/dist/id-compressor/numericUuid.d.ts +0 -59
  522. package/dist/id-compressor/numericUuid.d.ts.map +0 -1
  523. package/dist/id-compressor/numericUuid.js +0 -325
  524. package/dist/id-compressor/numericUuid.js.map +0 -1
  525. package/dist/id-compressor/sessionIdNormalizer.d.ts +0 -138
  526. package/dist/id-compressor/sessionIdNormalizer.d.ts.map +0 -1
  527. package/dist/id-compressor/sessionIdNormalizer.js +0 -488
  528. package/dist/id-compressor/sessionIdNormalizer.js.map +0 -1
  529. package/dist/id-compressor/utils.d.ts +0 -57
  530. package/dist/id-compressor/utils.d.ts.map +0 -1
  531. package/dist/id-compressor/utils.js +0 -90
  532. package/dist/id-compressor/utils.js.map +0 -1
  533. package/dist/id-compressor/uuidUtilities.d.ts +0 -30
  534. package/dist/id-compressor/uuidUtilities.d.ts.map +0 -1
  535. package/dist/id-compressor/uuidUtilities.js +0 -106
  536. package/dist/id-compressor/uuidUtilities.js.map +0 -1
  537. package/lib/id-compressor/idRange.d.ts +0 -11
  538. package/lib/id-compressor/idRange.d.ts.map +0 -1
  539. package/lib/id-compressor/idRange.js +0 -25
  540. package/lib/id-compressor/idRange.js.map +0 -1
  541. package/lib/id-compressor/numericUuid.d.ts +0 -59
  542. package/lib/id-compressor/numericUuid.d.ts.map +0 -1
  543. package/lib/id-compressor/numericUuid.js +0 -315
  544. package/lib/id-compressor/numericUuid.js.map +0 -1
  545. package/lib/id-compressor/sessionIdNormalizer.d.ts +0 -138
  546. package/lib/id-compressor/sessionIdNormalizer.d.ts.map +0 -1
  547. package/lib/id-compressor/sessionIdNormalizer.js +0 -484
  548. package/lib/id-compressor/sessionIdNormalizer.js.map +0 -1
  549. package/lib/id-compressor/utils.d.ts +0 -57
  550. package/lib/id-compressor/utils.d.ts.map +0 -1
  551. package/lib/id-compressor/utils.js +0 -79
  552. package/lib/id-compressor/utils.js.map +0 -1
  553. package/lib/id-compressor/uuidUtilities.d.ts +0 -30
  554. package/lib/id-compressor/uuidUtilities.d.ts.map +0 -1
  555. package/lib/id-compressor/uuidUtilities.js +0 -98
  556. package/lib/id-compressor/uuidUtilities.js.map +0 -1
  557. package/src/id-compressor/idRange.ts +0 -35
  558. package/src/id-compressor/numericUuid.ts +0 -383
  559. package/src/id-compressor/sessionIdNormalizer.ts +0 -609
  560. package/src/id-compressor/utils.ts +0 -114
  561. package/src/id-compressor/uuidUtilities.ts +0 -123
package/src/dataStore.ts CHANGED
@@ -3,10 +3,9 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ITelemetryLoggerExt, TelemetryDataTag } from "@fluidframework/telemetry-utils";
7
- import { assert, unreachableCase } from "@fluidframework/common-utils";
6
+ import { ITelemetryLoggerExt, TelemetryDataTag, UsageError } from "@fluidframework/telemetry-utils";
7
+ import { assert, unreachableCase } from "@fluidframework/core-utils";
8
8
  import { AttachState } from "@fluidframework/container-definitions";
9
- import { UsageError } from "@fluidframework/container-utils";
10
9
  import { FluidObject, IFluidHandle, IRequest, IResponse } from "@fluidframework/core-interfaces";
11
10
  import {
12
11
  AliasResult,
@@ -62,6 +61,9 @@ class DataStore implements IDataStore {
62
61
  private readonly pendingAliases: Map<string, Promise<AliasResult>>;
63
62
  private aliasResult: Promise<AliasResult> | undefined;
64
63
 
64
+ /**
65
+ * {@inheritDoc @fluidframework/runtime-definitions#IDataStore.trySetAlias}
66
+ */
65
67
  async trySetAlias(alias: string): Promise<AliasResult> {
66
68
  if (alias.includes("/")) {
67
69
  throw new UsageError(`The alias cannot contain slashes: '${alias}'`);
@@ -158,7 +160,10 @@ class DataStore implements IDataStore {
158
160
  return "Success";
159
161
  }
160
162
 
161
- async request(request: IRequest): Promise<IResponse> {
163
+ /**
164
+ * @deprecated - Will be removed in future major release. Migrate all usage of IFluidRouter to the "entryPoint" pattern. Refer to Removing-IFluidRouter.md
165
+ */
166
+ public async request(request: IRequest): Promise<IResponse> {
162
167
  return this.fluidDataStoreChannel.request(request);
163
168
  }
164
169
 
@@ -179,6 +184,9 @@ class DataStore implements IDataStore {
179
184
  this.pendingAliases = datastores.pendingAliases;
180
185
  }
181
186
 
187
+ /**
188
+ * @deprecated - Will be removed in future major release. Migrate all usage of IFluidRouter to the "entryPoint" pattern. Refer to Removing-IFluidRouter.md
189
+ */
182
190
  public get IFluidRouter() {
183
191
  return this.fluidDataStoreChannel;
184
192
  }
@@ -3,15 +3,22 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { IDisposable, ITelemetryProperties } from "@fluidframework/common-definitions";
7
- import { FluidObject, IRequest, IResponse, IFluidHandle } from "@fluidframework/core-interfaces";
6
+ import {
7
+ IDisposable,
8
+ FluidObject,
9
+ IRequest,
10
+ IResponse,
11
+ IFluidHandle,
12
+ ITelemetryProperties,
13
+ } from "@fluidframework/core-interfaces";
8
14
  import {
9
15
  IAudience,
10
16
  IDeltaManager,
11
17
  AttachState,
12
18
  ILoaderOptions,
13
19
  } from "@fluidframework/container-definitions";
14
- import { assert, Deferred, LazyPromise, TypedEventEmitter } from "@fluidframework/common-utils";
20
+ import { TypedEventEmitter } from "@fluid-internal/client-utils";
21
+ import { assert, Deferred, LazyPromise } from "@fluidframework/core-utils";
15
22
  import { IDocumentStorageService } from "@fluidframework/driver-definitions";
16
23
  import { BlobTreeEntry, readAndParse } from "@fluidframework/driver-utils";
17
24
  import {
@@ -47,27 +54,19 @@ import {
47
54
  IIdCompressorCore,
48
55
  VisibilityState,
49
56
  } from "@fluidframework/runtime-definitions";
57
+ import { addBlobToSummary, convertSummaryTreeToITree } from "@fluidframework/runtime-utils";
50
58
  import {
51
- addBlobToSummary,
52
- convertSummaryTreeToITree,
53
- packagePathToTelemetryProperty,
54
- } from "@fluidframework/runtime-utils";
55
- import {
56
- ChildLogger,
59
+ createChildMonitoringContext,
60
+ DataCorruptionError,
61
+ DataProcessingError,
62
+ extractSafePropertiesFromMessage,
57
63
  generateStack,
58
64
  ITelemetryLoggerExt,
59
- loggerToMonitoringContext,
60
65
  LoggingError,
61
66
  MonitoringContext,
62
- TelemetryDataTag,
67
+ tagCodeArtifacts,
63
68
  ThresholdCounter,
64
69
  } from "@fluidframework/telemetry-utils";
65
- import {
66
- DataCorruptionError,
67
- DataProcessingError,
68
- extractSafePropertiesFromMessage,
69
- } from "@fluidframework/container-utils";
70
-
71
70
  import {
72
71
  dataStoreAttributesBlobName,
73
72
  hasIsolatedChannels,
@@ -309,9 +308,18 @@ export abstract class FluidDataStoreContext
309
308
  async (fullGC?: boolean) => this.getGCDataInternal(fullGC),
310
309
  );
311
310
 
312
- this.mc = loggerToMonitoringContext(
313
- ChildLogger.create(this.logger, "FluidDataStoreContext"),
314
- );
311
+ this.mc = createChildMonitoringContext({
312
+ logger: this.logger,
313
+ namespace: "FluidDataStoreContext",
314
+ properties: {
315
+ all: tagCodeArtifacts({
316
+ fluidDataStoreId: this.id,
317
+ // The package name is a getter because `this.pkg` may not be initialized during construction.
318
+ // For data stores loaded from summary, it is initialized during data store realization.
319
+ fullPackageName: () => this.pkg?.join("/"),
320
+ }),
321
+ },
322
+ });
315
323
  this.thresholdOpsCounter = new ThresholdCounter(
316
324
  FluidDataStoreContext.pendingOpsCountThreshold,
317
325
  this.mc.logger,
@@ -367,10 +375,13 @@ export abstract class FluidDataStoreContext
367
375
  failedPkgPath?: string,
368
376
  fullPackageName?: readonly string[],
369
377
  ): never {
370
- throw new LoggingError(reason, {
371
- failedPkgPath: { value: failedPkgPath, tag: TelemetryDataTag.CodeArtifact },
372
- fullPackageName: packagePathToTelemetryProperty(fullPackageName),
373
- });
378
+ throw new LoggingError(
379
+ reason,
380
+ tagCodeArtifacts({
381
+ failedPkgPath,
382
+ packagePath: fullPackageName?.join("/"),
383
+ }),
384
+ );
374
385
  }
375
386
 
376
387
  public async realize(): Promise<IFluidDataStoreChannel> {
@@ -382,15 +393,14 @@ export abstract class FluidDataStoreContext
382
393
  error,
383
394
  "realizeFluidDataStoreContext",
384
395
  );
385
- errorWrapped.addTelemetryProperties({
386
- fluidDataStoreId: {
387
- value: this.id,
388
- tag: TelemetryDataTag.CodeArtifact,
389
- },
390
- packageName: packagePathToTelemetryProperty(this.pkg),
391
- });
396
+ errorWrapped.addTelemetryProperties(
397
+ tagCodeArtifacts({
398
+ fullPackageName: this.pkg?.join("/"),
399
+ fluidDataStoreId: this.id,
400
+ }),
401
+ );
392
402
  this.channelDeferred?.reject(errorWrapped);
393
- this.logger.sendErrorEvent({ eventName: "RealizeError" }, errorWrapped);
403
+ this.mc.logger.sendErrorEvent({ eventName: "RealizeError" }, errorWrapped);
394
404
  });
395
405
  }
396
406
  return this.channelDeferred.promise;
@@ -780,13 +790,9 @@ export abstract class FluidDataStoreContext
780
790
  this.channelDeferred.resolve(this.channel);
781
791
  } catch (error) {
782
792
  this.channelDeferred?.reject(error);
783
- this.logger.sendErrorEvent(
793
+ this.mc.logger.sendErrorEvent(
784
794
  {
785
795
  eventName: "BindRuntimeError",
786
- fluidDataStoreId: {
787
- value: this.id,
788
- tag: TelemetryDataTag.CodeArtifact,
789
- },
790
796
  },
791
797
  error,
792
798
  );
@@ -842,8 +848,7 @@ export abstract class FluidDataStoreContext
842
848
  await this.realize();
843
849
  }
844
850
  assert(!!this.channel, 0x14c /* "Channel must exist when rebasing ops" */);
845
- const innerContents = contents as FluidDataStoreMessage;
846
- return this.channel.applyStashedOp(innerContents.content);
851
+ return this.channel.applyStashedOp(contents);
847
852
  }
848
853
 
849
854
  private verifyNotClosed(
@@ -910,11 +915,6 @@ export abstract class FluidDataStoreContext
910
915
  this.mc.logger.sendTelemetryEvent({
911
916
  eventName,
912
917
  type,
913
- fluidDataStoreId: {
914
- value: this.id,
915
- tag: TelemetryDataTag.CodeArtifact,
916
- },
917
- packageName: packagePathToTelemetryProperty(this.pkg),
918
918
  isSummaryInProgress: this.summarizerNode.isSummaryInProgress?.(),
919
919
  stack: generateStack(),
920
920
  });
@@ -936,8 +936,11 @@ export abstract class FluidDataStoreContext
936
936
  );
937
937
  }
938
938
 
939
- public async uploadBlob(blob: ArrayBufferLike): Promise<IFluidHandle<ArrayBufferLike>> {
940
- return this.containerRuntime.uploadBlob(blob);
939
+ public async uploadBlob(
940
+ blob: ArrayBufferLike,
941
+ signal?: AbortSignal,
942
+ ): Promise<IFluidHandle<ArrayBufferLike>> {
943
+ return this.containerRuntime.uploadBlob(blob, signal);
941
944
  }
942
945
  }
943
946
 
@@ -3,9 +3,9 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { IDisposable, ITelemetryBaseLogger } from "@fluidframework/common-definitions";
7
- import { assert, Deferred, Lazy } from "@fluidframework/common-utils";
8
- import { ChildLogger, ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
6
+ import { assert, Deferred, Lazy } from "@fluidframework/core-utils";
7
+ import { IDisposable, ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
8
+ import { createChildLogger, ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
9
9
  import { FluidDataStoreContext, LocalFluidDataStoreContext } from "./dataStoreContext";
10
10
 
11
11
  export class DataStoreContexts implements Iterable<[string, FluidDataStoreContext]>, IDisposable {
@@ -45,7 +45,7 @@ export class DataStoreContexts implements Iterable<[string, FluidDataStoreContex
45
45
  private readonly _logger: ITelemetryLoggerExt;
46
46
 
47
47
  constructor(baseLogger: ITelemetryBaseLogger) {
48
- this._logger = ChildLogger.create(baseLogger);
48
+ this._logger = createChildLogger({ logger: baseLogger });
49
49
  }
50
50
 
51
51
  [Symbol.iterator](): Iterator<[string, FluidDataStoreContext]> {
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { UsageError } from "@fluidframework/container-utils";
5
+ import { UsageError } from "@fluidframework/telemetry-utils";
6
6
  import {
7
7
  FluidDataStoreRegistryEntry,
8
8
  IFluidDataStoreRegistry,
package/src/dataStores.ts CHANGED
@@ -3,12 +3,12 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ITelemetryBaseLogger, IDisposable } from "@fluidframework/common-definitions";
7
6
  import {
8
- DataCorruptionError,
9
- extractSafePropertiesFromMessage,
10
- } from "@fluidframework/container-utils";
11
- import { IFluidHandle, IRequest } from "@fluidframework/core-interfaces";
7
+ ITelemetryBaseLogger,
8
+ IDisposable,
9
+ IFluidHandle,
10
+ IRequest,
11
+ } from "@fluidframework/core-interfaces";
12
12
  import { FluidObjectHandle } from "@fluidframework/datastore";
13
13
  import { ISequencedDocumentMessage, ISnapshotTree } from "@fluidframework/protocol-definitions";
14
14
  import {
@@ -38,15 +38,16 @@ import {
38
38
  unpackChildNodesUsedRoutes,
39
39
  } from "@fluidframework/runtime-utils";
40
40
  import {
41
- ChildLogger,
42
- loggerToMonitoringContext,
41
+ createChildMonitoringContext,
42
+ DataCorruptionError,
43
+ extractSafePropertiesFromMessage,
43
44
  LoggingError,
44
45
  MonitoringContext,
45
- TelemetryDataTag,
46
+ tagCodeArtifacts,
46
47
  } from "@fluidframework/telemetry-utils";
47
48
  import { AttachState } from "@fluidframework/container-definitions";
48
49
  import { buildSnapshotTree } from "@fluidframework/driver-utils";
49
- import { assert, Lazy } from "@fluidframework/common-utils";
50
+ import { assert, Lazy } from "@fluidframework/core-utils";
50
51
  import { v4 as uuid } from "uuid";
51
52
  import { DataStoreContexts } from "./dataStoreContexts";
52
53
  import {
@@ -66,7 +67,7 @@ import { StorageServiceWithAttachBlobs } from "./storageServiceWithAttachBlobs";
66
67
  import { IDataStoreAliasMessage, isDataStoreAliasMessage } from "./dataStore";
67
68
  import {
68
69
  GCNodeType,
69
- sweepDatastoresKey,
70
+ disableDatastoreSweepKey,
70
71
  throwOnTombstoneLoadKey,
71
72
  sendGCUnexpectedUsageEvent,
72
73
  } from "./gc";
@@ -132,7 +133,7 @@ export class DataStores implements IDisposable {
132
133
  private readonly aliasMap: Map<string, string>,
133
134
  private readonly contexts: DataStoreContexts = new DataStoreContexts(baseLogger),
134
135
  ) {
135
- this.mc = loggerToMonitoringContext(ChildLogger.create(baseLogger));
136
+ this.mc = createChildMonitoringContext({ logger: baseLogger });
136
137
  this.containerRuntimeHandle = new FluidObjectHandle(
137
138
  this.runtime,
138
139
  "/",
@@ -238,10 +239,7 @@ export class DataStores implements IDisposable {
238
239
  "Duplicate DataStore created with existing id",
239
240
  {
240
241
  ...extractSafePropertiesFromMessage(message),
241
- dataStoreId: {
242
- value: attachMessage.id,
243
- tag: TelemetryDataTag.CodeArtifact,
244
- },
242
+ ...tagCodeArtifacts({ dataStoreId: attachMessage.id }),
245
243
  },
246
244
  );
247
245
  throw error;
@@ -430,8 +428,7 @@ export class DataStores implements IDisposable {
430
428
  ) {
431
429
  const envelope = message.contents as IEnvelope;
432
430
  const transformed = { ...message, contents: envelope.contents };
433
- const request = { url: envelope.address };
434
- this.validateNotDeleted(envelope.address, request);
431
+ this.validateNotDeleted(envelope.address);
435
432
  const context = this.contexts.get(envelope.address);
436
433
  assert(!!context, 0x162 /* "There should be a store context for the op" */);
437
434
  context.process(transformed, local, localMessageMetadata);
@@ -450,114 +447,154 @@ export class DataStores implements IDisposable {
450
447
  requestHeaderData: RuntimeHeaderData,
451
448
  ): Promise<FluidDataStoreContext> {
452
449
  const headerData = { ...defaultRuntimeHeaderData, ...requestHeaderData };
453
- const request = { url: id };
454
-
455
- this.validateNotDeleted(id, request, headerData);
450
+ this.validateNotDeleted(id, headerData);
456
451
 
457
452
  const context = await this.contexts.getBoundOrRemoted(id, headerData.wait);
458
453
  if (context === undefined) {
459
454
  // The requested data store does not exits. Throw a 404 response exception.
455
+ const request: IRequest = { url: id };
460
456
  throw responseToException(create404Response(request), request);
461
457
  }
462
458
 
463
- this.validateNotTombstoned(context, request, requestHeaderData);
459
+ this.validateNotTombstoned(context, requestHeaderData);
464
460
 
465
461
  return context;
466
462
  }
467
463
 
468
464
  /**
469
- * Validate that the data store had not been deleted by GC.
470
- *
465
+ * Returns the data store requested with the given id if available. Otherwise, returns undefined.
466
+ */
467
+ public async getDataStoreIfAvailable(
468
+ id: string,
469
+ requestHeaderData: RuntimeHeaderData,
470
+ ): Promise<FluidDataStoreContext | undefined> {
471
+ // If the data store has been deleted, return undefined.
472
+ if (this.checkIfDeleted(id, requestHeaderData)) {
473
+ return undefined;
474
+ }
475
+ const headerData = { ...defaultRuntimeHeaderData, ...requestHeaderData };
476
+ const context = await this.contexts.getBoundOrRemoted(id, headerData.wait);
477
+ if (context === undefined) {
478
+ return undefined;
479
+ }
480
+ // Check if the data store is tombstoned. If so, we want to log a telemetry event.
481
+ this.checkIfTombstoned(context, requestHeaderData);
482
+ return context;
483
+ }
484
+
485
+ /**
486
+ * Checks if the data store has been deleted by GC.
471
487
  * @param id - data store id
472
488
  * @param request - the request information to log if the validation detects the data store has been deleted
473
489
  * @param requestHeaderData - the request header information to log if the validation detects the data store has been deleted
490
+ * @returns true if the data store is deleted. Otherwise, returns false.
474
491
  */
475
- private validateNotDeleted(
476
- id: string,
477
- request: IRequest,
478
- requestHeaderData?: RuntimeHeaderData,
479
- ) {
492
+ private checkIfDeleted(id: string, requestHeaderData?: RuntimeHeaderData) {
480
493
  const dataStoreNodePath = `/${id}`;
481
- if (this.isDataStoreDeleted(dataStoreNodePath)) {
482
- assert(
483
- !this.contexts.has(id),
484
- 0x570 /* Inconsistent state! GC says the data store is deleted, but the data store is not deleted from the runtime. */,
485
- );
494
+ if (!this.isDataStoreDeleted(dataStoreNodePath)) {
495
+ return false;
496
+ }
497
+ assert(
498
+ !this.contexts.has(id),
499
+ 0x570 /* Inconsistent state! GC says the data store is deleted, but the data store is not deleted from the runtime. */,
500
+ );
501
+ sendGCUnexpectedUsageEvent(
502
+ this.mc,
503
+ {
504
+ eventName: "GC_Deleted_DataStore_Requested",
505
+ category: "error",
506
+ isSummarizerClient: this.runtime.clientDetails.type === summarizerClientType,
507
+ id,
508
+ headers: JSON.stringify(requestHeaderData),
509
+ gcTombstoneEnforcementAllowed: this.runtime.gcTombstoneEnforcementAllowed,
510
+ },
511
+ undefined /* packagePath */,
512
+ );
513
+ return true;
514
+ }
515
+
516
+ /**
517
+ * Validate that the data store had not been deleted by GC.
518
+ * @param id - data store id
519
+ * @param requestHeaderData - the request header information to log if the validation detects the data store has been deleted
520
+ */
521
+ private validateNotDeleted(id: string, requestHeaderData?: RuntimeHeaderData) {
522
+ if (this.checkIfDeleted(id, requestHeaderData)) {
486
523
  // The requested data store is removed by gc. Create a 404 gc response exception.
487
- const error = responseToException(
524
+ const request: IRequest = { url: id };
525
+ throw responseToException(
488
526
  createResponseError(404, "DataStore was deleted", request),
489
527
  request,
490
528
  );
491
- sendGCUnexpectedUsageEvent(
492
- this.mc,
493
- {
494
- eventName: "GC_Deleted_DataStore_Requested",
495
- category: "error",
496
- isSummarizerClient: this.runtime.clientDetails.type === summarizerClientType,
497
- headers: JSON.stringify(requestHeaderData),
498
- gcTombstoneEnforcementAllowed: this.runtime.gcTombstoneEnforcementAllowed,
499
- },
500
- undefined /** packagePath */,
501
- error,
502
- );
503
- throw error;
504
529
  }
505
530
  }
506
531
 
532
+ /**
533
+ * Checks if the data store has not been marked as tombstone by GC or not.
534
+ * @param context - the data store context in question
535
+ * @param requestHeaderData - the request header information to log if the validation detects the data store has been tombstoned
536
+ * @returns true if the data store is tombstoned. Otherwise, returns false.
537
+ */
538
+ private checkIfTombstoned(
539
+ context: FluidDataStoreContext,
540
+ requestHeaderData: RuntimeHeaderData,
541
+ ) {
542
+ if (!context.tombstoned) {
543
+ return false;
544
+ }
545
+ const logErrorEvent = this.throwOnTombstoneLoad && !requestHeaderData.allowTombstone;
546
+ sendGCUnexpectedUsageEvent(
547
+ this.mc,
548
+ {
549
+ eventName: "GC_Tombstone_DataStore_Requested",
550
+ category: logErrorEvent ? "error" : "generic",
551
+ isSummarizerClient: this.runtime.clientDetails.type === summarizerClientType,
552
+ id: context.id,
553
+ headers: JSON.stringify(requestHeaderData),
554
+ gcTombstoneEnforcementAllowed: this.runtime.gcTombstoneEnforcementAllowed,
555
+ },
556
+ context.isLoaded ? context.packagePath : undefined,
557
+ );
558
+ return true;
559
+ }
560
+
507
561
  /**
508
562
  * Validates that the data store context requested has not been marked as tombstone by GC.
509
- *
510
563
  * @param context - the data store context in question
511
564
  * @param request - the request information to log if the validation detects the data store has been tombstoned
512
- * @param headerData - the request header information to log if the validation detects the data store has been tombstoned
565
+ * @param requestHeaderData - the request header information to log if the validation detects the data store has been tombstoned
513
566
  */
514
567
  private validateNotTombstoned(
515
568
  context: FluidDataStoreContext,
516
- request: IRequest,
517
- headerData: RuntimeHeaderData,
569
+ requestHeaderData: RuntimeHeaderData,
518
570
  ) {
519
- if (context.tombstoned) {
520
- const shouldFail = this.throwOnTombstoneLoad && !headerData.allowTombstone;
521
-
571
+ if (this.checkIfTombstoned(context, requestHeaderData)) {
522
572
  // The requested data store is removed by gc. Create a 404 gc response exception.
573
+ const request: IRequest = { url: context.id };
523
574
  const error = responseToException(
524
575
  createResponseError(404, "DataStore was deleted", request, {
525
576
  [TombstoneResponseHeaderKey]: true,
526
577
  }),
527
578
  request,
528
579
  );
529
- sendGCUnexpectedUsageEvent(
530
- this.mc,
531
- {
532
- eventName: "GC_Tombstone_DataStore_Requested",
533
- category: shouldFail ? "error" : "generic",
534
- isSummarizerClient: this.runtime.clientDetails.type === summarizerClientType,
535
- headers: JSON.stringify(headerData),
536
- gcTombstoneEnforcementAllowed: this.runtime.gcTombstoneEnforcementAllowed,
537
- },
538
- context.isLoaded ? context.packagePath : undefined,
539
- error,
540
- );
541
-
542
- if (shouldFail) {
580
+ // Throw an error if configured via options and via request headers.
581
+ if (this.throwOnTombstoneLoad && !requestHeaderData.allowTombstone) {
543
582
  throw error;
544
583
  }
545
584
  }
546
585
  }
547
586
 
548
- public processSignal(address: string, message: IInboundSignalMessage, local: boolean) {
549
- const request = { url: address };
550
- this.validateNotDeleted(address, request);
551
- const context = this.contexts.get(address);
587
+ public processSignal(fluidDataStoreId: string, message: IInboundSignalMessage, local: boolean) {
588
+ this.validateNotDeleted(fluidDataStoreId);
589
+ const context = this.contexts.get(fluidDataStoreId);
552
590
  if (!context) {
553
591
  // Attach message may not have been processed yet
554
592
  assert(!local, 0x163 /* "Missing datastore for local signal" */);
555
593
  this.mc.logger.sendTelemetryEvent({
556
594
  eventName: "SignalFluidDataStoreNotFound",
557
- fluidDataStoreId: {
558
- value: address,
559
- tag: TelemetryDataTag.CodeArtifact,
560
- },
595
+ ...tagCodeArtifacts({
596
+ fluidDataStoreId,
597
+ }),
561
598
  });
562
599
  return;
563
600
  }
@@ -566,7 +603,7 @@ export class DataStores implements IDisposable {
566
603
  }
567
604
 
568
605
  public setConnectionState(connected: boolean, clientId?: string) {
569
- for (const [fluidDataStore, context] of this.contexts) {
606
+ for (const [fluidDataStoreId, context] of this.contexts) {
570
607
  try {
571
608
  context.setConnectionState(connected, clientId);
572
609
  } catch (error) {
@@ -574,7 +611,9 @@ export class DataStores implements IDisposable {
574
611
  {
575
612
  eventName: "SetConnectionStateError",
576
613
  clientId,
577
- fluidDataStore,
614
+ ...tagCodeArtifacts({
615
+ fluidDataStoreId,
616
+ }),
578
617
  details: JSON.stringify({
579
618
  runtimeConnected: this.runtime.connected,
580
619
  connected,
@@ -781,11 +820,11 @@ export class DataStores implements IDisposable {
781
820
  * Delete data stores and its objects that are sweep ready.
782
821
  * @param sweepReadyDataStoreRoutes - The routes of data stores and its objects that are sweep ready and should
783
822
  * be deleted.
784
- * @returns - The routes of data stores and its objects that were deleted.
823
+ * @returns The routes of data stores and its objects that were deleted.
785
824
  */
786
825
  public deleteSweepReadyNodes(sweepReadyDataStoreRoutes: string[]): string[] {
787
826
  // If sweep for data stores is not enabled, return empty list indicating nothing is deleted.
788
- if (this.mc.config.getBoolean(sweepDatastoresKey) !== true) {
827
+ if (this.mc.config.getBoolean(disableDatastoreSweepKey) === true) {
789
828
  return [];
790
829
  }
791
830
  for (const route of sweepReadyDataStoreRoutes) {
@@ -0,0 +1,111 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { EventForwarder } from "@fluid-internal/client-utils";
7
+ import {
8
+ IDeltaManager,
9
+ IDeltaManagerEvents,
10
+ IDeltaQueue,
11
+ IDeltaSender,
12
+ ReadOnlyInfo,
13
+ } from "@fluidframework/container-definitions";
14
+ import {
15
+ IClientConfiguration,
16
+ IClientDetails,
17
+ IDocumentMessage,
18
+ ISequencedDocumentMessage,
19
+ ISignalMessage,
20
+ } from "@fluidframework/protocol-definitions";
21
+
22
+ /**
23
+ * Base class for creating proxy to the real delta manager. It implements all required methods on IDeltaManager and
24
+ * proxy implementations can override specific methods.
25
+ */
26
+ export class DeltaManagerProxyBase
27
+ extends EventForwarder<IDeltaManagerEvents>
28
+ implements IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>
29
+ {
30
+ public get IDeltaSender(): IDeltaSender {
31
+ return this;
32
+ }
33
+
34
+ public get inbound(): IDeltaQueue<ISequencedDocumentMessage> {
35
+ return this.deltaManager.inbound;
36
+ }
37
+
38
+ public get outbound(): IDeltaQueue<IDocumentMessage[]> {
39
+ return this.deltaManager.outbound;
40
+ }
41
+
42
+ public get inboundSignal(): IDeltaQueue<ISignalMessage> {
43
+ return this.deltaManager.inboundSignal;
44
+ }
45
+
46
+ public get minimumSequenceNumber(): number {
47
+ return this.deltaManager.minimumSequenceNumber;
48
+ }
49
+
50
+ public get lastSequenceNumber(): number {
51
+ return this.deltaManager.lastSequenceNumber;
52
+ }
53
+
54
+ public get lastMessage() {
55
+ return this.deltaManager.lastMessage;
56
+ }
57
+
58
+ public get lastKnownSeqNumber() {
59
+ return this.deltaManager.lastKnownSeqNumber;
60
+ }
61
+
62
+ public get initialSequenceNumber(): number {
63
+ return this.deltaManager.initialSequenceNumber;
64
+ }
65
+
66
+ public get hasCheckpointSequenceNumber() {
67
+ return this.deltaManager.hasCheckpointSequenceNumber;
68
+ }
69
+
70
+ public get clientDetails(): IClientDetails {
71
+ return this.deltaManager.clientDetails;
72
+ }
73
+
74
+ public get version(): string {
75
+ return this.deltaManager.version;
76
+ }
77
+
78
+ public get maxMessageSize(): number {
79
+ return this.deltaManager.maxMessageSize;
80
+ }
81
+
82
+ public get serviceConfiguration(): IClientConfiguration | undefined {
83
+ return this.deltaManager.serviceConfiguration;
84
+ }
85
+
86
+ public get active(): boolean {
87
+ return this.deltaManager.active;
88
+ }
89
+
90
+ public get readOnlyInfo(): ReadOnlyInfo {
91
+ return this.deltaManager.readOnlyInfo;
92
+ }
93
+
94
+ constructor(
95
+ protected readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
96
+ ) {
97
+ super(deltaManager);
98
+ }
99
+
100
+ public dispose(): void {
101
+ super.dispose();
102
+ }
103
+
104
+ public submitSignal(content: any): void {
105
+ return this.deltaManager.submitSignal(content);
106
+ }
107
+
108
+ public flush(): void {
109
+ return this.deltaManager.flush();
110
+ }
111
+ }