@fluidframework/container-runtime 2.0.0-dev.2.2.0.111723 → 2.0.0-dev.3.1.0.125672

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 (365) hide show
  1. package/.eslintrc.js +21 -10
  2. package/.mocharc.js +2 -2
  3. package/api-extractor.json +2 -2
  4. package/dist/batchTracker.d.ts +1 -2
  5. package/dist/batchTracker.d.ts.map +1 -1
  6. package/dist/batchTracker.js +2 -1
  7. package/dist/batchTracker.js.map +1 -1
  8. package/dist/blobManager.d.ts +62 -28
  9. package/dist/blobManager.d.ts.map +1 -1
  10. package/dist/blobManager.js +256 -102
  11. package/dist/blobManager.js.map +1 -1
  12. package/dist/connectionTelemetry.d.ts.map +1 -1
  13. package/dist/connectionTelemetry.js +11 -9
  14. package/dist/connectionTelemetry.js.map +1 -1
  15. package/dist/containerHandleContext.d.ts.map +1 -1
  16. package/dist/containerHandleContext.js +3 -1
  17. package/dist/containerHandleContext.js.map +1 -1
  18. package/dist/containerRuntime.d.ts +110 -78
  19. package/dist/containerRuntime.d.ts.map +1 -1
  20. package/dist/containerRuntime.js +336 -331
  21. package/dist/containerRuntime.js.map +1 -1
  22. package/dist/dataStore.d.ts.map +1 -1
  23. package/dist/dataStore.js +11 -9
  24. package/dist/dataStore.js.map +1 -1
  25. package/dist/dataStoreContext.d.ts +2 -1
  26. package/dist/dataStoreContext.d.ts.map +1 -1
  27. package/dist/dataStoreContext.js +40 -23
  28. package/dist/dataStoreContext.js.map +1 -1
  29. package/dist/dataStoreContexts.d.ts.map +1 -1
  30. package/dist/dataStoreContexts.js +7 -3
  31. package/dist/dataStoreContexts.js.map +1 -1
  32. package/dist/dataStoreRegistry.d.ts.map +1 -1
  33. package/dist/dataStoreRegistry.js +3 -1
  34. package/dist/dataStoreRegistry.js.map +1 -1
  35. package/dist/dataStores.d.ts +12 -9
  36. package/dist/dataStores.d.ts.map +1 -1
  37. package/dist/dataStores.js +69 -46
  38. package/dist/dataStores.js.map +1 -1
  39. package/dist/deltaScheduler.d.ts.map +1 -1
  40. package/dist/deltaScheduler.js +8 -3
  41. package/dist/deltaScheduler.js.map +1 -1
  42. package/dist/garbageCollection.d.ts +57 -42
  43. package/dist/garbageCollection.d.ts.map +1 -1
  44. package/dist/garbageCollection.js +371 -239
  45. package/dist/garbageCollection.js.map +1 -1
  46. package/dist/garbageCollectionConstants.d.ts +23 -0
  47. package/dist/garbageCollectionConstants.d.ts.map +1 -0
  48. package/dist/garbageCollectionConstants.js +36 -0
  49. package/dist/garbageCollectionConstants.js.map +1 -0
  50. package/dist/garbageCollectionHelpers.d.ts +15 -0
  51. package/dist/garbageCollectionHelpers.d.ts.map +1 -0
  52. package/dist/garbageCollectionHelpers.js +27 -0
  53. package/dist/garbageCollectionHelpers.js.map +1 -0
  54. package/dist/gcSweepReadyUsageDetection.d.ts +5 -5
  55. package/dist/gcSweepReadyUsageDetection.d.ts.map +1 -1
  56. package/dist/gcSweepReadyUsageDetection.js +15 -11
  57. package/dist/gcSweepReadyUsageDetection.js.map +1 -1
  58. package/dist/index.d.ts +4 -3
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +5 -6
  61. package/dist/index.js.map +1 -1
  62. package/dist/opLifecycle/batchManager.d.ts +42 -0
  63. package/dist/opLifecycle/batchManager.d.ts.map +1 -0
  64. package/dist/opLifecycle/batchManager.js +124 -0
  65. package/dist/opLifecycle/batchManager.js.map +1 -0
  66. package/dist/opLifecycle/definitions.d.ts +64 -0
  67. package/dist/opLifecycle/definitions.d.ts.map +1 -0
  68. package/dist/opLifecycle/definitions.js +7 -0
  69. package/dist/opLifecycle/definitions.js.map +1 -0
  70. package/dist/opLifecycle/index.d.ts +12 -0
  71. package/dist/opLifecycle/index.d.ts.map +1 -0
  72. package/dist/opLifecycle/index.js +22 -0
  73. package/dist/opLifecycle/index.js.map +1 -0
  74. package/dist/{opCompressor.d.ts → opLifecycle/opCompressor.d.ts} +3 -3
  75. package/dist/opLifecycle/opCompressor.d.ts.map +1 -0
  76. package/dist/opLifecycle/opCompressor.js +67 -0
  77. package/dist/opLifecycle/opCompressor.js.map +1 -0
  78. package/dist/{opDecompressor.d.ts → opLifecycle/opDecompressor.d.ts} +2 -1
  79. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -0
  80. package/dist/{opDecompressor.js → opLifecycle/opDecompressor.js} +37 -21
  81. package/dist/opLifecycle/opDecompressor.js.map +1 -0
  82. package/dist/opLifecycle/opSplitter.d.ts +49 -0
  83. package/dist/opLifecycle/opSplitter.d.ts.map +1 -0
  84. package/dist/opLifecycle/opSplitter.js +173 -0
  85. package/dist/opLifecycle/opSplitter.js.map +1 -0
  86. package/dist/opLifecycle/outbox.d.ts +52 -0
  87. package/dist/opLifecycle/outbox.d.ts.map +1 -0
  88. package/dist/opLifecycle/outbox.js +164 -0
  89. package/dist/opLifecycle/outbox.js.map +1 -0
  90. package/dist/opLifecycle/remoteMessageProcessor.d.ts +26 -0
  91. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  92. package/dist/opLifecycle/remoteMessageProcessor.js +96 -0
  93. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -0
  94. package/dist/opProperties.d.ts.map +1 -1
  95. package/dist/opProperties.js +1 -3
  96. package/dist/opProperties.js.map +1 -1
  97. package/dist/orderedClientElection.d.ts.map +1 -1
  98. package/dist/orderedClientElection.js +10 -4
  99. package/dist/orderedClientElection.js.map +1 -1
  100. package/dist/packageVersion.d.ts +1 -1
  101. package/dist/packageVersion.js +1 -1
  102. package/dist/packageVersion.js.map +1 -1
  103. package/dist/pendingStateManager.d.ts +4 -13
  104. package/dist/pendingStateManager.d.ts.map +1 -1
  105. package/dist/pendingStateManager.js +134 -161
  106. package/dist/pendingStateManager.js.map +1 -1
  107. package/dist/runWhileConnectedCoordinator.d.ts.map +1 -1
  108. package/dist/runWhileConnectedCoordinator.js.map +1 -1
  109. package/dist/runningSummarizer.d.ts.map +1 -1
  110. package/dist/runningSummarizer.js +34 -22
  111. package/dist/runningSummarizer.js.map +1 -1
  112. package/dist/scheduleManager.d.ts +0 -1
  113. package/dist/scheduleManager.d.ts.map +1 -1
  114. package/dist/scheduleManager.js +11 -21
  115. package/dist/scheduleManager.js.map +1 -1
  116. package/dist/serializedSnapshotStorage.d.ts.map +1 -1
  117. package/dist/serializedSnapshotStorage.js +3 -1
  118. package/dist/serializedSnapshotStorage.js.map +1 -1
  119. package/dist/summarizer.d.ts +2 -3
  120. package/dist/summarizer.d.ts.map +1 -1
  121. package/dist/summarizer.js +39 -18
  122. package/dist/summarizer.js.map +1 -1
  123. package/dist/summarizerClientElection.d.ts +1 -2
  124. package/dist/summarizerClientElection.d.ts.map +1 -1
  125. package/dist/summarizerClientElection.js +3 -30
  126. package/dist/summarizerClientElection.js.map +1 -1
  127. package/dist/summarizerHandle.d.ts.map +1 -1
  128. package/dist/summarizerHandle.js.map +1 -1
  129. package/dist/summarizerHeuristics.d.ts.map +1 -1
  130. package/dist/summarizerHeuristics.js +6 -9
  131. package/dist/summarizerHeuristics.js.map +1 -1
  132. package/dist/summarizerTypes.d.ts +22 -25
  133. package/dist/summarizerTypes.d.ts.map +1 -1
  134. package/dist/summarizerTypes.js.map +1 -1
  135. package/dist/summaryCollection.d.ts.map +1 -1
  136. package/dist/summaryCollection.js +18 -8
  137. package/dist/summaryCollection.js.map +1 -1
  138. package/dist/summaryFormat.d.ts.map +1 -1
  139. package/dist/summaryFormat.js +18 -11
  140. package/dist/summaryFormat.js.map +1 -1
  141. package/dist/summaryGenerator.d.ts.map +1 -1
  142. package/dist/summaryGenerator.js +32 -14
  143. package/dist/summaryGenerator.js.map +1 -1
  144. package/dist/summaryManager.d.ts.map +1 -1
  145. package/dist/summaryManager.js +21 -9
  146. package/dist/summaryManager.js.map +1 -1
  147. package/dist/throttler.d.ts +2 -2
  148. package/dist/throttler.d.ts.map +1 -1
  149. package/dist/throttler.js +4 -4
  150. package/dist/throttler.js.map +1 -1
  151. package/garbageCollection.md +15 -2
  152. package/lib/batchTracker.d.ts +1 -2
  153. package/lib/batchTracker.d.ts.map +1 -1
  154. package/lib/batchTracker.js +2 -1
  155. package/lib/batchTracker.js.map +1 -1
  156. package/lib/blobManager.d.ts +62 -28
  157. package/lib/blobManager.d.ts.map +1 -1
  158. package/lib/blobManager.js +259 -105
  159. package/lib/blobManager.js.map +1 -1
  160. package/lib/connectionTelemetry.d.ts.map +1 -1
  161. package/lib/connectionTelemetry.js +11 -9
  162. package/lib/connectionTelemetry.js.map +1 -1
  163. package/lib/containerHandleContext.d.ts.map +1 -1
  164. package/lib/containerHandleContext.js +3 -1
  165. package/lib/containerHandleContext.js.map +1 -1
  166. package/lib/containerRuntime.d.ts +110 -78
  167. package/lib/containerRuntime.d.ts.map +1 -1
  168. package/lib/containerRuntime.js +340 -334
  169. package/lib/containerRuntime.js.map +1 -1
  170. package/lib/dataStore.d.ts.map +1 -1
  171. package/lib/dataStore.js +11 -9
  172. package/lib/dataStore.js.map +1 -1
  173. package/lib/dataStoreContext.d.ts +2 -1
  174. package/lib/dataStoreContext.d.ts.map +1 -1
  175. package/lib/dataStoreContext.js +41 -24
  176. package/lib/dataStoreContext.js.map +1 -1
  177. package/lib/dataStoreContexts.d.ts.map +1 -1
  178. package/lib/dataStoreContexts.js +7 -3
  179. package/lib/dataStoreContexts.js.map +1 -1
  180. package/lib/dataStoreRegistry.d.ts.map +1 -1
  181. package/lib/dataStoreRegistry.js +3 -1
  182. package/lib/dataStoreRegistry.js.map +1 -1
  183. package/lib/dataStores.d.ts +12 -9
  184. package/lib/dataStores.d.ts.map +1 -1
  185. package/lib/dataStores.js +75 -52
  186. package/lib/dataStores.js.map +1 -1
  187. package/lib/deltaScheduler.d.ts.map +1 -1
  188. package/lib/deltaScheduler.js +9 -4
  189. package/lib/deltaScheduler.js.map +1 -1
  190. package/lib/garbageCollection.d.ts +57 -42
  191. package/lib/garbageCollection.d.ts.map +1 -1
  192. package/lib/garbageCollection.js +364 -232
  193. package/lib/garbageCollection.js.map +1 -1
  194. package/lib/garbageCollectionConstants.d.ts +23 -0
  195. package/lib/garbageCollectionConstants.d.ts.map +1 -0
  196. package/lib/garbageCollectionConstants.js +33 -0
  197. package/lib/garbageCollectionConstants.js.map +1 -0
  198. package/lib/garbageCollectionHelpers.d.ts +15 -0
  199. package/lib/garbageCollectionHelpers.d.ts.map +1 -0
  200. package/lib/garbageCollectionHelpers.js +23 -0
  201. package/lib/garbageCollectionHelpers.js.map +1 -0
  202. package/lib/gcSweepReadyUsageDetection.d.ts +5 -5
  203. package/lib/gcSweepReadyUsageDetection.d.ts.map +1 -1
  204. package/lib/gcSweepReadyUsageDetection.js +15 -11
  205. package/lib/gcSweepReadyUsageDetection.js.map +1 -1
  206. package/lib/index.d.ts +4 -3
  207. package/lib/index.d.ts.map +1 -1
  208. package/lib/index.js +3 -3
  209. package/lib/index.js.map +1 -1
  210. package/lib/opLifecycle/batchManager.d.ts +42 -0
  211. package/lib/opLifecycle/batchManager.d.ts.map +1 -0
  212. package/lib/opLifecycle/batchManager.js +120 -0
  213. package/lib/opLifecycle/batchManager.js.map +1 -0
  214. package/lib/opLifecycle/definitions.d.ts +64 -0
  215. package/lib/opLifecycle/definitions.d.ts.map +1 -0
  216. package/lib/opLifecycle/definitions.js +6 -0
  217. package/lib/opLifecycle/definitions.js.map +1 -0
  218. package/lib/opLifecycle/index.d.ts +12 -0
  219. package/lib/opLifecycle/index.d.ts.map +1 -0
  220. package/lib/opLifecycle/index.js +11 -0
  221. package/lib/opLifecycle/index.js.map +1 -0
  222. package/lib/{opCompressor.d.ts → opLifecycle/opCompressor.d.ts} +3 -3
  223. package/lib/opLifecycle/opCompressor.d.ts.map +1 -0
  224. package/lib/opLifecycle/opCompressor.js +63 -0
  225. package/lib/opLifecycle/opCompressor.js.map +1 -0
  226. package/lib/{opDecompressor.d.ts → opLifecycle/opDecompressor.d.ts} +2 -1
  227. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -0
  228. package/lib/{opDecompressor.js → opLifecycle/opDecompressor.js} +37 -21
  229. package/lib/opLifecycle/opDecompressor.js.map +1 -0
  230. package/lib/opLifecycle/opSplitter.d.ts +49 -0
  231. package/lib/opLifecycle/opSplitter.d.ts.map +1 -0
  232. package/lib/opLifecycle/opSplitter.js +168 -0
  233. package/lib/opLifecycle/opSplitter.js.map +1 -0
  234. package/lib/opLifecycle/outbox.d.ts +52 -0
  235. package/lib/opLifecycle/outbox.d.ts.map +1 -0
  236. package/lib/opLifecycle/outbox.js +160 -0
  237. package/lib/opLifecycle/outbox.js.map +1 -0
  238. package/lib/opLifecycle/remoteMessageProcessor.d.ts +26 -0
  239. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  240. package/lib/opLifecycle/remoteMessageProcessor.js +91 -0
  241. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -0
  242. package/lib/opProperties.d.ts.map +1 -1
  243. package/lib/opProperties.js +1 -3
  244. package/lib/opProperties.js.map +1 -1
  245. package/lib/orderedClientElection.d.ts.map +1 -1
  246. package/lib/orderedClientElection.js +10 -4
  247. package/lib/orderedClientElection.js.map +1 -1
  248. package/lib/packageVersion.d.ts +1 -1
  249. package/lib/packageVersion.js +1 -1
  250. package/lib/packageVersion.js.map +1 -1
  251. package/lib/pendingStateManager.d.ts +4 -13
  252. package/lib/pendingStateManager.d.ts.map +1 -1
  253. package/lib/pendingStateManager.js +134 -161
  254. package/lib/pendingStateManager.js.map +1 -1
  255. package/lib/runWhileConnectedCoordinator.d.ts.map +1 -1
  256. package/lib/runWhileConnectedCoordinator.js.map +1 -1
  257. package/lib/runningSummarizer.d.ts.map +1 -1
  258. package/lib/runningSummarizer.js +35 -23
  259. package/lib/runningSummarizer.js.map +1 -1
  260. package/lib/scheduleManager.d.ts +0 -1
  261. package/lib/scheduleManager.d.ts.map +1 -1
  262. package/lib/scheduleManager.js +11 -21
  263. package/lib/scheduleManager.js.map +1 -1
  264. package/lib/serializedSnapshotStorage.d.ts.map +1 -1
  265. package/lib/serializedSnapshotStorage.js +3 -1
  266. package/lib/serializedSnapshotStorage.js.map +1 -1
  267. package/lib/summarizer.d.ts +2 -3
  268. package/lib/summarizer.d.ts.map +1 -1
  269. package/lib/summarizer.js +39 -18
  270. package/lib/summarizer.js.map +1 -1
  271. package/lib/summarizerClientElection.d.ts +1 -2
  272. package/lib/summarizerClientElection.d.ts.map +1 -1
  273. package/lib/summarizerClientElection.js +3 -30
  274. package/lib/summarizerClientElection.js.map +1 -1
  275. package/lib/summarizerHandle.d.ts.map +1 -1
  276. package/lib/summarizerHandle.js.map +1 -1
  277. package/lib/summarizerHeuristics.d.ts.map +1 -1
  278. package/lib/summarizerHeuristics.js +6 -9
  279. package/lib/summarizerHeuristics.js.map +1 -1
  280. package/lib/summarizerTypes.d.ts +22 -25
  281. package/lib/summarizerTypes.d.ts.map +1 -1
  282. package/lib/summarizerTypes.js.map +1 -1
  283. package/lib/summaryCollection.d.ts.map +1 -1
  284. package/lib/summaryCollection.js +18 -8
  285. package/lib/summaryCollection.js.map +1 -1
  286. package/lib/summaryFormat.d.ts.map +1 -1
  287. package/lib/summaryFormat.js +20 -13
  288. package/lib/summaryFormat.js.map +1 -1
  289. package/lib/summaryGenerator.d.ts.map +1 -1
  290. package/lib/summaryGenerator.js +32 -14
  291. package/lib/summaryGenerator.js.map +1 -1
  292. package/lib/summaryManager.d.ts.map +1 -1
  293. package/lib/summaryManager.js +21 -9
  294. package/lib/summaryManager.js.map +1 -1
  295. package/lib/throttler.d.ts +2 -2
  296. package/lib/throttler.d.ts.map +1 -1
  297. package/lib/throttler.js +4 -4
  298. package/lib/throttler.js.map +1 -1
  299. package/package.json +28 -38
  300. package/prettier.config.cjs +1 -1
  301. package/src/batchTracker.ts +55 -50
  302. package/src/blobManager.ts +802 -541
  303. package/src/connectionTelemetry.ts +280 -249
  304. package/src/containerHandleContext.ts +27 -29
  305. package/src/containerRuntime.ts +3125 -2982
  306. package/src/dataStore.ts +172 -159
  307. package/src/dataStoreContext.ts +1049 -992
  308. package/src/dataStoreContexts.ts +178 -161
  309. package/src/dataStoreRegistry.ts +25 -20
  310. package/src/dataStores.ts +785 -711
  311. package/src/deltaScheduler.ts +158 -150
  312. package/src/garbageCollection.ts +1797 -1558
  313. package/src/garbageCollectionConstants.ts +38 -0
  314. package/src/garbageCollectionHelpers.ts +37 -0
  315. package/src/gcSweepReadyUsageDetection.ts +90 -84
  316. package/src/index.ts +68 -69
  317. package/src/opLifecycle/batchManager.ts +167 -0
  318. package/src/opLifecycle/definitions.ts +70 -0
  319. package/src/opLifecycle/index.ts +18 -0
  320. package/src/opLifecycle/opCompressor.ts +82 -0
  321. package/src/opLifecycle/opDecompressor.ts +124 -0
  322. package/src/opLifecycle/opSplitter.ts +238 -0
  323. package/src/opLifecycle/outbox.ts +228 -0
  324. package/src/opLifecycle/remoteMessageProcessor.ts +106 -0
  325. package/src/opProperties.ts +11 -9
  326. package/src/orderedClientElection.ts +489 -457
  327. package/src/packageVersion.ts +1 -1
  328. package/src/pendingStateManager.ts +379 -381
  329. package/src/runWhileConnectedCoordinator.ts +78 -71
  330. package/src/runningSummarizer.ts +619 -582
  331. package/src/scheduleManager.ts +299 -280
  332. package/src/serializedSnapshotStorage.ts +116 -111
  333. package/src/summarizer.ts +417 -381
  334. package/src/summarizerClientElection.ts +107 -129
  335. package/src/summarizerHandle.ts +11 -9
  336. package/src/summarizerHeuristics.ts +183 -186
  337. package/src/summarizerTypes.ts +344 -333
  338. package/src/summaryCollection.ts +378 -349
  339. package/src/summaryFormat.ts +146 -127
  340. package/src/summaryGenerator.ts +464 -406
  341. package/src/summaryManager.ts +377 -348
  342. package/src/throttler.ts +131 -122
  343. package/tsconfig.esnext.json +6 -6
  344. package/tsconfig.json +9 -13
  345. package/dist/batchManager.d.ts +0 -42
  346. package/dist/batchManager.d.ts.map +0 -1
  347. package/dist/batchManager.js +0 -83
  348. package/dist/batchManager.js.map +0 -1
  349. package/dist/opCompressor.d.ts.map +0 -1
  350. package/dist/opCompressor.js +0 -50
  351. package/dist/opCompressor.js.map +0 -1
  352. package/dist/opDecompressor.d.ts.map +0 -1
  353. package/dist/opDecompressor.js.map +0 -1
  354. package/lib/batchManager.d.ts +0 -42
  355. package/lib/batchManager.d.ts.map +0 -1
  356. package/lib/batchManager.js +0 -79
  357. package/lib/batchManager.js.map +0 -1
  358. package/lib/opCompressor.d.ts.map +0 -1
  359. package/lib/opCompressor.js +0 -46
  360. package/lib/opCompressor.js.map +0 -1
  361. package/lib/opDecompressor.d.ts.map +0 -1
  362. package/lib/opDecompressor.js.map +0 -1
  363. package/src/batchManager.ts +0 -108
  364. package/src/opCompressor.ts +0 -59
  365. package/src/opDecompressor.ts +0 -82
package/src/dataStore.ts CHANGED
@@ -7,13 +7,12 @@ import { ITelemetryLogger } from "@fluidframework/common-definitions";
7
7
  import { assert, unreachableCase } from "@fluidframework/common-utils";
8
8
  import { AttachState } from "@fluidframework/container-definitions";
9
9
  import { UsageError } from "@fluidframework/container-utils";
10
+ import { FluidObject, IFluidHandle, IRequest, IResponse } from "@fluidframework/core-interfaces";
10
11
  import {
11
- FluidObject,
12
- IFluidHandle,
13
- IRequest,
14
- IResponse,
15
- } from "@fluidframework/core-interfaces";
16
- import { AliasResult, IDataStore, IFluidDataStoreChannel } from "@fluidframework/runtime-definitions";
12
+ AliasResult,
13
+ IDataStore,
14
+ IFluidDataStoreChannel,
15
+ } from "@fluidframework/runtime-definitions";
17
16
  import { TelemetryDataTag } from "@fluidframework/telemetry-utils";
18
17
  import { ContainerRuntime } from "./containerRuntime";
19
18
  import { DataStores } from "./dataStores";
@@ -23,10 +22,10 @@ import { DataStores } from "./dataStores";
23
22
  * alias to a datastore
24
23
  */
25
24
  export interface IDataStoreAliasMessage {
26
- /** The internal id of the datastore */
27
- readonly internalId: string;
28
- /** The alias name to be assigned to the datastore */
29
- readonly alias: string;
25
+ /** The internal id of the datastore */
26
+ readonly internalId: string;
27
+ /** The alias name to be assigned to the datastore */
28
+ readonly alias: string;
30
29
  }
31
30
 
32
31
  /**
@@ -36,163 +35,177 @@ export interface IDataStoreAliasMessage {
36
35
  * @returns True if the {@link IDataStoreAliasMessage} is fully implemented, false otherwise
37
36
  */
38
37
  export const isDataStoreAliasMessage = (
39
- maybeDataStoreAliasMessage: any,
38
+ maybeDataStoreAliasMessage: any,
40
39
  ): maybeDataStoreAliasMessage is IDataStoreAliasMessage => {
41
- return typeof maybeDataStoreAliasMessage?.internalId === "string"
42
- && typeof maybeDataStoreAliasMessage?.alias === "string";
40
+ return (
41
+ typeof maybeDataStoreAliasMessage?.internalId === "string" &&
42
+ typeof maybeDataStoreAliasMessage?.alias === "string"
43
+ );
43
44
  };
44
45
 
45
46
  export const channelToDataStore = (
46
- fluidDataStoreChannel: IFluidDataStoreChannel,
47
- internalId: string,
48
- runtime: ContainerRuntime,
49
- datastores: DataStores,
50
- logger: ITelemetryLogger,
47
+ fluidDataStoreChannel: IFluidDataStoreChannel,
48
+ internalId: string,
49
+ runtime: ContainerRuntime,
50
+ datastores: DataStores,
51
+ logger: ITelemetryLogger,
51
52
  ): IDataStore => new DataStore(fluidDataStoreChannel, internalId, runtime, datastores, logger);
52
53
 
53
54
  enum AliasState {
54
- Aliased = "Aliased",
55
- Aliasing = "Aliasing",
56
- None = "None",
55
+ Aliased = "Aliased",
56
+ Aliasing = "Aliasing",
57
+ None = "None",
57
58
  }
58
59
 
59
60
  class DataStore implements IDataStore {
60
- private aliasState: AliasState = AliasState.None;
61
- private alias: string | undefined;
62
- private readonly pendingAliases: Map<string, Promise<AliasResult>>;
63
- private aliasResult: Promise<AliasResult> | undefined;
64
-
65
- async trySetAlias(alias: string): Promise<AliasResult> {
66
- if (alias.includes("/")) {
67
- throw new UsageError(`The alias cannot contain slashes: '${alias}'`);
68
- }
69
-
70
- switch (this.aliasState) {
71
- // If we're already aliasing, check if it's for the same value and return
72
- // the stored promise, otherwise return 'AlreadyAliased'
73
- case AliasState.Aliasing:
74
- assert(this.aliasResult !== undefined,
75
- 0x316 /* There should be a cached promise of in-progress aliasing */);
76
- await this.aliasResult;
77
- return this.alias === alias ? "Success" : "AlreadyAliased";
78
-
79
- // If this datastore is already aliased, return true only if this
80
- // is a repeated call for the same alias
81
- case AliasState.Aliased:
82
- return this.alias === alias ? "Success" : "AlreadyAliased";
83
-
84
- case AliasState.None: {
85
- const existingAlias = this.pendingAliases.get(alias);
86
- if (existingAlias !== undefined) {
87
- // There is already another datastore which will be aliased
88
- // to the same name
89
- return "Conflict";
90
- }
91
-
92
- // There is no current or past alias operation for this datastore,
93
- // or for this alias, so it is safe to continue execution
94
- break;
95
- }
96
-
97
- default: unreachableCase(this.aliasState);
98
- }
99
-
100
- this.aliasState = AliasState.Aliasing;
101
- this.aliasResult = this.trySetAliasInternal(alias);
102
- this.pendingAliases.set(alias, this.aliasResult);
103
- return this.aliasResult;
104
- }
105
-
106
- async trySetAliasInternal(alias: string): Promise<AliasResult> {
107
- const message: IDataStoreAliasMessage = {
108
- internalId: this.internalId,
109
- alias,
110
- };
111
-
112
- this.fluidDataStoreChannel.makeVisibleAndAttachGraph();
113
-
114
- if (this.runtime.attachState === AttachState.Detached) {
115
- const localResult = this.datastores.processAliasMessageCore(message);
116
- // Explicitly lock-out future attempts of aliasing,
117
- // regardless of result
118
- this.aliasState = AliasState.Aliased;
119
- return localResult ? "Success" : "Conflict";
120
- }
121
-
122
- const aliased = await this
123
- .ackBasedPromise<boolean>((resolve) => {
124
- this.runtime.submitDataStoreAliasOp(message, resolve);
125
- })
126
- .catch((error) => {
127
- this.logger.sendErrorEvent({
128
- eventName: "AliasingException",
129
- alias: {
130
- value: alias,
131
- tag: TelemetryDataTag.UserData,
132
- },
133
- internalId: {
134
- value: this.internalId,
135
- tag: TelemetryDataTag.CodeArtifact,
136
- },
137
- }, error);
138
-
139
- return false;
140
- }).finally(() => {
141
- this.pendingAliases.delete(alias);
142
- });
143
-
144
- if (!aliased) {
145
- this.aliasState = AliasState.None;
146
- this.aliasResult = undefined;
147
- return "Conflict";
148
- }
149
-
150
- this.alias = alias;
151
- this.aliasState = AliasState.Aliased;
152
- return "Success";
153
- }
154
-
155
- async request(request: IRequest): Promise<IResponse> {
156
- return this.fluidDataStoreChannel.request(request);
157
- }
158
-
159
- /**
160
- * {@inheritDoc @fluidframework/runtime-definitions#IDataStore.entryPoint}
161
- */
162
- get entryPoint(): IFluidHandle<FluidObject> | undefined {
163
- return this.fluidDataStoreChannel.entryPoint;
164
- }
165
-
166
- constructor(
167
- private readonly fluidDataStoreChannel: IFluidDataStoreChannel,
168
- private readonly internalId: string,
169
- private readonly runtime: ContainerRuntime,
170
- private readonly datastores: DataStores,
171
- private readonly logger: ITelemetryLogger,
172
- ) {
173
- this.pendingAliases = datastores.pendingAliases;
174
- }
175
-
176
- public get IFluidRouter() { return this.fluidDataStoreChannel; }
177
-
178
- private async ackBasedPromise<T>(
179
- executor: (resolve: (value: T | PromiseLike<T>) => void,
180
- reject: (reason?: any) => void) => void,
181
- ): Promise<T> {
182
- let rejectBecauseDispose: () => void;
183
- return new Promise<T>((resolve, reject) => {
184
- rejectBecauseDispose =
185
- () => reject(new Error("ContainerRuntime disposed while this ack-based Promise was pending"));
186
-
187
- if (this.runtime.disposed) {
188
- rejectBecauseDispose();
189
- return;
190
- }
191
-
192
- this.runtime.on("dispose", rejectBecauseDispose);
193
- executor(resolve, reject);
194
- }).finally(() => {
195
- this.runtime.off("dispose", rejectBecauseDispose);
196
- });
197
- }
61
+ private aliasState: AliasState = AliasState.None;
62
+ private alias: string | undefined;
63
+ private readonly pendingAliases: Map<string, Promise<AliasResult>>;
64
+ private aliasResult: Promise<AliasResult> | undefined;
65
+
66
+ async trySetAlias(alias: string): Promise<AliasResult> {
67
+ if (alias.includes("/")) {
68
+ throw new UsageError(`The alias cannot contain slashes: '${alias}'`);
69
+ }
70
+
71
+ switch (this.aliasState) {
72
+ // If we're already aliasing, check if it's for the same value and return
73
+ // the stored promise, otherwise return 'AlreadyAliased'
74
+ case AliasState.Aliasing:
75
+ assert(
76
+ this.aliasResult !== undefined,
77
+ 0x316 /* There should be a cached promise of in-progress aliasing */,
78
+ );
79
+ await this.aliasResult;
80
+ return this.alias === alias ? "Success" : "AlreadyAliased";
81
+
82
+ // If this datastore is already aliased, return true only if this
83
+ // is a repeated call for the same alias
84
+ case AliasState.Aliased:
85
+ return this.alias === alias ? "Success" : "AlreadyAliased";
86
+
87
+ case AliasState.None: {
88
+ const existingAlias = this.pendingAliases.get(alias);
89
+ if (existingAlias !== undefined) {
90
+ // There is already another datastore which will be aliased
91
+ // to the same name
92
+ return "Conflict";
93
+ }
94
+
95
+ // There is no current or past alias operation for this datastore,
96
+ // or for this alias, so it is safe to continue execution
97
+ break;
98
+ }
99
+
100
+ default:
101
+ unreachableCase(this.aliasState);
102
+ }
103
+
104
+ this.aliasState = AliasState.Aliasing;
105
+ this.aliasResult = this.trySetAliasInternal(alias);
106
+ this.pendingAliases.set(alias, this.aliasResult);
107
+ return this.aliasResult;
108
+ }
109
+
110
+ async trySetAliasInternal(alias: string): Promise<AliasResult> {
111
+ const message: IDataStoreAliasMessage = {
112
+ internalId: this.internalId,
113
+ alias,
114
+ };
115
+
116
+ this.fluidDataStoreChannel.makeVisibleAndAttachGraph();
117
+
118
+ if (this.runtime.attachState === AttachState.Detached) {
119
+ const localResult = this.datastores.processAliasMessageCore(message);
120
+ // Explicitly lock-out future attempts of aliasing,
121
+ // regardless of result
122
+ this.aliasState = AliasState.Aliased;
123
+ return localResult ? "Success" : "Conflict";
124
+ }
125
+
126
+ const aliased = await this.ackBasedPromise<boolean>((resolve) => {
127
+ this.runtime.submitDataStoreAliasOp(message, resolve);
128
+ })
129
+ .catch((error) => {
130
+ this.logger.sendErrorEvent(
131
+ {
132
+ eventName: "AliasingException",
133
+ alias: {
134
+ value: alias,
135
+ tag: TelemetryDataTag.UserData,
136
+ },
137
+ internalId: {
138
+ value: this.internalId,
139
+ tag: TelemetryDataTag.CodeArtifact,
140
+ },
141
+ },
142
+ error,
143
+ );
144
+
145
+ return false;
146
+ })
147
+ .finally(() => {
148
+ this.pendingAliases.delete(alias);
149
+ });
150
+
151
+ if (!aliased) {
152
+ this.aliasState = AliasState.None;
153
+ this.aliasResult = undefined;
154
+ return "Conflict";
155
+ }
156
+
157
+ this.alias = alias;
158
+ this.aliasState = AliasState.Aliased;
159
+ return "Success";
160
+ }
161
+
162
+ async request(request: IRequest): Promise<IResponse> {
163
+ return this.fluidDataStoreChannel.request(request);
164
+ }
165
+
166
+ /**
167
+ * {@inheritDoc @fluidframework/runtime-definitions#IDataStore.entryPoint}
168
+ */
169
+ get entryPoint(): IFluidHandle<FluidObject> | undefined {
170
+ return this.fluidDataStoreChannel.entryPoint;
171
+ }
172
+
173
+ constructor(
174
+ private readonly fluidDataStoreChannel: IFluidDataStoreChannel,
175
+ private readonly internalId: string,
176
+ private readonly runtime: ContainerRuntime,
177
+ private readonly datastores: DataStores,
178
+ private readonly logger: ITelemetryLogger,
179
+ ) {
180
+ this.pendingAliases = datastores.pendingAliases;
181
+ }
182
+
183
+ public get IFluidRouter() {
184
+ return this.fluidDataStoreChannel;
185
+ }
186
+
187
+ private async ackBasedPromise<T>(
188
+ executor: (
189
+ resolve: (value: T | PromiseLike<T>) => void,
190
+ reject: (reason?: any) => void,
191
+ ) => void,
192
+ ): Promise<T> {
193
+ let rejectBecauseDispose: () => void;
194
+ return new Promise<T>((resolve, reject) => {
195
+ rejectBecauseDispose = () =>
196
+ reject(
197
+ new Error("ContainerRuntime disposed while this ack-based Promise was pending"),
198
+ );
199
+
200
+ if (this.runtime.disposed) {
201
+ rejectBecauseDispose();
202
+ return;
203
+ }
204
+
205
+ this.runtime.on("dispose", rejectBecauseDispose);
206
+ executor(resolve, reject);
207
+ }).finally(() => {
208
+ this.runtime.off("dispose", rejectBecauseDispose);
209
+ });
210
+ }
198
211
  }