@fluidframework/container-runtime 2.0.0-rc.2.0.2 → 2.0.0-rc.3.0.1

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 (554) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/api-report/container-runtime.api.md +471 -52
  3. package/dist/batchTracker.d.ts +1 -1
  4. package/dist/batchTracker.d.ts.map +1 -1
  5. package/dist/batchTracker.js +4 -4
  6. package/dist/batchTracker.js.map +1 -1
  7. package/dist/blobManager.d.ts +33 -30
  8. package/dist/blobManager.d.ts.map +1 -1
  9. package/dist/blobManager.js +82 -107
  10. package/dist/blobManager.js.map +1 -1
  11. package/dist/channelCollection.d.ts +27 -22
  12. package/dist/channelCollection.d.ts.map +1 -1
  13. package/dist/channelCollection.js +155 -165
  14. package/dist/channelCollection.js.map +1 -1
  15. package/dist/connectionTelemetry.d.ts +3 -3
  16. package/dist/connectionTelemetry.d.ts.map +1 -1
  17. package/dist/connectionTelemetry.js +17 -17
  18. package/dist/connectionTelemetry.js.map +1 -1
  19. package/dist/containerHandleContext.d.ts.map +1 -1
  20. package/dist/containerHandleContext.js +2 -2
  21. package/dist/containerHandleContext.js.map +1 -1
  22. package/dist/containerRuntime.d.ts +42 -39
  23. package/dist/containerRuntime.d.ts.map +1 -1
  24. package/dist/containerRuntime.js +425 -292
  25. package/dist/containerRuntime.js.map +1 -1
  26. package/dist/dataStore.d.ts +1 -1
  27. package/dist/dataStore.d.ts.map +1 -1
  28. package/dist/dataStore.js +8 -8
  29. package/dist/dataStore.js.map +1 -1
  30. package/dist/dataStoreContext.d.ts +58 -19
  31. package/dist/dataStoreContext.d.ts.map +1 -1
  32. package/dist/dataStoreContext.js +169 -114
  33. package/dist/dataStoreContext.js.map +1 -1
  34. package/dist/dataStoreContexts.d.ts +1 -0
  35. package/dist/dataStoreContexts.d.ts.map +1 -1
  36. package/dist/dataStoreContexts.js +12 -11
  37. package/dist/dataStoreContexts.js.map +1 -1
  38. package/dist/dataStoreRegistry.d.ts +5 -1
  39. package/dist/dataStoreRegistry.d.ts.map +1 -1
  40. package/dist/dataStoreRegistry.js +4 -4
  41. package/dist/dataStoreRegistry.js.map +1 -1
  42. package/dist/deltaManagerSummarizerProxy.d.ts +1 -1
  43. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
  44. package/dist/deltaManagerSummarizerProxy.js.map +1 -1
  45. package/dist/deltaScheduler.d.ts +1 -1
  46. package/dist/deltaScheduler.d.ts.map +1 -1
  47. package/dist/deltaScheduler.js +6 -6
  48. package/dist/deltaScheduler.js.map +1 -1
  49. package/dist/error.d.ts +1 -1
  50. package/dist/error.d.ts.map +1 -1
  51. package/dist/error.js +4 -4
  52. package/dist/error.js.map +1 -1
  53. package/dist/gc/garbageCollection.d.ts +3 -2
  54. package/dist/gc/garbageCollection.d.ts.map +1 -1
  55. package/dist/gc/garbageCollection.js +23 -23
  56. package/dist/gc/garbageCollection.js.map +1 -1
  57. package/dist/gc/gcConfigs.d.ts +2 -2
  58. package/dist/gc/gcConfigs.d.ts.map +1 -1
  59. package/dist/gc/gcConfigs.js +4 -5
  60. package/dist/gc/gcConfigs.js.map +1 -1
  61. package/dist/gc/gcDefinitions.d.ts +4 -5
  62. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  63. package/dist/gc/gcDefinitions.js.map +1 -1
  64. package/dist/gc/gcHelpers.d.ts +5 -1
  65. package/dist/gc/gcHelpers.d.ts.map +1 -1
  66. package/dist/gc/gcHelpers.js +21 -12
  67. package/dist/gc/gcHelpers.js.map +1 -1
  68. package/dist/gc/gcSummaryStateTracker.d.ts +2 -2
  69. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  70. package/dist/gc/gcSummaryStateTracker.js +11 -11
  71. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  72. package/dist/gc/gcTelemetry.d.ts +2 -1
  73. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  74. package/dist/gc/gcTelemetry.js +11 -9
  75. package/dist/gc/gcTelemetry.js.map +1 -1
  76. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
  77. package/dist/gc/gcUnreferencedStateTracker.js +6 -6
  78. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  79. package/dist/gc/index.d.ts +1 -1
  80. package/dist/gc/index.d.ts.map +1 -1
  81. package/dist/gc/index.js +2 -1
  82. package/dist/gc/index.js.map +1 -1
  83. package/dist/index.d.ts +5 -2
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +12 -2
  86. package/dist/index.js.map +1 -1
  87. package/dist/legacy.d.ts +91 -0
  88. package/dist/messageTypes.d.ts +11 -5
  89. package/dist/messageTypes.d.ts.map +1 -1
  90. package/dist/messageTypes.js +4 -0
  91. package/dist/messageTypes.js.map +1 -1
  92. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  93. package/dist/opLifecycle/batchManager.js.map +1 -1
  94. package/dist/opLifecycle/definitions.d.ts +2 -20
  95. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  96. package/dist/opLifecycle/definitions.js.map +1 -1
  97. package/dist/opLifecycle/index.d.ts +3 -3
  98. package/dist/opLifecycle/index.d.ts.map +1 -1
  99. package/dist/opLifecycle/index.js +3 -1
  100. package/dist/opLifecycle/index.js.map +1 -1
  101. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  102. package/dist/opLifecycle/opCompressor.js +5 -6
  103. package/dist/opLifecycle/opCompressor.js.map +1 -1
  104. package/dist/opLifecycle/opDecompressor.d.ts +15 -4
  105. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  106. package/dist/opLifecycle/opDecompressor.js +62 -63
  107. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  108. package/dist/opLifecycle/opGroupingManager.d.ts +2 -1
  109. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  110. package/dist/opLifecycle/opGroupingManager.js +14 -16
  111. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  112. package/dist/opLifecycle/opSplitter.d.ts +12 -4
  113. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  114. package/dist/opLifecycle/opSplitter.js +63 -53
  115. package/dist/opLifecycle/opSplitter.js.map +1 -1
  116. package/dist/opLifecycle/outbox.d.ts +2 -1
  117. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  118. package/dist/opLifecycle/outbox.js +30 -29
  119. package/dist/opLifecycle/outbox.js.map +1 -1
  120. package/dist/opLifecycle/remoteMessageProcessor.d.ts +8 -0
  121. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  122. package/dist/opLifecycle/remoteMessageProcessor.js +36 -32
  123. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  124. package/dist/packageVersion.d.ts +1 -1
  125. package/dist/packageVersion.js +1 -1
  126. package/dist/packageVersion.js.map +1 -1
  127. package/dist/pendingStateManager.d.ts +1 -1
  128. package/dist/pendingStateManager.d.ts.map +1 -1
  129. package/dist/pendingStateManager.js +18 -18
  130. package/dist/pendingStateManager.js.map +1 -1
  131. package/dist/public.d.ts +12 -0
  132. package/dist/scheduleManager.d.ts +1 -1
  133. package/dist/scheduleManager.d.ts.map +1 -1
  134. package/dist/scheduleManager.js +28 -24
  135. package/dist/scheduleManager.js.map +1 -1
  136. package/dist/storageServiceWithAttachBlobs.d.ts +2 -2
  137. package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -1
  138. package/dist/storageServiceWithAttachBlobs.js +2 -2
  139. package/dist/storageServiceWithAttachBlobs.js.map +1 -1
  140. package/dist/summary/documentSchema.d.ts +209 -0
  141. package/dist/summary/documentSchema.d.ts.map +1 -0
  142. package/dist/summary/documentSchema.js +390 -0
  143. package/dist/summary/documentSchema.js.map +1 -0
  144. package/dist/summary/index.d.ts +2 -1
  145. package/dist/summary/index.d.ts.map +1 -1
  146. package/dist/summary/index.js +4 -1
  147. package/dist/summary/index.js.map +1 -1
  148. package/dist/summary/orderedClientElection.d.ts +2 -2
  149. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  150. package/dist/summary/orderedClientElection.js +12 -7
  151. package/dist/summary/orderedClientElection.js.map +1 -1
  152. package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
  153. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  154. package/dist/summary/runWhileConnectedCoordinator.js +3 -3
  155. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  156. package/dist/summary/runningSummarizer.d.ts +3 -3
  157. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  158. package/dist/summary/runningSummarizer.js +16 -16
  159. package/dist/summary/runningSummarizer.js.map +1 -1
  160. package/dist/summary/summarizer.d.ts +3 -2
  161. package/dist/summary/summarizer.d.ts.map +1 -1
  162. package/dist/summary/summarizer.js +13 -13
  163. package/dist/summary/summarizer.js.map +1 -1
  164. package/dist/summary/summarizerClientElection.d.ts +2 -2
  165. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  166. package/dist/summary/summarizerClientElection.js.map +1 -1
  167. package/dist/summary/summarizerHeuristics.d.ts +1 -1
  168. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  169. package/dist/summary/summarizerHeuristics.js +2 -2
  170. package/dist/summary/summarizerHeuristics.js.map +1 -1
  171. package/dist/summary/summarizerNode/summarizerNode.d.ts +3 -2
  172. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  173. package/dist/summary/summarizerNode/summarizerNode.js +28 -28
  174. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  175. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
  176. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  177. package/dist/summary/summarizerNode/summarizerNodeUtils.js +3 -3
  178. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  179. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -1
  180. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  181. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +14 -14
  182. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  183. package/dist/summary/summarizerTypes.d.ts +5 -3
  184. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  185. package/dist/summary/summarizerTypes.js.map +1 -1
  186. package/dist/summary/summaryCollection.d.ts +2 -2
  187. package/dist/summary/summaryCollection.d.ts.map +1 -1
  188. package/dist/summary/summaryCollection.js +7 -7
  189. package/dist/summary/summaryCollection.js.map +1 -1
  190. package/dist/summary/summaryFormat.d.ts +6 -17
  191. package/dist/summary/summaryFormat.d.ts.map +1 -1
  192. package/dist/summary/summaryFormat.js +8 -8
  193. package/dist/summary/summaryFormat.js.map +1 -1
  194. package/dist/summary/summaryGenerator.d.ts +4 -3
  195. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  196. package/dist/summary/summaryGenerator.js +17 -17
  197. package/dist/summary/summaryGenerator.js.map +1 -1
  198. package/dist/summary/summaryManager.d.ts +1 -1
  199. package/dist/summary/summaryManager.d.ts.map +1 -1
  200. package/dist/summary/summaryManager.js +15 -14
  201. package/dist/summary/summaryManager.js.map +1 -1
  202. package/internal.d.ts +11 -0
  203. package/legacy.d.ts +11 -0
  204. package/lib/batchTracker.d.ts +1 -1
  205. package/lib/batchTracker.d.ts.map +1 -1
  206. package/lib/batchTracker.js +2 -2
  207. package/lib/batchTracker.js.map +1 -1
  208. package/lib/blobManager.d.ts +33 -30
  209. package/lib/blobManager.d.ts.map +1 -1
  210. package/lib/blobManager.js +48 -73
  211. package/lib/blobManager.js.map +1 -1
  212. package/lib/channelCollection.d.ts +27 -22
  213. package/lib/channelCollection.d.ts.map +1 -1
  214. package/lib/channelCollection.js +96 -106
  215. package/lib/channelCollection.js.map +1 -1
  216. package/lib/connectionTelemetry.d.ts +3 -3
  217. package/lib/connectionTelemetry.d.ts.map +1 -1
  218. package/lib/connectionTelemetry.js +3 -3
  219. package/lib/connectionTelemetry.js.map +1 -1
  220. package/lib/containerHandleContext.d.ts.map +1 -1
  221. package/lib/containerHandleContext.js +1 -1
  222. package/lib/containerHandleContext.js.map +1 -1
  223. package/lib/containerRuntime.d.ts +42 -39
  224. package/lib/containerRuntime.d.ts.map +1 -1
  225. package/lib/containerRuntime.js +276 -141
  226. package/lib/containerRuntime.js.map +1 -1
  227. package/lib/dataStore.d.ts +1 -1
  228. package/lib/dataStore.d.ts.map +1 -1
  229. package/lib/dataStore.js +3 -3
  230. package/lib/dataStore.js.map +1 -1
  231. package/lib/dataStoreContext.d.ts +58 -19
  232. package/lib/dataStoreContext.d.ts.map +1 -1
  233. package/lib/dataStoreContext.js +107 -52
  234. package/lib/dataStoreContext.js.map +1 -1
  235. package/lib/dataStoreContexts.d.ts +1 -0
  236. package/lib/dataStoreContexts.d.ts.map +1 -1
  237. package/lib/dataStoreContexts.js +3 -2
  238. package/lib/dataStoreContexts.js.map +1 -1
  239. package/lib/dataStoreRegistry.d.ts +5 -1
  240. package/lib/dataStoreRegistry.d.ts.map +1 -1
  241. package/lib/dataStoreRegistry.js +1 -1
  242. package/lib/dataStoreRegistry.js.map +1 -1
  243. package/lib/deltaManagerSummarizerProxy.d.ts +1 -1
  244. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -1
  245. package/lib/deltaManagerSummarizerProxy.js.map +1 -1
  246. package/lib/deltaScheduler.d.ts +1 -1
  247. package/lib/deltaScheduler.d.ts.map +1 -1
  248. package/lib/deltaScheduler.js +1 -1
  249. package/lib/deltaScheduler.js.map +1 -1
  250. package/lib/error.d.ts +1 -1
  251. package/lib/error.d.ts.map +1 -1
  252. package/lib/error.js +2 -2
  253. package/lib/error.js.map +1 -1
  254. package/lib/gc/garbageCollection.d.ts +3 -2
  255. package/lib/gc/garbageCollection.d.ts.map +1 -1
  256. package/lib/gc/garbageCollection.js +8 -8
  257. package/lib/gc/garbageCollection.js.map +1 -1
  258. package/lib/gc/gcConfigs.d.ts +2 -2
  259. package/lib/gc/gcConfigs.d.ts.map +1 -1
  260. package/lib/gc/gcConfigs.js +4 -5
  261. package/lib/gc/gcConfigs.js.map +1 -1
  262. package/lib/gc/gcDefinitions.d.ts +4 -5
  263. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  264. package/lib/gc/gcDefinitions.js.map +1 -1
  265. package/lib/gc/gcHelpers.d.ts +5 -1
  266. package/lib/gc/gcHelpers.d.ts.map +1 -1
  267. package/lib/gc/gcHelpers.js +10 -2
  268. package/lib/gc/gcHelpers.js.map +1 -1
  269. package/lib/gc/gcSummaryStateTracker.d.ts +2 -2
  270. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
  271. package/lib/gc/gcSummaryStateTracker.js +2 -2
  272. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  273. package/lib/gc/gcTelemetry.d.ts +2 -1
  274. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  275. package/lib/gc/gcTelemetry.js +4 -2
  276. package/lib/gc/gcTelemetry.js.map +1 -1
  277. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
  278. package/lib/gc/gcUnreferencedStateTracker.js +2 -2
  279. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
  280. package/lib/gc/index.d.ts +1 -1
  281. package/lib/gc/index.d.ts.map +1 -1
  282. package/lib/gc/index.js +1 -1
  283. package/lib/gc/index.js.map +1 -1
  284. package/lib/index.d.ts +5 -2
  285. package/lib/index.d.ts.map +1 -1
  286. package/lib/index.js +5 -2
  287. package/lib/index.js.map +1 -1
  288. package/lib/legacy.d.ts +91 -0
  289. package/lib/messageTypes.d.ts +11 -5
  290. package/lib/messageTypes.d.ts.map +1 -1
  291. package/lib/messageTypes.js +4 -0
  292. package/lib/messageTypes.js.map +1 -1
  293. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  294. package/lib/opLifecycle/batchManager.js.map +1 -1
  295. package/lib/opLifecycle/definitions.d.ts +2 -20
  296. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  297. package/lib/opLifecycle/definitions.js.map +1 -1
  298. package/lib/opLifecycle/index.d.ts +3 -3
  299. package/lib/opLifecycle/index.d.ts.map +1 -1
  300. package/lib/opLifecycle/index.js +2 -2
  301. package/lib/opLifecycle/index.js.map +1 -1
  302. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  303. package/lib/opLifecycle/opCompressor.js +2 -3
  304. package/lib/opLifecycle/opCompressor.js.map +1 -1
  305. package/lib/opLifecycle/opDecompressor.d.ts +15 -4
  306. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  307. package/lib/opLifecycle/opDecompressor.js +61 -62
  308. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  309. package/lib/opLifecycle/opGroupingManager.d.ts +2 -1
  310. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
  311. package/lib/opLifecycle/opGroupingManager.js +9 -12
  312. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  313. package/lib/opLifecycle/opSplitter.d.ts +12 -4
  314. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  315. package/lib/opLifecycle/opSplitter.js +47 -38
  316. package/lib/opLifecycle/opSplitter.js.map +1 -1
  317. package/lib/opLifecycle/outbox.d.ts +2 -1
  318. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  319. package/lib/opLifecycle/outbox.js +19 -18
  320. package/lib/opLifecycle/outbox.js.map +1 -1
  321. package/lib/opLifecycle/remoteMessageProcessor.d.ts +8 -0
  322. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  323. package/lib/opLifecycle/remoteMessageProcessor.js +36 -32
  324. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  325. package/lib/packageVersion.d.ts +1 -1
  326. package/lib/packageVersion.js +1 -1
  327. package/lib/packageVersion.js.map +1 -1
  328. package/lib/pendingStateManager.d.ts +1 -1
  329. package/lib/pendingStateManager.d.ts.map +1 -1
  330. package/lib/pendingStateManager.js +2 -2
  331. package/lib/pendingStateManager.js.map +1 -1
  332. package/lib/public.d.ts +12 -0
  333. package/lib/scheduleManager.d.ts +1 -1
  334. package/lib/scheduleManager.d.ts.map +1 -1
  335. package/lib/scheduleManager.js +7 -3
  336. package/lib/scheduleManager.js.map +1 -1
  337. package/lib/storageServiceWithAttachBlobs.d.ts +2 -2
  338. package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -1
  339. package/lib/storageServiceWithAttachBlobs.js +1 -1
  340. package/lib/storageServiceWithAttachBlobs.js.map +1 -1
  341. package/lib/summary/documentSchema.d.ts +209 -0
  342. package/lib/summary/documentSchema.d.ts.map +1 -0
  343. package/lib/summary/documentSchema.js +386 -0
  344. package/lib/summary/documentSchema.js.map +1 -0
  345. package/lib/summary/index.d.ts +2 -1
  346. package/lib/summary/index.d.ts.map +1 -1
  347. package/lib/summary/index.js +1 -0
  348. package/lib/summary/index.js.map +1 -1
  349. package/lib/summary/orderedClientElection.d.ts +2 -2
  350. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  351. package/lib/summary/orderedClientElection.js +7 -2
  352. package/lib/summary/orderedClientElection.js.map +1 -1
  353. package/lib/summary/runWhileConnectedCoordinator.d.ts +1 -1
  354. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  355. package/lib/summary/runWhileConnectedCoordinator.js +1 -1
  356. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
  357. package/lib/summary/runningSummarizer.d.ts +3 -3
  358. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  359. package/lib/summary/runningSummarizer.js +3 -3
  360. package/lib/summary/runningSummarizer.js.map +1 -1
  361. package/lib/summary/summarizer.d.ts +3 -2
  362. package/lib/summary/summarizer.d.ts.map +1 -1
  363. package/lib/summary/summarizer.js +3 -3
  364. package/lib/summary/summarizer.js.map +1 -1
  365. package/lib/summary/summarizerClientElection.d.ts +2 -2
  366. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  367. package/lib/summary/summarizerClientElection.js.map +1 -1
  368. package/lib/summary/summarizerHeuristics.d.ts +1 -1
  369. package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
  370. package/lib/summary/summarizerHeuristics.js +1 -1
  371. package/lib/summary/summarizerHeuristics.js.map +1 -1
  372. package/lib/summary/summarizerNode/summarizerNode.d.ts +3 -2
  373. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  374. package/lib/summary/summarizerNode/summarizerNode.js +5 -5
  375. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  376. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
  377. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  378. package/lib/summary/summarizerNode/summarizerNodeUtils.js +1 -1
  379. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  380. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -1
  381. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  382. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +3 -3
  383. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  384. package/lib/summary/summarizerTypes.d.ts +5 -3
  385. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  386. package/lib/summary/summarizerTypes.js.map +1 -1
  387. package/lib/summary/summaryCollection.d.ts +2 -2
  388. package/lib/summary/summaryCollection.d.ts.map +1 -1
  389. package/lib/summary/summaryCollection.js +1 -1
  390. package/lib/summary/summaryCollection.js.map +1 -1
  391. package/lib/summary/summaryFormat.d.ts +6 -17
  392. package/lib/summary/summaryFormat.d.ts.map +1 -1
  393. package/lib/summary/summaryFormat.js +3 -3
  394. package/lib/summary/summaryFormat.js.map +1 -1
  395. package/lib/summary/summaryGenerator.d.ts +4 -3
  396. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  397. package/lib/summary/summaryGenerator.js +4 -4
  398. package/lib/summary/summaryGenerator.js.map +1 -1
  399. package/lib/summary/summaryManager.d.ts +1 -1
  400. package/lib/summary/summaryManager.d.ts.map +1 -1
  401. package/lib/summary/summaryManager.js +9 -8
  402. package/lib/summary/summaryManager.js.map +1 -1
  403. package/package.json +57 -65
  404. package/src/batchTracker.ts +4 -3
  405. package/src/blobManager.ts +100 -77
  406. package/src/channelCollection.ts +180 -165
  407. package/src/connectionTelemetry.ts +12 -12
  408. package/src/containerHandleContext.ts +3 -2
  409. package/src/containerRuntime.ts +481 -277
  410. package/src/dataStore.ts +9 -4
  411. package/src/dataStoreContext.ts +195 -93
  412. package/src/dataStoreContexts.ts +5 -2
  413. package/src/dataStoreRegistry.ts +3 -2
  414. package/src/deltaManagerSummarizerProxy.ts +1 -1
  415. package/src/deltaScheduler.ts +2 -1
  416. package/src/error.ts +2 -2
  417. package/src/gc/garbageCollection.ts +21 -20
  418. package/src/gc/gcConfigs.ts +15 -18
  419. package/src/gc/gcDefinitions.ts +6 -8
  420. package/src/gc/gcHelpers.ts +22 -5
  421. package/src/gc/gcSummaryStateTracker.ts +7 -5
  422. package/src/gc/gcTelemetry.ts +13 -7
  423. package/src/gc/gcUnreferencedStateTracker.ts +3 -2
  424. package/src/gc/index.ts +1 -0
  425. package/src/index.ts +22 -1
  426. package/src/messageTypes.ts +20 -6
  427. package/src/opLifecycle/README.md +89 -0
  428. package/src/opLifecycle/batchManager.ts +1 -0
  429. package/src/opLifecycle/definitions.ts +3 -21
  430. package/src/opLifecycle/index.ts +3 -9
  431. package/src/opLifecycle/opCompressor.ts +6 -5
  432. package/src/opLifecycle/opDecompressor.ts +90 -100
  433. package/src/opLifecycle/opGroupingManager.ts +12 -14
  434. package/src/opLifecycle/opSplitter.ts +76 -48
  435. package/src/opLifecycle/outbox.ts +30 -38
  436. package/src/opLifecycle/remoteMessageProcessor.ts +43 -55
  437. package/src/packageVersion.ts +1 -1
  438. package/src/pendingStateManager.ts +6 -6
  439. package/src/scheduleManager.ts +10 -8
  440. package/src/storageServiceWithAttachBlobs.ts +2 -2
  441. package/src/summary/documentSchema.ts +631 -0
  442. package/src/summary/index.ts +10 -1
  443. package/src/summary/orderedClientElection.ts +7 -7
  444. package/src/summary/runWhileConnectedCoordinator.ts +3 -2
  445. package/src/summary/runningSummarizer.ts +22 -20
  446. package/src/summary/summarizer.ts +17 -15
  447. package/src/summary/summarizerClientElection.ts +3 -2
  448. package/src/summary/summarizerHeuristics.ts +4 -2
  449. package/src/summary/summarizerNode/summarizerNode.ts +20 -18
  450. package/src/summary/summarizerNode/summarizerNodeUtils.ts +3 -2
  451. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +16 -8
  452. package/src/summary/summarizerTypes.ts +7 -3
  453. package/src/summary/summaryCollection.ts +3 -3
  454. package/src/summary/summaryFormat.ts +14 -26
  455. package/src/summary/summaryGenerator.ts +12 -15
  456. package/src/summary/summaryManager.ts +16 -13
  457. package/api-extractor-cjs.json +0 -8
  458. package/dist/container-runtime-alpha.d.ts +0 -1753
  459. package/dist/container-runtime-beta.d.ts +0 -268
  460. package/dist/container-runtime-public.d.ts +0 -268
  461. package/dist/container-runtime-untrimmed.d.ts +0 -1893
  462. package/lib/container-runtime-alpha.d.ts +0 -1753
  463. package/lib/container-runtime-beta.d.ts +0 -268
  464. package/lib/container-runtime-public.d.ts +0 -268
  465. package/lib/container-runtime-untrimmed.d.ts +0 -1893
  466. package/lib/test/batchTracker.spec.js +0 -88
  467. package/lib/test/batchTracker.spec.js.map +0 -1
  468. package/lib/test/blobManager.spec.js +0 -835
  469. package/lib/test/blobManager.spec.js.map +0 -1
  470. package/lib/test/channelCollection.spec.js +0 -141
  471. package/lib/test/channelCollection.spec.js.map +0 -1
  472. package/lib/test/containerRuntime.spec.js +0 -1748
  473. package/lib/test/containerRuntime.spec.js.map +0 -1
  474. package/lib/test/dataStoreContext.spec.js +0 -801
  475. package/lib/test/dataStoreContext.spec.js.map +0 -1
  476. package/lib/test/dataStoreCreation.spec.js +0 -312
  477. package/lib/test/dataStoreCreation.spec.js.map +0 -1
  478. package/lib/test/dataStoreRegistry.spec.js +0 -26
  479. package/lib/test/dataStoreRegistry.spec.js.map +0 -1
  480. package/lib/test/fuzz/fuzzUtils.js +0 -66
  481. package/lib/test/fuzz/fuzzUtils.js.map +0 -1
  482. package/lib/test/fuzz/summarizer.fuzz.spec.js +0 -31
  483. package/lib/test/fuzz/summarizer.fuzz.spec.js.map +0 -1
  484. package/lib/test/fuzz/summarizerFuzzMocks.js +0 -162
  485. package/lib/test/fuzz/summarizerFuzzMocks.js.map +0 -1
  486. package/lib/test/fuzz/summarizerFuzzSuite.js +0 -106
  487. package/lib/test/fuzz/summarizerFuzzSuite.js.map +0 -1
  488. package/lib/test/gc/garbageCollection.spec.js +0 -1465
  489. package/lib/test/gc/garbageCollection.spec.js.map +0 -1
  490. package/lib/test/gc/gcConfigs.spec.js +0 -690
  491. package/lib/test/gc/gcConfigs.spec.js.map +0 -1
  492. package/lib/test/gc/gcHelpers.spec.js +0 -110
  493. package/lib/test/gc/gcHelpers.spec.js.map +0 -1
  494. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +0 -68
  495. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +0 -1
  496. package/lib/test/gc/gcStats.spec.js +0 -391
  497. package/lib/test/gc/gcStats.spec.js.map +0 -1
  498. package/lib/test/gc/gcSummaryStateTracker.spec.js +0 -228
  499. package/lib/test/gc/gcSummaryStateTracker.spec.js.map +0 -1
  500. package/lib/test/gc/gcTelemetry.spec.js +0 -530
  501. package/lib/test/gc/gcTelemetry.spec.js.map +0 -1
  502. package/lib/test/gc/gcUnitTestHelpers.js +0 -29
  503. package/lib/test/gc/gcUnitTestHelpers.js.map +0 -1
  504. package/lib/test/gc/gcUnreferencedStateTracker.spec.js +0 -192
  505. package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +0 -1
  506. package/lib/test/getPendingBlobs.spec.js +0 -193
  507. package/lib/test/getPendingBlobs.spec.js.map +0 -1
  508. package/lib/test/hardwareStats.spec.js +0 -93
  509. package/lib/test/hardwareStats.spec.js.map +0 -1
  510. package/lib/test/index.js +0 -6
  511. package/lib/test/index.js.map +0 -1
  512. package/lib/test/opLifecycle/OpGroupingManager.spec.js +0 -225
  513. package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +0 -1
  514. package/lib/test/opLifecycle/batchManager.spec.js +0 -189
  515. package/lib/test/opLifecycle/batchManager.spec.js.map +0 -1
  516. package/lib/test/opLifecycle/opCompressor.spec.js +0 -74
  517. package/lib/test/opLifecycle/opCompressor.spec.js.map +0 -1
  518. package/lib/test/opLifecycle/opDecompressor.spec.js +0 -218
  519. package/lib/test/opLifecycle/opDecompressor.spec.js.map +0 -1
  520. package/lib/test/opLifecycle/opSplitter.spec.js +0 -272
  521. package/lib/test/opLifecycle/opSplitter.spec.js.map +0 -1
  522. package/lib/test/opLifecycle/outbox.spec.js +0 -675
  523. package/lib/test/opLifecycle/outbox.spec.js.map +0 -1
  524. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +0 -196
  525. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +0 -1
  526. package/lib/test/pendingStateManager.spec.js +0 -329
  527. package/lib/test/pendingStateManager.spec.js.map +0 -1
  528. package/lib/test/scheduleManager.spec.js +0 -270
  529. package/lib/test/scheduleManager.spec.js.map +0 -1
  530. package/lib/test/summarizerNode.spec.js +0 -326
  531. package/lib/test/summarizerNode.spec.js.map +0 -1
  532. package/lib/test/summarizerNodeWithGc.spec.js +0 -318
  533. package/lib/test/summarizerNodeWithGc.spec.js.map +0 -1
  534. package/lib/test/summary/orderedClientElection.spec.js +0 -535
  535. package/lib/test/summary/orderedClientElection.spec.js.map +0 -1
  536. package/lib/test/summary/runningSummarizer.spec.js +0 -1349
  537. package/lib/test/summary/runningSummarizer.spec.js.map +0 -1
  538. package/lib/test/summary/summarizer.spec.js +0 -29
  539. package/lib/test/summary/summarizer.spec.js.map +0 -1
  540. package/lib/test/summary/summarizerClientElection.spec.js +0 -436
  541. package/lib/test/summary/summarizerClientElection.spec.js.map +0 -1
  542. package/lib/test/summary/summarizerHeuristics.spec.js +0 -289
  543. package/lib/test/summary/summarizerHeuristics.spec.js.map +0 -1
  544. package/lib/test/summary/summaryCollection.spec.js +0 -200
  545. package/lib/test/summary/summaryCollection.spec.js.map +0 -1
  546. package/lib/test/summary/summaryManager.spec.js +0 -430
  547. package/lib/test/summary/summaryManager.spec.js.map +0 -1
  548. package/lib/test/summary/testQuorumClients.js +0 -34
  549. package/lib/test/summary/testQuorumClients.js.map +0 -1
  550. package/lib/test/throttler.spec.js +0 -175
  551. package/lib/test/throttler.spec.js.map +0 -1
  552. package/lib/test/types/validateContainerRuntimePrevious.generated.js +0 -180
  553. package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +0 -1
  554. /package/{dist → lib}/tsdoc-metadata.json +0 -0
@@ -1,690 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- import { strict as assert } from "assert";
6
- import { useFakeTimers } from "sinon";
7
- import { MockLogger, mixinMonitoringContext, createChildLogger, } from "@fluidframework/telemetry-utils";
8
- import { GarbageCollector, GCNodeType, defaultSessionExpiryDurationMs, oneDayMs, runGCKey, runSweepKey, defaultInactiveTimeoutMs, defaultSweepGracePeriodMs, gcTestModeKey, nextGCVersion, stableGCVersion, gcVersionUpgradeToV4Key, gcGenerationOptionName, throwOnTombstoneLoadOverrideKey, gcDisableDataStoreSweepOptionName, gcDisableThrowOnTombstoneLoadOptionName, runSessionExpiryKey, disableDatastoreSweepKey, } from "../../gc/index.js";
9
- import { pkgVersion } from "../../packageVersion.js";
10
- import { createTestConfigProvider } from "./gcUnitTestHelpers.js";
11
- describe("Garbage Collection configurations", () => {
12
- const testPkgPath = ["testPkg"];
13
- const configProvider = createTestConfigProvider();
14
- let mockLogger;
15
- let mc;
16
- let clock;
17
- // The default GC data returned by `getGCData` on which GC is run. Update this to update the referenced graph.
18
- let defaultGCData = { gcNodes: {} };
19
- const customSessionExpiryDurationMs = defaultSessionExpiryDurationMs + 1;
20
- const testOverrideInactiveTimeoutKey = "Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs";
21
- const testOverrideTombstoneTimeoutKey = "Fluid.GarbageCollection.TestOverride.TombstoneTimeoutMs";
22
- const testOverrideSessionExpiryMsKey = "Fluid.GarbageCollection.TestOverride.SessionExpiryMs";
23
- let gc;
24
- const createGcWithPrivateMembers = (gcMetadata, gcOptions, isSummarizerClient) => {
25
- const metadata = gcMetadata && {
26
- summaryFormatVersion: 1,
27
- message: undefined,
28
- ...gcMetadata,
29
- };
30
- return createGarbageCollector({ metadata, gcOptions }, undefined /* gcBlobsMap */, undefined /* closeFn */, isSummarizerClient);
31
- };
32
- function createGarbageCollector(createParams = {}, gcBlobsMap = new Map(), closeFn = () => { }, isSummarizerClient = true) {
33
- const getNodeType = (nodePath) => {
34
- if (nodePath.split("/").length !== 2) {
35
- return GCNodeType.Other;
36
- }
37
- return GCNodeType.DataStore;
38
- };
39
- // The runtime to be passed to the garbage collector.
40
- const gcRuntime = {
41
- updateStateBeforeGC: async () => { },
42
- getGCData: async (fullGC) => defaultGCData,
43
- updateUsedRoutes: (usedRoutes) => {
44
- return { totalNodeCount: 0, unusedNodeCount: 0 };
45
- },
46
- updateUnusedRoutes: (unusedRoutes) => { },
47
- deleteSweepReadyNodes: (sweepReadyRoutes) => {
48
- return [];
49
- },
50
- updateTombstonedRoutes: (tombstoneRoutes) => { },
51
- getNodeType,
52
- getCurrentReferenceTimestampMs: () => Date.now(),
53
- closeFn,
54
- };
55
- return GarbageCollector.create({
56
- ...createParams,
57
- runtime: gcRuntime,
58
- gcOptions: createParams.gcOptions ?? {},
59
- baseSnapshot: createParams.baseSnapshot,
60
- baseLogger: createChildLogger({ logger: mc.logger }),
61
- existing: createParams.metadata !== undefined /* existing */,
62
- metadata: createParams.metadata,
63
- createContainerMetadata: {
64
- createContainerRuntimeVersion: pkgVersion,
65
- createContainerTimestamp: Date.now(),
66
- },
67
- isSummarizerClient,
68
- readAndParseBlob: async (id) => gcBlobsMap.get(id),
69
- getNodePackagePath: async (nodeId) => testPkgPath,
70
- getLastSummaryTimestampMs: () => Date.now(),
71
- submitMessage: (message) => { },
72
- });
73
- }
74
- before(() => {
75
- clock = useFakeTimers();
76
- });
77
- beforeEach(() => {
78
- gc = undefined;
79
- mockLogger = new MockLogger();
80
- // To ensure inactive timeout is less than tombstone timeout.
81
- configProvider.set(testOverrideInactiveTimeoutKey, 1);
82
- mc = mixinMonitoringContext(mockLogger, configProvider);
83
- });
84
- afterEach(() => {
85
- clock.reset();
86
- configProvider.clear();
87
- defaultGCData = { gcNodes: {} };
88
- gc?.dispose();
89
- });
90
- after(() => {
91
- clock.restore();
92
- });
93
- describe("Existing container", () => {
94
- it("No metadata", () => {
95
- gc = createGcWithPrivateMembers({});
96
- assert(!gc.configs.gcEnabled, "gcEnabled incorrect");
97
- assert(!gc.configs.shouldRunGC, "shouldRunGC incorrect");
98
- assert(gc.configs.sweepEnabled, "sweepEnabled incorrect");
99
- assert.equal(gc.configs.shouldRunSweep, "NO", "shouldRunSweep incorrect");
100
- assert(gc.configs.sessionExpiryTimeoutMs === undefined, "sessionExpiryTimeoutMs incorrect");
101
- assert(gc.configs.tombstoneTimeoutMs === undefined, "tombstoneTimeoutMs incorrect");
102
- assert.equal(gc.summaryStateTracker.latestSummaryGCVersion, 0, "latestSummaryGCVersion incorrect");
103
- });
104
- it("gcFeature 0", () => {
105
- gc = createGcWithPrivateMembers({ gcFeature: 0 });
106
- assert(!gc.configs.gcEnabled, "gcEnabled incorrect");
107
- assert.equal(gc.summaryStateTracker.latestSummaryGCVersion, 0, "latestSummaryGCVersion incorrect");
108
- });
109
- it("gcFeature 0, Sweep enabled via gcGeneration", () => {
110
- gc = createGcWithPrivateMembers({ gcFeature: 0, gcFeatureMatrix: { gcGeneration: 0 } }, { [gcGenerationOptionName]: 0 });
111
- assert(!gc.configs.gcEnabled, "gcEnabled incorrect");
112
- assert(gc.configs.sweepEnabled, "sweepEnabled incorrect");
113
- assert.equal(gc.summaryStateTracker.latestSummaryGCVersion, 0, "latestSummaryGCVersion incorrect");
114
- });
115
- it("gcFeature 1", () => {
116
- gc = createGcWithPrivateMembers({ gcFeature: 1 });
117
- assert(gc.configs.gcEnabled, "gcEnabled incorrect");
118
- assert.equal(gc.summaryStateTracker.latestSummaryGCVersion, 1, "latestSummaryGCVersion incorrect");
119
- });
120
- it("sweepEnabled value ignored", () => {
121
- gc = createGcWithPrivateMembers({ sweepEnabled: true }, { [gcGenerationOptionName]: 1 });
122
- assert(!gc.configs.sweepEnabled, "sweepEnabled incorrect");
123
- });
124
- it("sessionExpiryTimeoutMs set (tombstoneTimeoutMs unset)", () => {
125
- gc = createGcWithPrivateMembers({
126
- sessionExpiryTimeoutMs: customSessionExpiryDurationMs,
127
- });
128
- assert.equal(gc.configs.sessionExpiryTimeoutMs, customSessionExpiryDurationMs, "sessionExpiryTimeoutMs incorrect");
129
- assert.equal(gc.configs.tombstoneTimeoutMs, customSessionExpiryDurationMs + 6 * oneDayMs, "tombstoneTimeoutMs incorrect");
130
- });
131
- it("tombstoneTimeoutMs set", () => {
132
- gc = createGcWithPrivateMembers({ tombstoneTimeoutMs: 123 });
133
- assert.equal(gc.configs.tombstoneTimeoutMs, 123, "tombstoneTimeoutMs incorrect");
134
- });
135
- it("Metadata Roundtrip", () => {
136
- const inputMetadata = {
137
- sweepEnabled: true,
138
- gcFeature: 1,
139
- sessionExpiryTimeoutMs: customSessionExpiryDurationMs,
140
- tombstoneTimeoutMs: 123,
141
- gcFeatureMatrix: { gcGeneration: 1 },
142
- };
143
- gc = createGcWithPrivateMembers(inputMetadata, {
144
- [gcGenerationOptionName]: 2, // 2 should not replace already-persisted value of 1
145
- });
146
- const outputMetadata = gc.getMetadata();
147
- const expectedOutputMetadata = {
148
- ...inputMetadata,
149
- sweepEnabled: false,
150
- gcFeature: stableGCVersion,
151
- };
152
- assert.deepEqual(outputMetadata, expectedOutputMetadata, "getMetadata returned different metadata than loaded from");
153
- });
154
- it("Metadata Roundtrip - old file with tombstoneGeneration", () => {
155
- const inputMetadata = {
156
- sweepEnabled: true,
157
- gcFeature: 1,
158
- sessionExpiryTimeoutMs: customSessionExpiryDurationMs,
159
- tombstoneTimeoutMs: 123,
160
- gcFeatureMatrix: { tombstoneGeneration: 1 }, // legacy file before gcGeneration
161
- };
162
- gc = createGcWithPrivateMembers(inputMetadata, {
163
- [gcGenerationOptionName]: 2, // Will not be persisted - legacy file will only ever be stamped with tombstoneGeneration
164
- });
165
- const outputMetadata = gc.getMetadata();
166
- const expectedOutputMetadata = {
167
- ...inputMetadata,
168
- sweepEnabled: false,
169
- gcFeature: stableGCVersion,
170
- };
171
- assert.deepEqual(outputMetadata, expectedOutputMetadata, "getMetadata returned different metadata than loaded from");
172
- });
173
- it("Metadata Roundtrip transition to gcGeneration from tombstoneGeneration", () => {
174
- const inputMetadata = {
175
- sweepEnabled: true,
176
- gcFeature: 1,
177
- sessionExpiryTimeoutMs: customSessionExpiryDurationMs,
178
- tombstoneTimeoutMs: 123,
179
- gcFeatureMatrix: { gcGeneration: 1 },
180
- };
181
- // An app may write both Generation options to ease the transition. Only gcGeneration will be persisted
182
- // (and previous to the change introducing gcGeneration, only tombstoneGeneration would have been persisted).
183
- gc = createGcWithPrivateMembers(inputMetadata, {
184
- [gcGenerationOptionName]: 1,
185
- gcTombstoneGeneration: 1, // Legacy - will not be persisted but is ok to pass in
186
- });
187
- const outputMetadata = gc.getMetadata();
188
- const expectedOutputMetadata = {
189
- ...inputMetadata,
190
- sweepEnabled: false,
191
- gcFeature: stableGCVersion,
192
- };
193
- assert.deepEqual(outputMetadata, expectedOutputMetadata, "getMetadata returned different metadata than loaded from");
194
- });
195
- it("Metadata Roundtrip with GC version upgrade to v4 enabled", () => {
196
- configProvider.set(gcVersionUpgradeToV4Key, true);
197
- const inputMetadata = {
198
- sweepEnabled: true,
199
- gcFeature: 1,
200
- sessionExpiryTimeoutMs: customSessionExpiryDurationMs,
201
- tombstoneTimeoutMs: 123,
202
- gcFeatureMatrix: { gcGeneration: 1 },
203
- };
204
- gc = createGcWithPrivateMembers(inputMetadata);
205
- const outputMetadata = gc.getMetadata();
206
- const expectedOutputMetadata = {
207
- ...inputMetadata,
208
- sweepEnabled: false,
209
- gcFeature: nextGCVersion,
210
- };
211
- assert.deepEqual(outputMetadata, expectedOutputMetadata, "getMetadata returned different metadata than loaded from");
212
- });
213
- it("Metadata Roundtrip with GC version upgrade to v4 disabled", () => {
214
- configProvider.set(gcVersionUpgradeToV4Key, false);
215
- const inputMetadata = {
216
- sweepEnabled: true,
217
- gcFeature: 1,
218
- sessionExpiryTimeoutMs: customSessionExpiryDurationMs,
219
- tombstoneTimeoutMs: 123,
220
- gcFeatureMatrix: { gcGeneration: 1 },
221
- };
222
- gc = createGcWithPrivateMembers(inputMetadata);
223
- const outputMetadata = gc.getMetadata();
224
- const expectedOutputMetadata = {
225
- ...inputMetadata,
226
- sweepEnabled: false,
227
- gcFeature: stableGCVersion,
228
- };
229
- assert.deepEqual(outputMetadata, expectedOutputMetadata, "getMetadata returned different metadata than loaded from");
230
- });
231
- });
232
- describe("New Container", () => {
233
- it("No options", () => {
234
- gc = createGcWithPrivateMembers(undefined /* metadata */, {});
235
- assert(gc.configs.gcEnabled, "gcEnabled incorrect");
236
- assert(gc.configs.shouldRunGC, "shouldRunGC incorrect");
237
- assert(gc.configs.sweepEnabled, "sweepEnabled incorrect"); // Sweep is always allowed for a new container
238
- assert.equal(gc.configs.shouldRunSweep, "NO", "shouldRunSweep incorrect");
239
- assert(gc.configs.sessionExpiryTimeoutMs !== undefined, "sessionExpiryTimeoutMs incorrect");
240
- assert(gc.configs.tombstoneTimeoutMs !== undefined, "tombstoneTimeoutMs incorrect");
241
- assert.equal(gc.summaryStateTracker.latestSummaryGCVersion, stableGCVersion, "latestSummaryGCVersion incorrect");
242
- });
243
- it("gcAllowed true", () => {
244
- gc = createGcWithPrivateMembers(undefined /* metadata */, { gcAllowed: true });
245
- assert(gc.configs.gcEnabled, "gcEnabled incorrect");
246
- });
247
- it("gcAllowed false", () => {
248
- gc = createGcWithPrivateMembers(undefined /* metadata */, { gcAllowed: false });
249
- assert(!gc.configs.gcEnabled, "gcEnabled incorrect");
250
- });
251
- it("Sweep enabled via gcGeneration, gcAllowed true", () => {
252
- gc = createGcWithPrivateMembers(undefined /* metadata */, {
253
- gcAllowed: true,
254
- [gcGenerationOptionName]: 1,
255
- });
256
- assert(gc.configs.gcEnabled, "gcEnabled incorrect");
257
- assert(gc.configs.sweepEnabled, "sweepEnabled incorrect");
258
- assert(gc.configs.tombstoneTimeoutMs !== undefined, "tombstoneTimeoutMs incorrect");
259
- assert(gc.configs.sessionExpiryTimeoutMs !== undefined, "sessionExpiryTimeoutMs incorrect");
260
- });
261
- it("Sweep enabled via gcGeneration, gcAllowed true, sessionExpiry off", () => {
262
- configProvider.set(runSessionExpiryKey, false);
263
- gc = createGcWithPrivateMembers(undefined /* metadata */, {
264
- gcAllowed: true,
265
- [gcGenerationOptionName]: 1,
266
- });
267
- assert(gc.configs.gcEnabled, "gcEnabled incorrect");
268
- assert(gc.configs.sweepEnabled, "sweepEnabled incorrect");
269
- assert(gc.configs.sessionExpiryTimeoutMs === undefined, "sessionExpiryTimeoutMs incorrect");
270
- assert(gc.configs.tombstoneTimeoutMs === undefined, "tombstoneTimeoutMs incorrect");
271
- });
272
- it("TestOverride.TombstoneTimeoutMs set, sessionExpiry on", () => {
273
- configProvider.set(testOverrideTombstoneTimeoutKey, 123);
274
- gc = createGcWithPrivateMembers(undefined /* metadata */, {});
275
- assert(gc.configs.sweepEnabled, "sweepEnabled incorrect");
276
- assert(gc.configs.sessionExpiryTimeoutMs === defaultSessionExpiryDurationMs, "sessionExpiryTimeoutMs incorrect");
277
- assert(gc.configs.tombstoneTimeoutMs === 123, "tombstoneTimeoutMs incorrect");
278
- });
279
- it("TestOverride.TombstoneTimeoutMs set, sessionExpiry off", () => {
280
- configProvider.set(testOverrideTombstoneTimeoutKey, 123);
281
- configProvider.set(runSessionExpiryKey, false);
282
- gc = createGcWithPrivateMembers(undefined /* metadata */, {});
283
- assert(gc.configs.sweepEnabled, "sweepEnabled incorrect");
284
- assert(gc.configs.sessionExpiryTimeoutMs === undefined, "sessionExpiryTimeoutMs incorrect");
285
- assert(gc.configs.tombstoneTimeoutMs === 123, "tombstoneTimeoutMs incorrect");
286
- });
287
- it("Metadata Roundtrip", () => {
288
- const expectedMetadata = {
289
- sweepEnabled: false,
290
- gcFeature: stableGCVersion,
291
- sessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,
292
- tombstoneTimeoutMs: defaultSessionExpiryDurationMs + 6 * oneDayMs,
293
- gcFeatureMatrix: { gcGeneration: 2 },
294
- };
295
- gc = createGcWithPrivateMembers(undefined /* metadata */, {
296
- [gcGenerationOptionName]: 2,
297
- });
298
- const outputMetadata = gc.getMetadata();
299
- assert.deepEqual(outputMetadata, expectedMetadata, "getMetadata returned different metadata than expected");
300
- });
301
- it("Metadata Roundtrip with GC version upgrade to v4 enabled", () => {
302
- configProvider.set(gcVersionUpgradeToV4Key, true);
303
- const expectedMetadata = {
304
- sweepEnabled: false,
305
- gcFeature: nextGCVersion,
306
- sessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,
307
- tombstoneTimeoutMs: defaultSessionExpiryDurationMs + 6 * oneDayMs,
308
- gcFeatureMatrix: undefined,
309
- };
310
- gc = createGcWithPrivateMembers(undefined /* metadata */, {});
311
- const outputMetadata = gc.getMetadata();
312
- assert.deepEqual(outputMetadata, expectedMetadata, "getMetadata returned different metadata than expected");
313
- });
314
- it("Metadata Roundtrip transition to gcGeneration from tombstoneGeneration", () => {
315
- const expectedMetadata = {
316
- sweepEnabled: false,
317
- gcFeature: stableGCVersion,
318
- sessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,
319
- tombstoneTimeoutMs: defaultSessionExpiryDurationMs + 6 * oneDayMs,
320
- gcFeatureMatrix: {
321
- gcGeneration: 2,
322
- // tombstoneGeneration will not be persisted
323
- },
324
- };
325
- // An app may write both Generation options to ease the transition. Only gcGeneration will be persisted
326
- // (and previous to the change introducing gcGeneration, only tombstoneGeneration would have been persisted).
327
- gc = createGcWithPrivateMembers(undefined /* metadata */, {
328
- [gcGenerationOptionName]: 2,
329
- gcTombstoneGeneration: 2, // Legacy - will not be persisted but is ok to pass in
330
- });
331
- const outputMetadata = gc.getMetadata();
332
- assert.deepEqual(outputMetadata, expectedMetadata, "getMetadata returned different metadata than expected");
333
- });
334
- });
335
- describe("Session Expiry and Tombstone Timeout", () => {
336
- beforeEach(() => {
337
- configProvider.set("Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs", 1); // To ensure it's less than tombstone timeout
338
- });
339
- // Config sources for Session Expiry:
340
- // 1. defaultSessionExpiryDurationMs in code
341
- // 2. IGCRuntimeOptions.sessionExpiryTimeoutMs
342
- // 3. IGCMetadata.sessionExpiryTimeoutMs
343
- // 4. "Fluid.GarbageCollection.TestOverride.SessionExpiryMs" setting
344
- // Config sources for Tombstone Timeout:
345
- // 1. IGCMetadata.tombstoneTimeoutMs
346
- // 2. IGCMetadata_Deprecated.sweepTimeoutMs (backfill from before two-stage sweep)
347
- // 3. Computed from Session Expiry, fixed upper bound for Snapshot Expiry and a fixed buffer (on create, or to backfill existing)
348
- // 4. "Fluid.GarbageCollection.TestOverride.TombstoneTimeoutMs" setting (only applicable on create)
349
- it("defaultSessionExpiryDurationMs", () => {
350
- gc = createGcWithPrivateMembers();
351
- assert.equal(gc.configs.sessionExpiryTimeoutMs, defaultSessionExpiryDurationMs, "sessionExpiryTimeoutMs incorrect");
352
- assert.equal(gc.sessionExpiryTimer.defaultTimeout, defaultSessionExpiryDurationMs, "sessionExpiryTimer incorrect");
353
- assert.equal(gc.configs.tombstoneTimeoutMs, defaultSessionExpiryDurationMs + 6 * oneDayMs, "tombstoneTimeoutMs incorrect");
354
- });
355
- it("defaultSessionExpiryDurationMs, TestOverride.TombstoneTimeoutMs set", () => {
356
- configProvider.set(testOverrideTombstoneTimeoutKey, 7890);
357
- gc = createGcWithPrivateMembers();
358
- assert.equal(gc.configs.sessionExpiryTimeoutMs, defaultSessionExpiryDurationMs, "sessionExpiryTimeoutMs incorrect");
359
- assert.equal(gc.sessionExpiryTimer.defaultTimeout, defaultSessionExpiryDurationMs, "sessionExpiryTimer incorrect");
360
- assert.equal(gc.configs.tombstoneTimeoutMs, 7890, "tombstoneTimeoutMs incorrect");
361
- });
362
- it("gcAllowed off, session expiry off", () => {
363
- gc = gc = createGcWithPrivateMembers(undefined /* metadata */, {
364
- gcAllowed: false,
365
- });
366
- assert.equal(gc.configs.sessionExpiryTimeoutMs, undefined, "sessionExpiryTimeoutMs incorrect");
367
- assert.equal(gc.sessionExpiryTimer, undefined, "sessionExpiryTimer incorrect");
368
- assert.equal(gc.configs.tombstoneTimeoutMs, undefined, "tombstoneTimeoutMs incorrect");
369
- });
370
- it("IGCRuntimeOptions.sessionExpiryTimeoutMs", () => {
371
- gc = createGcWithPrivateMembers(undefined /* metadata */, {
372
- sessionExpiryTimeoutMs: 123,
373
- });
374
- assert.equal(gc.configs.sessionExpiryTimeoutMs, 123, "sessionExpiryTimeoutMs incorrect");
375
- assert.equal(gc.sessionExpiryTimer.defaultTimeout, 123, "sessionExpiryTimer incorrect");
376
- assert.equal(gc.configs.tombstoneTimeoutMs, 123 + 6 * oneDayMs, "tombstoneTimeoutMs incorrect");
377
- });
378
- it("IGCMetadata.sessionExpiryTimeoutMs, backfill tombstoneTimeoutMs", () => {
379
- configProvider.set(testOverrideTombstoneTimeoutKey, 1337); // Should be ignored
380
- gc = createGcWithPrivateMembers({ sessionExpiryTimeoutMs: 456 } /* metadata */);
381
- assert.equal(gc.configs.sessionExpiryTimeoutMs, 456, "sessionExpiryTimeoutMs incorrect");
382
- assert.equal(gc.sessionExpiryTimer.defaultTimeout, 456, "sessionExpiryTimer incorrect");
383
- assert.equal(gc.configs.tombstoneTimeoutMs, 456 + 6 * oneDayMs, "tombstoneTimeoutMs incorrect");
384
- });
385
- it("IGCMetadata.sessionExpiryTimeoutMs and IGCMetadata.tombstoneTimeoutMs", () => {
386
- configProvider.set(testOverrideTombstoneTimeoutKey, 1337); // Should be ignored
387
- gc = createGcWithPrivateMembers({ sessionExpiryTimeoutMs: 456, tombstoneTimeoutMs: 789 } /* metadata */);
388
- assert.equal(gc.configs.sessionExpiryTimeoutMs, 456, "sessionExpiryTimeoutMs incorrect");
389
- assert.equal(gc.sessionExpiryTimer.defaultTimeout, 456, "sessionExpiryTimer incorrect");
390
- assert.equal(gc.configs.tombstoneTimeoutMs, 789, "tombstoneTimeoutMs incorrect");
391
- });
392
- it("IGCMetadata.tombstoneTimeoutMs only", () => {
393
- configProvider.set(testOverrideTombstoneTimeoutKey, 1337); // Should be ignored
394
- // This could happen if you used TestOverride.TombstoneTimeoutMs but had SessionExpiry disabled, then loaded that container.
395
- gc = createGcWithPrivateMembers({ tombstoneTimeoutMs: 789 } /* metadata */);
396
- assert.equal(gc.configs.sessionExpiryTimeoutMs, undefined, "sessionExpiryTimeoutMs incorrect");
397
- assert.equal(gc.sessionExpiryTimer, undefined, "sessionExpiryTimer incorrect");
398
- assert.equal(gc.configs.tombstoneTimeoutMs, 789, "tombstoneTimeoutMs incorrect");
399
- });
400
- it("IGCMetadata.tombstoneTimeoutMs - backfill from sweepTimeoutMs", () => {
401
- configProvider.set(testOverrideTombstoneTimeoutKey, 1337); // Should be ignored
402
- const metadata = {
403
- sweepTimeoutMs: 789, // Snapshot was generated by code built before the rename
404
- };
405
- gc = createGcWithPrivateMembers(metadata);
406
- assert.equal(gc.configs.sessionExpiryTimeoutMs, undefined, "sessionExpiryTimeoutMs incorrect");
407
- assert.equal(gc.sessionExpiryTimer, undefined, "sessionExpiryTimer incorrect");
408
- assert.equal(gc.configs.tombstoneTimeoutMs, 789, "tombstoneTimeoutMs incorrect");
409
- });
410
- it("RunSessionExpiry setting turned off", () => {
411
- configProvider.set(runSessionExpiryKey, false);
412
- configProvider.set(testOverrideSessionExpiryMsKey, 123); // This override should be ignored
413
- gc = createGcWithPrivateMembers();
414
- assert.equal(gc.configs.sessionExpiryTimeoutMs, undefined, "sessionExpiryTimeoutMs should be undefined if runSessionExpiryKey setting is false");
415
- assert.equal(gc.sessionExpiryTimer, undefined, "sessionExpiryTimer should be undefined if it's disabled");
416
- assert.equal(gc.configs.tombstoneTimeoutMs, undefined, "tombstoneTimeoutMs incorrect");
417
- });
418
- it("RunSessionExpiry setting turned off, TestOverride.TombstoneTimeoutMs set", () => {
419
- configProvider.set(runSessionExpiryKey, false);
420
- configProvider.set(testOverrideTombstoneTimeoutKey, 7890);
421
- configProvider.set(testOverrideSessionExpiryMsKey, 123); // This override should be ignored
422
- gc = createGcWithPrivateMembers();
423
- assert.equal(gc.configs.sessionExpiryTimeoutMs, undefined, "sessionExpiryTimeoutMs should be undefined if runSessionExpiryKey setting is false");
424
- assert.equal(gc.sessionExpiryTimer, undefined, "sessionExpiryTimer should be undefined if it's disabled");
425
- assert.equal(gc.configs.tombstoneTimeoutMs, 7890, "tombstoneTimeoutMs incorrect");
426
- });
427
- function testSessionExpiryMsOverride() {
428
- const expectedTombstoneTimeoutMs = defaultSessionExpiryDurationMs + 6 * oneDayMs;
429
- assert(!!gc, "PRECONDITION: gc must be set before calling this helper");
430
- assert.equal(gc.configs.sessionExpiryTimeoutMs, defaultSessionExpiryDurationMs, "sessionExpiryTimeoutMs incorrect");
431
- assert.equal(gc.sessionExpiryTimer.defaultTimeout, 789, "sessionExpiry used for timer should be the override value");
432
- assert.equal(gc.configs.tombstoneTimeoutMs, expectedTombstoneTimeoutMs, "tombstoneTimeoutMs incorrect");
433
- const expectedMetadata = {
434
- sweepEnabled: false,
435
- gcFeature: stableGCVersion,
436
- sessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,
437
- tombstoneTimeoutMs: expectedTombstoneTimeoutMs,
438
- gcFeatureMatrix: undefined,
439
- };
440
- const outputMetadata = gc.getMetadata();
441
- assert.deepEqual(outputMetadata, expectedMetadata, "getMetadata returned different metadata than expected");
442
- }
443
- it("TestOverride.SessionExpiryMs setting applied to timeout but not written to file - New Container", () => {
444
- configProvider.set(testOverrideSessionExpiryMsKey, 789);
445
- gc = createGcWithPrivateMembers();
446
- testSessionExpiryMsOverride();
447
- });
448
- it("TestOverride.SessionExpiryMs setting applied to timeout but not written to file - Existing Container", () => {
449
- configProvider.set(testOverrideSessionExpiryMsKey, 789);
450
- gc = createGcWithPrivateMembers({
451
- sessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,
452
- gcFeature: 1,
453
- } /* metadata */);
454
- testSessionExpiryMsOverride();
455
- });
456
- });
457
- describe("Session Behavior (e.g. 'shouldRun' fields)", () => {
458
- beforeEach(() => {
459
- configProvider.set("Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs", 1); // To ensure it's less than tombstone timeout
460
- });
461
- describe("shouldRunGC", () => {
462
- const testCases = [
463
- { gcEnabled: false, disableGC: true, runGC: true, expectedResult: true },
464
- { gcEnabled: true, disableGC: false, runGC: false, expectedResult: false },
465
- { gcEnabled: true, disableGC: true, expectedResult: false },
466
- { gcEnabled: true, disableGC: false, expectedResult: true },
467
- { gcEnabled: true, expectedResult: true },
468
- { gcEnabled: false, expectedResult: false },
469
- ];
470
- testCases.forEach((testCase) => {
471
- it(`Test Case ${JSON.stringify(testCase)}`, () => {
472
- configProvider.set(runGCKey, testCase.runGC);
473
- gc = createGcWithPrivateMembers(undefined /* metadata */, {
474
- gcAllowed: testCase.gcEnabled,
475
- disableGC: testCase.disableGC,
476
- });
477
- assert.equal(gc.configs.gcEnabled, testCase.gcEnabled, "PRECONDITION: gcEnabled set incorrectly");
478
- assert.equal(gc.configs.shouldRunGC, testCase.expectedResult, "shouldRunGC not set as expected");
479
- });
480
- });
481
- it("shouldRunGC should be true when gcVersionInEffect is newer than gcVersionInBaseSnapshot", () => {
482
- const gcVersionInBaseSnapshot = stableGCVersion - 1;
483
- gc = createGcWithPrivateMembers({ gcFeature: gcVersionInBaseSnapshot });
484
- assert.equal(gc.configs.gcEnabled, true, "PRECONDITION: gcEnabled set incorrectly");
485
- assert.equal(gc.configs.shouldRunGC, true, "shouldRunGC should be true");
486
- assert.equal(gc.configs.gcVersionInBaseSnapshot, gcVersionInBaseSnapshot, "gcVersionInBaseSnapshot set incorrectly");
487
- });
488
- it("shouldRunGC should be false when gcVersionInEffect is older than gcVersionInBaseSnapshot", () => {
489
- const gcVersionInBaseSnapshot = nextGCVersion + 1;
490
- gc = createGcWithPrivateMembers({ gcFeature: gcVersionInBaseSnapshot });
491
- assert.equal(gc.configs.gcEnabled, true, "PRECONDITION: gcEnabled set incorrectly");
492
- assert.equal(gc.configs.shouldRunGC, false, "shouldRunGC should be false");
493
- assert.equal(gc.configs.gcVersionInBaseSnapshot, gcVersionInBaseSnapshot, "gcVersionInBaseSnapshot set incorrectly");
494
- });
495
- });
496
- describe("shouldRunSweep", () => {
497
- const testCases = [
498
- {
499
- shouldRunGC: false,
500
- sweepEnabled_doc: true,
501
- sweepEnabled_session: true,
502
- disableDataStoreSweep: "viaGCOption",
503
- shouldRunSweep: true,
504
- expectedShouldRunSweep: "NO",
505
- },
506
- {
507
- shouldRunGC: true,
508
- sweepEnabled_doc: false,
509
- sweepEnabled_session: true,
510
- disableDataStoreSweep: "viaGCOption",
511
- expectedShouldRunSweep: "NO",
512
- },
513
- {
514
- shouldRunGC: true,
515
- sweepEnabled_doc: true,
516
- sweepEnabled_session: false,
517
- disableDataStoreSweep: "viaGCOption",
518
- expectedShouldRunSweep: "NO",
519
- },
520
- {
521
- shouldRunGC: true,
522
- sweepEnabled_doc: true,
523
- sweepEnabled_session: true,
524
- shouldRunSweep: false,
525
- disableDataStoreSweep: "viaGCOption",
526
- expectedShouldRunSweep: "NO",
527
- },
528
- {
529
- shouldRunGC: true,
530
- sweepEnabled_doc: true,
531
- sweepEnabled_session: false,
532
- shouldRunSweep: true,
533
- expectedShouldRunSweep: "YES",
534
- },
535
- {
536
- shouldRunGC: true,
537
- sweepEnabled_doc: true,
538
- sweepEnabled_session: true,
539
- expectedShouldRunSweep: "YES",
540
- },
541
- {
542
- shouldRunGC: true,
543
- sweepEnabled_doc: true,
544
- sweepEnabled_session: true,
545
- disableDataStoreSweep: "viaGCOption",
546
- expectedShouldRunSweep: "ONLY_BLOBS",
547
- },
548
- {
549
- shouldRunGC: true,
550
- sweepEnabled_doc: true,
551
- sweepEnabled_session: true,
552
- disableDataStoreSweep: "viaConfigProvider",
553
- expectedShouldRunSweep: "ONLY_BLOBS",
554
- },
555
- {
556
- shouldRunGC: true,
557
- sweepEnabled_doc: true,
558
- sweepEnabled_session: true,
559
- shouldRunSweep: true,
560
- disableDataStoreSweep: "viaGCOption",
561
- expectedShouldRunSweep: "ONLY_BLOBS",
562
- },
563
- ];
564
- testCases.forEach((testCase, index) => {
565
- it(`Test Case ${JSON.stringify(testCase)}`, () => {
566
- configProvider.set(runGCKey, testCase.shouldRunGC);
567
- configProvider.set(runSweepKey, testCase.shouldRunSweep);
568
- configProvider.set(disableDatastoreSweepKey, testCase.disableDataStoreSweep === "viaConfigProvider");
569
- gc = createGcWithPrivateMembers({
570
- gcFeatureMatrix: { gcGeneration: 1 },
571
- sessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,
572
- } /* metadata */, {
573
- [gcDisableDataStoreSweepOptionName]: testCase.disableDataStoreSweep === "viaGCOption",
574
- enableGCSweep: testCase.sweepEnabled_session ? true : undefined,
575
- [gcGenerationOptionName]: testCase.sweepEnabled_doc ? 1 : 2,
576
- } /* gcOptions */);
577
- assert.equal(gc.configs.shouldRunGC, testCase.shouldRunGC, "PRECONDITION: shouldRunGC set incorrectly");
578
- assert.equal(gc.configs.sweepEnabled, testCase.sweepEnabled_doc, "PRECONDITION: sweepEnabled set incorrectly");
579
- assert.equal(gc.configs.shouldRunSweep, testCase.expectedShouldRunSweep, `shouldRunSweep not set as expected`);
580
- });
581
- });
582
- });
583
- describe("inactiveTimeoutMs", () => {
584
- beforeEach(() => {
585
- // Remove setting added in outer describe block
586
- configProvider.set("Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs", undefined);
587
- });
588
- const testCases = [
589
- { testOverride: 123, option: 456, expectedResult: 123 },
590
- { option: 456, expectedResult: 456 },
591
- { expectedResult: defaultInactiveTimeoutMs },
592
- ];
593
- testCases.forEach((testCase) => {
594
- it(`Test Case ${JSON.stringify(testCase)}`, () => {
595
- configProvider.set("Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs", testCase.testOverride);
596
- gc = createGcWithPrivateMembers(undefined /* metadata */, {
597
- inactiveTimeoutMs: testCase.option,
598
- });
599
- assert.equal(gc.configs.inactiveTimeoutMs, testCase.expectedResult, "inactiveTimeoutMs not set as expected");
600
- });
601
- });
602
- it("inactiveTimeout must not be greater than tombstoneTimeout", () => {
603
- configProvider.set("Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs", Number.MAX_VALUE);
604
- assert.throws(() => {
605
- gc = createGcWithPrivateMembers();
606
- }, (e) => e.errorType === "usageError", "inactiveTimeout must not be greater than tombstoneTimeout");
607
- });
608
- });
609
- describe("sweepGracePeriodMs", () => {
610
- const testCases = [
611
- { option: 123, expectedResult: 123 },
612
- { option: 0, expectedResult: 0 },
613
- { option: undefined, expectedResult: defaultSweepGracePeriodMs },
614
- ];
615
- testCases.forEach((testCase) => {
616
- it(`Test Case ${JSON.stringify(testCase)}`, () => {
617
- gc = createGcWithPrivateMembers({} /* metadata */, {
618
- sweepGracePeriodMs: testCase.option,
619
- });
620
- assert.equal(gc.configs.sweepGracePeriodMs, testCase.expectedResult);
621
- });
622
- });
623
- it("sweepGracePeriodMs must be non-negative", () => {
624
- assert.throws(() => {
625
- gc = createGcWithPrivateMembers({} /* metadata */, {
626
- sweepGracePeriodMs: -1,
627
- });
628
- }, (e) => e.errorType === "usageError", "sweepGracePeriodMs must be non-negative");
629
- });
630
- });
631
- describe("testMode", () => {
632
- const testCases = [
633
- { setting: true, option: false, expectedResult: true },
634
- { setting: false, option: true, expectedResult: false },
635
- { option: true, expectedResult: true },
636
- { expectedResult: false },
637
- ];
638
- testCases.forEach((testCase) => {
639
- it(`Test Case ${JSON.stringify(testCase)}`, () => {
640
- configProvider.set(gcTestModeKey, testCase.setting);
641
- gc = createGcWithPrivateMembers(undefined /* metadata */, {
642
- runGCInTestMode: testCase.option,
643
- });
644
- assert.equal(gc.configs.testMode, testCase.expectedResult, "testMode not set as expected");
645
- });
646
- });
647
- });
648
- });
649
- describe("throwOnTombstoneLoad (using new container)", () => {
650
- beforeEach(() => {
651
- configProvider.set(testOverrideSessionExpiryMsKey, defaultSessionExpiryDurationMs); // Required for sweep to be enabled
652
- });
653
- it("gcDisableThrowOnTombstoneLoad true", () => {
654
- gc = createGcWithPrivateMembers(undefined /* metadata */, { enableGCSweep: true, [gcDisableThrowOnTombstoneLoadOptionName]: true }, false /* isSummarizerClient */);
655
- assert.equal(gc.configs.throwOnTombstoneLoad, false, "throwOnTombstoneLoad incorrect");
656
- });
657
- it("gcDisableThrowOnTombstoneLoad false", () => {
658
- gc = createGcWithPrivateMembers(undefined /* metadata */, { enableGCSweep: true, [gcDisableThrowOnTombstoneLoadOptionName]: false }, false /* isSummarizerClient */);
659
- assert.equal(gc.configs.throwOnTombstoneLoad, true, "throwOnTombstoneLoad incorrect");
660
- });
661
- it("gcDisableThrowOnTombstoneLoad undefined", () => {
662
- gc = createGcWithPrivateMembers(undefined /* metadata */, {
663
- enableGCSweep: true,
664
- [gcDisableThrowOnTombstoneLoadOptionName]: undefined,
665
- }, false /* isSummarizerClient */);
666
- assert.equal(gc.configs.throwOnTombstoneLoad, true, "throwOnTombstoneLoad incorrect");
667
- });
668
- it("gcDisableThrowOnTombstoneLoad undefined - Sweep Disabled does not interfere", () => {
669
- configProvider.set(runSweepKey, false); // Disable Sweep
670
- gc = createGcWithPrivateMembers(undefined /* metadata */, { [gcDisableThrowOnTombstoneLoadOptionName]: undefined }, false /* isSummarizerClient */);
671
- assert.equal(gc.configs.throwOnTombstoneLoad, true, "throwOnTombstoneLoad incorrect");
672
- });
673
- it("Old 'enable' option false (ignored)", () => {
674
- const gcThrowOnTombstoneLoadOptionName_old = "gcThrowOnTombstoneLoad";
675
- gc = createGcWithPrivateMembers(undefined /* metadata */, { enableGCSweep: true, [gcThrowOnTombstoneLoadOptionName_old]: false }, false /* isSummarizerClient */);
676
- assert.equal(gc.configs.throwOnTombstoneLoad, true, "throwOnTombstoneLoad incorrect");
677
- });
678
- it("throwOnTombstoneLoad enabled via override", () => {
679
- configProvider.set(throwOnTombstoneLoadOverrideKey, true);
680
- gc = createGcWithPrivateMembers(undefined /* metadata */, { enableGCSweep: true, [gcDisableThrowOnTombstoneLoadOptionName]: true }, false /* isSummarizerClient */);
681
- assert.equal(gc.configs.throwOnTombstoneLoad, true, "throwOnTombstoneLoad incorrect");
682
- });
683
- it("throwOnTombstoneLoad disabled via override", () => {
684
- configProvider.set(throwOnTombstoneLoadOverrideKey, false);
685
- gc = createGcWithPrivateMembers(undefined /* metadata */, { enableGCSweep: true, [gcDisableThrowOnTombstoneLoadOptionName]: false }, false /* isSummarizerClient */);
686
- assert.equal(gc.configs.throwOnTombstoneLoad, false, "throwOnTombstoneLoad incorrect");
687
- });
688
- });
689
- });
690
- //# sourceMappingURL=gcConfigs.spec.js.map