@fluidframework/container-runtime 2.0.0-rc.1.0.3 → 2.0.0-rc.2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (690) hide show
  1. package/{.eslintrc.js → .eslintrc.cjs} +5 -5
  2. package/{.mocharc.js → .mocharc.cjs} +1 -1
  3. package/CHANGELOG.md +54 -0
  4. package/README.md +45 -0
  5. package/{api-extractor-esm.json → api-extractor-cjs.json} +5 -1
  6. package/api-extractor-lint.json +1 -1
  7. package/api-extractor.json +1 -1
  8. package/api-report/container-runtime.api.md +68 -30
  9. package/dist/batchTracker.d.ts +1 -2
  10. package/dist/batchTracker.d.ts.map +1 -1
  11. package/dist/batchTracker.js.map +1 -1
  12. package/dist/blobManager.js.map +1 -1
  13. package/dist/channelCollection.d.ts +223 -0
  14. package/dist/channelCollection.d.ts.map +1 -0
  15. package/dist/{dataStores.js → channelCollection.js} +399 -83
  16. package/dist/channelCollection.js.map +1 -0
  17. package/dist/connectionTelemetry.d.ts +11 -1
  18. package/dist/connectionTelemetry.d.ts.map +1 -1
  19. package/dist/connectionTelemetry.js +42 -4
  20. package/dist/connectionTelemetry.js.map +1 -1
  21. package/dist/container-runtime-alpha.d.ts +98 -40
  22. package/dist/container-runtime-beta.d.ts +27 -9
  23. package/dist/container-runtime-public.d.ts +27 -9
  24. package/dist/container-runtime-untrimmed.d.ts +123 -40
  25. package/dist/containerHandleContext.d.ts +1 -1
  26. package/dist/containerHandleContext.d.ts.map +1 -1
  27. package/dist/containerHandleContext.js.map +1 -1
  28. package/dist/containerRuntime.d.ts +79 -55
  29. package/dist/containerRuntime.d.ts.map +1 -1
  30. package/dist/containerRuntime.js +541 -411
  31. package/dist/containerRuntime.js.map +1 -1
  32. package/dist/dataStore.d.ts +2 -3
  33. package/dist/dataStore.d.ts.map +1 -1
  34. package/dist/dataStore.js +12 -11
  35. package/dist/dataStore.js.map +1 -1
  36. package/dist/dataStoreContext.d.ts +71 -30
  37. package/dist/dataStoreContext.d.ts.map +1 -1
  38. package/dist/dataStoreContext.js +182 -141
  39. package/dist/dataStoreContext.js.map +1 -1
  40. package/dist/dataStoreContexts.d.ts +1 -1
  41. package/dist/dataStoreContexts.d.ts.map +1 -1
  42. package/dist/dataStoreContexts.js.map +1 -1
  43. package/dist/deltaManagerSummarizerProxy.d.ts +29 -4
  44. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
  45. package/dist/deltaManagerSummarizerProxy.js +91 -5
  46. package/dist/deltaManagerSummarizerProxy.js.map +1 -1
  47. package/dist/gc/garbageCollection.d.ts +22 -5
  48. package/dist/gc/garbageCollection.d.ts.map +1 -1
  49. package/dist/gc/garbageCollection.js +134 -75
  50. package/dist/gc/garbageCollection.js.map +1 -1
  51. package/dist/gc/gcConfigs.d.ts +2 -2
  52. package/dist/gc/gcConfigs.d.ts.map +1 -1
  53. package/dist/gc/gcConfigs.js +21 -21
  54. package/dist/gc/gcConfigs.js.map +1 -1
  55. package/dist/gc/gcDefinitions.d.ts +29 -6
  56. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  57. package/dist/gc/gcDefinitions.js +5 -1
  58. package/dist/gc/gcDefinitions.js.map +1 -1
  59. package/dist/gc/gcHelpers.d.ts +2 -2
  60. package/dist/gc/gcHelpers.d.ts.map +1 -1
  61. package/dist/gc/gcHelpers.js.map +1 -1
  62. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +1 -1
  63. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -1
  64. package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
  65. package/dist/gc/gcSummaryStateTracker.d.ts +12 -5
  66. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  67. package/dist/gc/gcSummaryStateTracker.js +18 -6
  68. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  69. package/dist/gc/gcTelemetry.d.ts +7 -7
  70. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  71. package/dist/gc/gcTelemetry.js +20 -20
  72. package/dist/gc/gcTelemetry.js.map +1 -1
  73. package/dist/gc/gcUnreferencedStateTracker.d.ts +6 -1
  74. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
  75. package/dist/gc/gcUnreferencedStateTracker.js +22 -11
  76. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  77. package/dist/gc/index.d.ts +8 -8
  78. package/dist/gc/index.d.ts.map +1 -1
  79. package/dist/gc/index.js +40 -38
  80. package/dist/gc/index.js.map +1 -1
  81. package/dist/index.d.ts +8 -20
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +28 -40
  84. package/dist/index.js.map +1 -1
  85. package/dist/messageTypes.d.ts +4 -4
  86. package/dist/messageTypes.d.ts.map +1 -1
  87. package/dist/messageTypes.js.map +1 -1
  88. package/dist/opLifecycle/batchManager.d.ts +2 -2
  89. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  90. package/dist/opLifecycle/batchManager.js.map +1 -1
  91. package/dist/opLifecycle/definitions.d.ts +2 -2
  92. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  93. package/dist/opLifecycle/definitions.js.map +1 -1
  94. package/dist/opLifecycle/index.d.ts +8 -8
  95. package/dist/opLifecycle/index.d.ts.map +1 -1
  96. package/dist/opLifecycle/index.js +18 -18
  97. package/dist/opLifecycle/index.js.map +1 -1
  98. package/dist/opLifecycle/opCompressor.d.ts +1 -1
  99. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  100. package/dist/opLifecycle/opCompressor.js +4 -4
  101. package/dist/opLifecycle/opCompressor.js.map +1 -1
  102. package/dist/opLifecycle/opDecompressor.d.ts +1 -1
  103. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  104. package/dist/opLifecycle/opDecompressor.js +3 -3
  105. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  106. package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
  107. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  108. package/dist/opLifecycle/opGroupingManager.js +1 -10
  109. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  110. package/dist/opLifecycle/opSplitter.d.ts +1 -1
  111. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  112. package/dist/opLifecycle/opSplitter.js +5 -5
  113. package/dist/opLifecycle/opSplitter.js.map +1 -1
  114. package/dist/opLifecycle/outbox.d.ts +7 -7
  115. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  116. package/dist/opLifecycle/outbox.js +20 -12
  117. package/dist/opLifecycle/outbox.js.map +1 -1
  118. package/dist/opLifecycle/remoteMessageProcessor.d.ts +4 -4
  119. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  120. package/dist/opLifecycle/remoteMessageProcessor.js +2 -2
  121. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  122. package/dist/package.json +3 -0
  123. package/dist/packageVersion.d.ts +1 -1
  124. package/dist/packageVersion.js +1 -1
  125. package/dist/packageVersion.js.map +1 -1
  126. package/dist/pendingStateManager.d.ts +2 -1
  127. package/dist/pendingStateManager.d.ts.map +1 -1
  128. package/dist/pendingStateManager.js +18 -10
  129. package/dist/pendingStateManager.js.map +1 -1
  130. package/dist/scheduleManager.d.ts +1 -2
  131. package/dist/scheduleManager.d.ts.map +1 -1
  132. package/dist/scheduleManager.js +5 -5
  133. package/dist/scheduleManager.js.map +1 -1
  134. package/dist/summary/index.d.ts +12 -12
  135. package/dist/summary/index.d.ts.map +1 -1
  136. package/dist/summary/index.js +43 -43
  137. package/dist/summary/index.js.map +1 -1
  138. package/dist/summary/orderedClientElection.js +8 -8
  139. package/dist/summary/orderedClientElection.js.map +1 -1
  140. package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
  141. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  142. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  143. package/dist/summary/runningSummarizer.d.ts +11 -10
  144. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  145. package/dist/summary/runningSummarizer.js +114 -81
  146. package/dist/summary/runningSummarizer.js.map +1 -1
  147. package/dist/summary/summarizer.d.ts +4 -4
  148. package/dist/summary/summarizer.d.ts.map +1 -1
  149. package/dist/summary/summarizer.js +6 -6
  150. package/dist/summary/summarizer.js.map +1 -1
  151. package/dist/summary/summarizerClientElection.d.ts +2 -2
  152. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  153. package/dist/summary/summarizerClientElection.js.map +1 -1
  154. package/dist/summary/summarizerHeuristics.d.ts +3 -3
  155. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  156. package/dist/summary/summarizerHeuristics.js.map +1 -1
  157. package/dist/summary/summarizerNode/index.d.ts +3 -3
  158. package/dist/summary/summarizerNode/index.d.ts.map +1 -1
  159. package/dist/summary/summarizerNode/index.js +4 -4
  160. package/dist/summary/summarizerNode/index.js.map +1 -1
  161. package/dist/summary/summarizerNode/summarizerNode.d.ts +17 -7
  162. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  163. package/dist/summary/summarizerNode/summarizerNode.js +45 -57
  164. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  165. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +10 -19
  166. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  167. package/dist/summary/summarizerNode/summarizerNodeUtils.js +1 -21
  168. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  169. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +5 -6
  170. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  171. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +16 -16
  172. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  173. package/dist/summary/summarizerTypes.d.ts +10 -21
  174. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  175. package/dist/summary/summarizerTypes.js.map +1 -1
  176. package/dist/summary/summaryFormat.d.ts +15 -2
  177. package/dist/summary/summaryFormat.d.ts.map +1 -1
  178. package/dist/summary/summaryFormat.js.map +1 -1
  179. package/dist/summary/summaryGenerator.d.ts +6 -5
  180. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  181. package/dist/summary/summaryGenerator.js +10 -1
  182. package/dist/summary/summaryGenerator.js.map +1 -1
  183. package/dist/summary/summaryManager.d.ts +5 -6
  184. package/dist/summary/summaryManager.d.ts.map +1 -1
  185. package/dist/summary/summaryManager.js +4 -5
  186. package/dist/summary/summaryManager.js.map +1 -1
  187. package/dist/tsdoc-metadata.json +1 -1
  188. package/lib/{batchTracker.d.mts → batchTracker.d.ts} +2 -3
  189. package/lib/batchTracker.d.ts.map +1 -0
  190. package/lib/{batchTracker.mjs → batchTracker.js} +1 -1
  191. package/lib/batchTracker.js.map +1 -0
  192. package/lib/{blobManager.d.mts → blobManager.d.ts} +1 -1
  193. package/lib/blobManager.d.ts.map +1 -0
  194. package/lib/{blobManager.mjs → blobManager.js} +1 -1
  195. package/lib/blobManager.js.map +1 -0
  196. package/lib/channelCollection.d.ts +223 -0
  197. package/lib/channelCollection.d.ts.map +1 -0
  198. package/lib/{dataStores.mjs → channelCollection.js} +384 -71
  199. package/lib/channelCollection.js.map +1 -0
  200. package/lib/{connectionTelemetry.d.mts → connectionTelemetry.d.ts} +12 -2
  201. package/lib/connectionTelemetry.d.ts.map +1 -0
  202. package/lib/{connectionTelemetry.mjs → connectionTelemetry.js} +43 -5
  203. package/lib/connectionTelemetry.js.map +1 -0
  204. package/lib/{container-runtime-alpha.d.mts → container-runtime-alpha.d.ts} +98 -40
  205. package/lib/{container-runtime-public.d.mts → container-runtime-beta.d.ts} +27 -9
  206. package/lib/{container-runtime-beta.d.mts → container-runtime-public.d.ts} +27 -9
  207. package/lib/{container-runtime-untrimmed.d.mts → container-runtime-untrimmed.d.ts} +123 -40
  208. package/lib/{containerHandleContext.d.mts → containerHandleContext.d.ts} +2 -2
  209. package/lib/containerHandleContext.d.ts.map +1 -0
  210. package/lib/{containerHandleContext.mjs → containerHandleContext.js} +1 -1
  211. package/lib/containerHandleContext.js.map +1 -0
  212. package/lib/{containerRuntime.d.mts → containerRuntime.d.ts} +84 -56
  213. package/lib/containerRuntime.d.ts.map +1 -0
  214. package/lib/{containerRuntime.mjs → containerRuntime.js} +460 -332
  215. package/lib/containerRuntime.js.map +1 -0
  216. package/lib/{dataStore.d.mts → dataStore.d.ts} +3 -4
  217. package/lib/dataStore.d.ts.map +1 -0
  218. package/lib/{dataStore.mjs → dataStore.js} +13 -12
  219. package/lib/dataStore.js.map +1 -0
  220. package/lib/{dataStoreContext.d.mts → dataStoreContext.d.ts} +72 -31
  221. package/lib/dataStoreContext.d.ts.map +1 -0
  222. package/lib/{dataStoreContext.mjs → dataStoreContext.js} +174 -133
  223. package/lib/dataStoreContext.js.map +1 -0
  224. package/lib/{dataStoreContexts.d.mts → dataStoreContexts.d.ts} +2 -2
  225. package/lib/dataStoreContexts.d.ts.map +1 -0
  226. package/lib/{dataStoreContexts.mjs → dataStoreContexts.js} +1 -1
  227. package/lib/dataStoreContexts.js.map +1 -0
  228. package/lib/{dataStoreRegistry.d.mts → dataStoreRegistry.d.ts} +1 -1
  229. package/lib/dataStoreRegistry.d.ts.map +1 -0
  230. package/lib/{dataStoreRegistry.mjs → dataStoreRegistry.js} +5 -1
  231. package/lib/dataStoreRegistry.js.map +1 -0
  232. package/{dist/deltaManagerProxyBase.d.ts → lib/deltaManagerSummarizerProxy.d.ts} +16 -7
  233. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
  234. package/lib/deltaManagerSummarizerProxy.js +124 -0
  235. package/lib/deltaManagerSummarizerProxy.js.map +1 -0
  236. package/lib/{deltaScheduler.d.mts → deltaScheduler.d.ts} +1 -1
  237. package/lib/deltaScheduler.d.ts.map +1 -0
  238. package/lib/{deltaScheduler.mjs → deltaScheduler.js} +1 -1
  239. package/lib/deltaScheduler.js.map +1 -0
  240. package/lib/{error.d.mts → error.d.ts} +1 -1
  241. package/lib/error.d.ts.map +1 -0
  242. package/lib/{error.mjs → error.js} +1 -1
  243. package/lib/error.js.map +1 -0
  244. package/lib/gc/{garbageCollection.d.mts → garbageCollection.d.ts} +23 -6
  245. package/lib/gc/garbageCollection.d.ts.map +1 -0
  246. package/lib/gc/{garbageCollection.mjs → garbageCollection.js} +103 -44
  247. package/lib/gc/garbageCollection.js.map +1 -0
  248. package/lib/gc/{gcConfigs.d.mts → gcConfigs.d.ts} +3 -3
  249. package/lib/gc/gcConfigs.d.ts.map +1 -0
  250. package/lib/gc/{gcConfigs.mjs → gcConfigs.js} +3 -3
  251. package/lib/gc/gcConfigs.js.map +1 -0
  252. package/lib/gc/{gcDefinitions.d.mts → gcDefinitions.d.ts} +30 -7
  253. package/lib/gc/gcDefinitions.d.ts.map +1 -0
  254. package/lib/gc/{gcDefinitions.mjs → gcDefinitions.js} +5 -1
  255. package/lib/gc/gcDefinitions.js.map +1 -0
  256. package/lib/gc/{gcHelpers.d.mts → gcHelpers.d.ts} +3 -3
  257. package/lib/gc/{gcHelpers.d.mts.map → gcHelpers.d.ts.map} +1 -1
  258. package/lib/gc/{gcHelpers.mjs → gcHelpers.js} +1 -1
  259. package/lib/gc/gcHelpers.js.map +1 -0
  260. package/lib/gc/{gcReferenceGraphAlgorithm.d.mts → gcReferenceGraphAlgorithm.d.ts} +2 -2
  261. package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  262. package/lib/gc/{gcReferenceGraphAlgorithm.mjs → gcReferenceGraphAlgorithm.js} +1 -1
  263. package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
  264. package/lib/gc/{gcSummaryDefinitions.d.mts → gcSummaryDefinitions.d.ts} +1 -1
  265. package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
  266. package/lib/gc/{gcSummaryDefinitions.mjs → gcSummaryDefinitions.js} +1 -1
  267. package/lib/gc/gcSummaryDefinitions.js.map +1 -0
  268. package/lib/gc/{gcSummaryStateTracker.d.mts → gcSummaryStateTracker.d.ts} +13 -6
  269. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
  270. package/lib/gc/{gcSummaryStateTracker.mjs → gcSummaryStateTracker.js} +17 -5
  271. package/lib/gc/gcSummaryStateTracker.js.map +1 -0
  272. package/lib/gc/{gcTelemetry.d.mts → gcTelemetry.d.ts} +8 -8
  273. package/lib/gc/gcTelemetry.d.ts.map +1 -0
  274. package/lib/gc/{gcTelemetry.mjs → gcTelemetry.js} +5 -5
  275. package/lib/gc/gcTelemetry.js.map +1 -0
  276. package/lib/gc/{gcUnreferencedStateTracker.d.mts → gcUnreferencedStateTracker.d.ts} +7 -2
  277. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  278. package/lib/gc/{gcUnreferencedStateTracker.mjs → gcUnreferencedStateTracker.js} +12 -2
  279. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
  280. package/lib/gc/{index.d.mts → index.d.ts} +9 -9
  281. package/lib/gc/index.d.ts.map +1 -0
  282. package/lib/gc/{index.mjs → index.js} +8 -8
  283. package/lib/gc/index.js.map +1 -0
  284. package/lib/{index.d.mts → index.d.ts} +9 -21
  285. package/lib/index.d.ts.map +1 -0
  286. package/lib/index.js +12 -0
  287. package/lib/index.js.map +1 -0
  288. package/lib/{messageTypes.d.mts → messageTypes.d.ts} +5 -5
  289. package/lib/messageTypes.d.ts.map +1 -0
  290. package/lib/{messageTypes.mjs → messageTypes.js} +1 -1
  291. package/lib/messageTypes.js.map +1 -0
  292. package/lib/{metadata.d.mts → metadata.d.ts} +1 -1
  293. package/lib/metadata.d.ts.map +1 -0
  294. package/lib/{metadata.mjs → metadata.js} +1 -1
  295. package/lib/metadata.js.map +1 -0
  296. package/lib/opLifecycle/{batchManager.d.mts → batchManager.d.ts} +3 -3
  297. package/lib/opLifecycle/batchManager.d.ts.map +1 -0
  298. package/lib/opLifecycle/{batchManager.mjs → batchManager.js} +1 -1
  299. package/lib/opLifecycle/batchManager.js.map +1 -0
  300. package/lib/opLifecycle/{definitions.d.mts → definitions.d.ts} +3 -3
  301. package/lib/opLifecycle/definitions.d.ts.map +1 -0
  302. package/lib/opLifecycle/{definitions.mjs → definitions.js} +1 -1
  303. package/lib/opLifecycle/definitions.js.map +1 -0
  304. package/lib/opLifecycle/index.d.ts +13 -0
  305. package/lib/opLifecycle/index.d.ts.map +1 -0
  306. package/lib/opLifecycle/index.js +12 -0
  307. package/lib/opLifecycle/index.js.map +1 -0
  308. package/lib/opLifecycle/{opCompressor.d.mts → opCompressor.d.ts} +2 -2
  309. package/lib/opLifecycle/opCompressor.d.ts.map +1 -0
  310. package/lib/opLifecycle/{opCompressor.mjs → opCompressor.js} +3 -3
  311. package/lib/opLifecycle/opCompressor.js.map +1 -0
  312. package/lib/opLifecycle/{opDecompressor.d.mts → opDecompressor.d.ts} +2 -2
  313. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -0
  314. package/lib/opLifecycle/{opDecompressor.mjs → opDecompressor.js} +2 -2
  315. package/lib/opLifecycle/opDecompressor.js.map +1 -0
  316. package/lib/opLifecycle/{opGroupingManager.d.mts → opGroupingManager.d.ts} +2 -2
  317. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -0
  318. package/lib/opLifecycle/{opGroupingManager.mjs → opGroupingManager.js} +2 -11
  319. package/lib/opLifecycle/opGroupingManager.js.map +1 -0
  320. package/lib/opLifecycle/{opSplitter.d.mts → opSplitter.d.ts} +2 -2
  321. package/lib/opLifecycle/opSplitter.d.ts.map +1 -0
  322. package/lib/opLifecycle/{opSplitter.mjs → opSplitter.js} +3 -3
  323. package/lib/opLifecycle/opSplitter.js.map +1 -0
  324. package/lib/opLifecycle/{outbox.d.mts → outbox.d.ts} +8 -8
  325. package/lib/opLifecycle/outbox.d.ts.map +1 -0
  326. package/lib/opLifecycle/{outbox.mjs → outbox.js} +12 -4
  327. package/lib/opLifecycle/outbox.js.map +1 -0
  328. package/lib/opLifecycle/{remoteMessageProcessor.d.mts → remoteMessageProcessor.d.ts} +5 -5
  329. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  330. package/lib/opLifecycle/{remoteMessageProcessor.mjs → remoteMessageProcessor.js} +2 -2
  331. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -0
  332. package/lib/{opProperties.d.mts → opProperties.d.ts} +1 -1
  333. package/lib/opProperties.d.ts.map +1 -0
  334. package/lib/{opProperties.mjs → opProperties.js} +1 -1
  335. package/lib/opProperties.js.map +1 -0
  336. package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
  337. package/lib/packageVersion.d.ts.map +1 -0
  338. package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
  339. package/lib/packageVersion.js.map +1 -0
  340. package/lib/{pendingStateManager.d.mts → pendingStateManager.d.ts} +3 -2
  341. package/lib/pendingStateManager.d.ts.map +1 -0
  342. package/lib/{pendingStateManager.mjs → pendingStateManager.js} +18 -10
  343. package/lib/pendingStateManager.js.map +1 -0
  344. package/lib/{scheduleManager.d.mts → scheduleManager.d.ts} +6 -3
  345. package/lib/scheduleManager.d.ts.map +1 -0
  346. package/lib/{scheduleManager.mjs → scheduleManager.js} +3 -3
  347. package/lib/scheduleManager.js.map +1 -0
  348. package/lib/{storageServiceWithAttachBlobs.d.mts → storageServiceWithAttachBlobs.d.ts} +1 -1
  349. package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
  350. package/lib/{storageServiceWithAttachBlobs.mjs → storageServiceWithAttachBlobs.js} +1 -1
  351. package/lib/storageServiceWithAttachBlobs.js.map +1 -0
  352. package/lib/summary/{index.d.mts → index.d.ts} +13 -13
  353. package/lib/summary/index.d.ts.map +1 -0
  354. package/lib/summary/{index.mjs → index.js} +12 -12
  355. package/lib/summary/index.js.map +1 -0
  356. package/lib/summary/{orderedClientElection.d.mts → orderedClientElection.d.ts} +5 -1
  357. package/lib/summary/orderedClientElection.d.ts.map +1 -0
  358. package/lib/summary/{orderedClientElection.mjs → orderedClientElection.js} +2 -2
  359. package/lib/summary/orderedClientElection.js.map +1 -0
  360. package/lib/summary/{runWhileConnectedCoordinator.d.mts → runWhileConnectedCoordinator.d.ts} +2 -2
  361. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  362. package/lib/summary/{runWhileConnectedCoordinator.mjs → runWhileConnectedCoordinator.js} +1 -1
  363. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
  364. package/lib/summary/{runningSummarizer.d.mts → runningSummarizer.d.ts} +12 -11
  365. package/lib/summary/runningSummarizer.d.ts.map +1 -0
  366. package/lib/summary/{runningSummarizer.mjs → runningSummarizer.js} +108 -75
  367. package/lib/summary/runningSummarizer.js.map +1 -0
  368. package/lib/summary/{summarizer.d.mts → summarizer.d.ts} +5 -5
  369. package/lib/summary/summarizer.d.ts.map +1 -0
  370. package/lib/summary/{summarizer.mjs → summarizer.js} +4 -4
  371. package/lib/summary/summarizer.js.map +1 -0
  372. package/lib/summary/{summarizerClientElection.d.mts → summarizerClientElection.d.ts} +3 -3
  373. package/lib/summary/summarizerClientElection.d.ts.map +1 -0
  374. package/lib/summary/{summarizerClientElection.mjs → summarizerClientElection.js} +1 -1
  375. package/lib/summary/summarizerClientElection.js.map +1 -0
  376. package/lib/summary/{summarizerHeuristics.d.mts → summarizerHeuristics.d.ts} +4 -4
  377. package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
  378. package/lib/summary/{summarizerHeuristics.mjs → summarizerHeuristics.js} +1 -1
  379. package/lib/summary/summarizerHeuristics.js.map +1 -0
  380. package/lib/summary/summarizerNode/{index.d.mts → index.d.ts} +4 -4
  381. package/lib/summary/summarizerNode/index.d.ts.map +1 -0
  382. package/lib/summary/summarizerNode/index.js +7 -0
  383. package/lib/summary/summarizerNode/index.js.map +1 -0
  384. package/lib/summary/summarizerNode/{summarizerNode.d.mts → summarizerNode.d.ts} +18 -8
  385. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  386. package/lib/summary/summarizerNode/{summarizerNode.mjs → summarizerNode.js} +41 -53
  387. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
  388. package/lib/summary/summarizerNode/{summarizerNodeUtils.d.mts → summarizerNodeUtils.d.ts} +11 -20
  389. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  390. package/lib/summary/summarizerNode/{summarizerNodeUtils.mjs → summarizerNodeUtils.js} +1 -20
  391. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
  392. package/lib/summary/summarizerNode/{summarizerNodeWithGc.d.mts → summarizerNodeWithGc.d.ts} +6 -7
  393. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  394. package/lib/summary/summarizerNode/{summarizerNodeWithGc.mjs → summarizerNodeWithGc.js} +12 -12
  395. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
  396. package/lib/summary/{summarizerTypes.d.mts → summarizerTypes.d.ts} +11 -22
  397. package/lib/summary/summarizerTypes.d.ts.map +1 -0
  398. package/lib/summary/{summarizerTypes.mjs → summarizerTypes.js} +1 -1
  399. package/lib/summary/summarizerTypes.js.map +1 -0
  400. package/lib/summary/{summaryCollection.d.mts → summaryCollection.d.ts} +1 -1
  401. package/lib/summary/summaryCollection.d.ts.map +1 -0
  402. package/lib/summary/{summaryCollection.mjs → summaryCollection.js} +1 -1
  403. package/lib/summary/summaryCollection.js.map +1 -0
  404. package/lib/summary/{summaryFormat.d.mts → summaryFormat.d.ts} +16 -3
  405. package/lib/summary/summaryFormat.d.ts.map +1 -0
  406. package/lib/summary/{summaryFormat.mjs → summaryFormat.js} +1 -1
  407. package/lib/summary/summaryFormat.js.map +1 -0
  408. package/lib/summary/{summaryGenerator.d.mts → summaryGenerator.d.ts} +7 -6
  409. package/lib/summary/summaryGenerator.d.ts.map +1 -0
  410. package/lib/summary/{summaryGenerator.mjs → summaryGenerator.js} +11 -2
  411. package/lib/summary/summaryGenerator.js.map +1 -0
  412. package/lib/summary/{summaryManager.d.mts → summaryManager.d.ts} +6 -7
  413. package/lib/summary/summaryManager.d.ts.map +1 -0
  414. package/lib/summary/{summaryManager.mjs → summaryManager.js} +4 -5
  415. package/lib/summary/summaryManager.js.map +1 -0
  416. package/lib/test/batchTracker.spec.js +88 -0
  417. package/lib/test/batchTracker.spec.js.map +1 -0
  418. package/lib/test/blobManager.spec.js +835 -0
  419. package/lib/test/blobManager.spec.js.map +1 -0
  420. package/lib/test/channelCollection.spec.js +141 -0
  421. package/lib/test/channelCollection.spec.js.map +1 -0
  422. package/lib/test/containerRuntime.spec.js +1748 -0
  423. package/lib/test/containerRuntime.spec.js.map +1 -0
  424. package/lib/test/dataStoreContext.spec.js +801 -0
  425. package/lib/test/dataStoreContext.spec.js.map +1 -0
  426. package/lib/test/dataStoreCreation.spec.js +312 -0
  427. package/lib/test/dataStoreCreation.spec.js.map +1 -0
  428. package/lib/test/dataStoreRegistry.spec.js +26 -0
  429. package/lib/test/dataStoreRegistry.spec.js.map +1 -0
  430. package/lib/test/fuzz/fuzzUtils.js +66 -0
  431. package/lib/test/fuzz/fuzzUtils.js.map +1 -0
  432. package/lib/test/fuzz/summarizer.fuzz.spec.js +31 -0
  433. package/lib/test/fuzz/summarizer.fuzz.spec.js.map +1 -0
  434. package/lib/test/fuzz/summarizerFuzzMocks.js +162 -0
  435. package/lib/test/fuzz/summarizerFuzzMocks.js.map +1 -0
  436. package/lib/test/fuzz/summarizerFuzzSuite.js +106 -0
  437. package/lib/test/fuzz/summarizerFuzzSuite.js.map +1 -0
  438. package/lib/test/gc/garbageCollection.spec.js +1465 -0
  439. package/lib/test/gc/garbageCollection.spec.js.map +1 -0
  440. package/lib/test/gc/gcConfigs.spec.js +690 -0
  441. package/lib/test/gc/gcConfigs.spec.js.map +1 -0
  442. package/lib/test/gc/gcHelpers.spec.js +110 -0
  443. package/lib/test/gc/gcHelpers.spec.js.map +1 -0
  444. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +68 -0
  445. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +1 -0
  446. package/lib/test/gc/gcStats.spec.js +391 -0
  447. package/lib/test/gc/gcStats.spec.js.map +1 -0
  448. package/lib/test/gc/gcSummaryStateTracker.spec.js +228 -0
  449. package/lib/test/gc/gcSummaryStateTracker.spec.js.map +1 -0
  450. package/lib/test/gc/gcTelemetry.spec.js +530 -0
  451. package/lib/test/gc/gcTelemetry.spec.js.map +1 -0
  452. package/lib/test/gc/gcUnitTestHelpers.js +29 -0
  453. package/lib/test/gc/gcUnitTestHelpers.js.map +1 -0
  454. package/lib/test/gc/gcUnreferencedStateTracker.spec.js +192 -0
  455. package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +1 -0
  456. package/lib/test/getPendingBlobs.spec.js +193 -0
  457. package/lib/test/getPendingBlobs.spec.js.map +1 -0
  458. package/lib/test/hardwareStats.spec.js +93 -0
  459. package/lib/test/hardwareStats.spec.js.map +1 -0
  460. package/lib/test/index.js +6 -0
  461. package/lib/test/index.js.map +1 -0
  462. package/lib/test/opLifecycle/OpGroupingManager.spec.js +225 -0
  463. package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +1 -0
  464. package/lib/test/opLifecycle/batchManager.spec.js +189 -0
  465. package/lib/test/opLifecycle/batchManager.spec.js.map +1 -0
  466. package/lib/test/opLifecycle/opCompressor.spec.js +74 -0
  467. package/lib/test/opLifecycle/opCompressor.spec.js.map +1 -0
  468. package/lib/test/opLifecycle/opDecompressor.spec.js +218 -0
  469. package/lib/test/opLifecycle/opDecompressor.spec.js.map +1 -0
  470. package/lib/test/opLifecycle/opSplitter.spec.js +272 -0
  471. package/lib/test/opLifecycle/opSplitter.spec.js.map +1 -0
  472. package/lib/test/opLifecycle/outbox.spec.js +675 -0
  473. package/lib/test/opLifecycle/outbox.spec.js.map +1 -0
  474. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +196 -0
  475. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +1 -0
  476. package/lib/test/pendingStateManager.spec.js +329 -0
  477. package/lib/test/pendingStateManager.spec.js.map +1 -0
  478. package/lib/test/scheduleManager.spec.js +270 -0
  479. package/lib/test/scheduleManager.spec.js.map +1 -0
  480. package/lib/test/summarizerNode.spec.js +326 -0
  481. package/lib/test/summarizerNode.spec.js.map +1 -0
  482. package/lib/test/summarizerNodeWithGc.spec.js +318 -0
  483. package/lib/test/summarizerNodeWithGc.spec.js.map +1 -0
  484. package/lib/test/summary/orderedClientElection.spec.js +535 -0
  485. package/lib/test/summary/orderedClientElection.spec.js.map +1 -0
  486. package/lib/test/summary/runningSummarizer.spec.js +1349 -0
  487. package/lib/test/summary/runningSummarizer.spec.js.map +1 -0
  488. package/lib/test/summary/summarizer.spec.js +29 -0
  489. package/lib/test/summary/summarizer.spec.js.map +1 -0
  490. package/lib/test/summary/summarizerClientElection.spec.js +436 -0
  491. package/lib/test/summary/summarizerClientElection.spec.js.map +1 -0
  492. package/lib/test/summary/summarizerHeuristics.spec.js +289 -0
  493. package/lib/test/summary/summarizerHeuristics.spec.js.map +1 -0
  494. package/lib/test/summary/summaryCollection.spec.js +200 -0
  495. package/lib/test/summary/summaryCollection.spec.js.map +1 -0
  496. package/lib/test/summary/summaryManager.spec.js +430 -0
  497. package/lib/test/summary/summaryManager.spec.js.map +1 -0
  498. package/lib/test/summary/testQuorumClients.js +34 -0
  499. package/lib/test/summary/testQuorumClients.js.map +1 -0
  500. package/lib/test/throttler.spec.js +175 -0
  501. package/lib/test/throttler.spec.js.map +1 -0
  502. package/lib/test/types/validateContainerRuntimePrevious.generated.js +180 -0
  503. package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +1 -0
  504. package/lib/{throttler.d.mts → throttler.d.ts} +1 -1
  505. package/lib/throttler.d.ts.map +1 -0
  506. package/lib/{throttler.mjs → throttler.js} +1 -1
  507. package/lib/throttler.js.map +1 -0
  508. package/package.json +99 -88
  509. package/src/batchTracker.ts +1 -1
  510. package/src/blobManager.ts +1 -1
  511. package/src/{dataStores.ts → channelCollection.ts} +520 -84
  512. package/src/connectionTelemetry.ts +42 -3
  513. package/src/containerHandleContext.ts +1 -1
  514. package/src/containerRuntime.ts +661 -464
  515. package/src/dataStore.ts +13 -15
  516. package/src/dataStoreContext.ts +257 -184
  517. package/src/dataStoreContexts.ts +1 -1
  518. package/src/deltaManagerSummarizerProxy.ts +132 -7
  519. package/src/gc/garbageCollection.ts +121 -46
  520. package/src/gc/gcConfigs.ts +3 -3
  521. package/src/gc/gcDefinitions.ts +30 -7
  522. package/src/gc/gcHelpers.ts +2 -2
  523. package/src/gc/gcReferenceGraphAlgorithm.ts +1 -1
  524. package/src/gc/gcSummaryStateTracker.ts +19 -7
  525. package/src/gc/gcTelemetry.ts +10 -9
  526. package/src/gc/gcUnreferencedStateTracker.ts +12 -1
  527. package/src/gc/index.ts +10 -8
  528. package/src/index.ts +16 -27
  529. package/src/messageTypes.ts +4 -4
  530. package/src/opLifecycle/README.md +2 -4
  531. package/src/opLifecycle/batchManager.ts +2 -2
  532. package/src/opLifecycle/definitions.ts +2 -2
  533. package/src/opLifecycle/index.ts +8 -8
  534. package/src/opLifecycle/opCompressor.ts +3 -3
  535. package/src/opLifecycle/opDecompressor.ts +3 -3
  536. package/src/opLifecycle/opGroupingManager.ts +3 -12
  537. package/src/opLifecycle/opSplitter.ts +3 -3
  538. package/src/opLifecycle/outbox.ts +29 -9
  539. package/src/opLifecycle/remoteMessageProcessor.ts +4 -4
  540. package/src/packageVersion.ts +1 -1
  541. package/src/pendingStateManager.ts +19 -13
  542. package/src/scheduleManager.ts +4 -4
  543. package/src/summary/index.ts +13 -12
  544. package/src/summary/orderedClientElection.ts +1 -1
  545. package/src/summary/runWhileConnectedCoordinator.ts +1 -1
  546. package/src/summary/runningSummarizer.ts +141 -93
  547. package/src/summary/summarizer.ts +7 -7
  548. package/src/summary/summarizerClientElection.ts +2 -2
  549. package/src/summary/summarizerHeuristics.ts +3 -3
  550. package/src/summary/summarizerNode/index.ts +6 -3
  551. package/src/summary/summarizerNode/summarizerNode.ts +54 -69
  552. package/src/summary/summarizerNode/summarizerNodeUtils.ts +16 -34
  553. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +11 -17
  554. package/src/summary/summarizerTypes.ts +12 -24
  555. package/src/summary/summaryFormat.ts +16 -2
  556. package/src/summary/summaryGenerator.ts +16 -4
  557. package/src/summary/summaryManager.ts +6 -7
  558. package/tsconfig.cjs.json +7 -0
  559. package/tsconfig.json +2 -5
  560. package/dist/dataStores.d.ts +0 -149
  561. package/dist/dataStores.d.ts.map +0 -1
  562. package/dist/dataStores.js.map +0 -1
  563. package/dist/deltaManagerProxyBase.d.ts.map +0 -1
  564. package/dist/deltaManagerProxyBase.js +0 -77
  565. package/dist/deltaManagerProxyBase.js.map +0 -1
  566. package/lib/batchTracker.d.mts.map +0 -1
  567. package/lib/batchTracker.mjs.map +0 -1
  568. package/lib/blobManager.d.mts.map +0 -1
  569. package/lib/blobManager.mjs.map +0 -1
  570. package/lib/connectionTelemetry.d.mts.map +0 -1
  571. package/lib/connectionTelemetry.mjs.map +0 -1
  572. package/lib/containerHandleContext.d.mts.map +0 -1
  573. package/lib/containerHandleContext.mjs.map +0 -1
  574. package/lib/containerRuntime.d.mts.map +0 -1
  575. package/lib/containerRuntime.mjs.map +0 -1
  576. package/lib/dataStore.d.mts.map +0 -1
  577. package/lib/dataStore.mjs.map +0 -1
  578. package/lib/dataStoreContext.d.mts.map +0 -1
  579. package/lib/dataStoreContext.mjs.map +0 -1
  580. package/lib/dataStoreContexts.d.mts.map +0 -1
  581. package/lib/dataStoreContexts.mjs.map +0 -1
  582. package/lib/dataStoreRegistry.d.mts.map +0 -1
  583. package/lib/dataStoreRegistry.mjs.map +0 -1
  584. package/lib/dataStores.d.mts +0 -149
  585. package/lib/dataStores.d.mts.map +0 -1
  586. package/lib/dataStores.mjs.map +0 -1
  587. package/lib/deltaManagerProxyBase.d.mts +0 -35
  588. package/lib/deltaManagerProxyBase.d.mts.map +0 -1
  589. package/lib/deltaManagerProxyBase.mjs +0 -73
  590. package/lib/deltaManagerProxyBase.mjs.map +0 -1
  591. package/lib/deltaManagerSummarizerProxy.d.mts +0 -19
  592. package/lib/deltaManagerSummarizerProxy.d.mts.map +0 -1
  593. package/lib/deltaManagerSummarizerProxy.mjs +0 -38
  594. package/lib/deltaManagerSummarizerProxy.mjs.map +0 -1
  595. package/lib/deltaScheduler.d.mts.map +0 -1
  596. package/lib/deltaScheduler.mjs.map +0 -1
  597. package/lib/error.d.mts.map +0 -1
  598. package/lib/error.mjs.map +0 -1
  599. package/lib/gc/garbageCollection.d.mts.map +0 -1
  600. package/lib/gc/garbageCollection.mjs.map +0 -1
  601. package/lib/gc/gcConfigs.d.mts.map +0 -1
  602. package/lib/gc/gcConfigs.mjs.map +0 -1
  603. package/lib/gc/gcDefinitions.d.mts.map +0 -1
  604. package/lib/gc/gcDefinitions.mjs.map +0 -1
  605. package/lib/gc/gcHelpers.mjs.map +0 -1
  606. package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +0 -1
  607. package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +0 -1
  608. package/lib/gc/gcSummaryDefinitions.d.mts.map +0 -1
  609. package/lib/gc/gcSummaryDefinitions.mjs.map +0 -1
  610. package/lib/gc/gcSummaryStateTracker.d.mts.map +0 -1
  611. package/lib/gc/gcSummaryStateTracker.mjs.map +0 -1
  612. package/lib/gc/gcTelemetry.d.mts.map +0 -1
  613. package/lib/gc/gcTelemetry.mjs.map +0 -1
  614. package/lib/gc/gcUnreferencedStateTracker.d.mts.map +0 -1
  615. package/lib/gc/gcUnreferencedStateTracker.mjs.map +0 -1
  616. package/lib/gc/index.d.mts.map +0 -1
  617. package/lib/gc/index.mjs.map +0 -1
  618. package/lib/index.d.mts.map +0 -1
  619. package/lib/index.mjs +0 -24
  620. package/lib/index.mjs.map +0 -1
  621. package/lib/messageTypes.d.mts.map +0 -1
  622. package/lib/messageTypes.mjs.map +0 -1
  623. package/lib/metadata.d.mts.map +0 -1
  624. package/lib/metadata.mjs.map +0 -1
  625. package/lib/opLifecycle/batchManager.d.mts.map +0 -1
  626. package/lib/opLifecycle/batchManager.mjs.map +0 -1
  627. package/lib/opLifecycle/definitions.d.mts.map +0 -1
  628. package/lib/opLifecycle/definitions.mjs.map +0 -1
  629. package/lib/opLifecycle/index.d.mts +0 -13
  630. package/lib/opLifecycle/index.d.mts.map +0 -1
  631. package/lib/opLifecycle/index.mjs +0 -12
  632. package/lib/opLifecycle/index.mjs.map +0 -1
  633. package/lib/opLifecycle/opCompressor.d.mts.map +0 -1
  634. package/lib/opLifecycle/opCompressor.mjs.map +0 -1
  635. package/lib/opLifecycle/opDecompressor.d.mts.map +0 -1
  636. package/lib/opLifecycle/opDecompressor.mjs.map +0 -1
  637. package/lib/opLifecycle/opGroupingManager.d.mts.map +0 -1
  638. package/lib/opLifecycle/opGroupingManager.mjs.map +0 -1
  639. package/lib/opLifecycle/opSplitter.d.mts.map +0 -1
  640. package/lib/opLifecycle/opSplitter.mjs.map +0 -1
  641. package/lib/opLifecycle/outbox.d.mts.map +0 -1
  642. package/lib/opLifecycle/outbox.mjs.map +0 -1
  643. package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +0 -1
  644. package/lib/opLifecycle/remoteMessageProcessor.mjs.map +0 -1
  645. package/lib/opProperties.d.mts.map +0 -1
  646. package/lib/opProperties.mjs.map +0 -1
  647. package/lib/packageVersion.d.mts.map +0 -1
  648. package/lib/packageVersion.mjs.map +0 -1
  649. package/lib/pendingStateManager.d.mts.map +0 -1
  650. package/lib/pendingStateManager.mjs.map +0 -1
  651. package/lib/scheduleManager.d.mts.map +0 -1
  652. package/lib/scheduleManager.mjs.map +0 -1
  653. package/lib/storageServiceWithAttachBlobs.d.mts.map +0 -1
  654. package/lib/storageServiceWithAttachBlobs.mjs.map +0 -1
  655. package/lib/summary/index.d.mts.map +0 -1
  656. package/lib/summary/index.mjs.map +0 -1
  657. package/lib/summary/orderedClientElection.d.mts.map +0 -1
  658. package/lib/summary/orderedClientElection.mjs.map +0 -1
  659. package/lib/summary/runWhileConnectedCoordinator.d.mts.map +0 -1
  660. package/lib/summary/runWhileConnectedCoordinator.mjs.map +0 -1
  661. package/lib/summary/runningSummarizer.d.mts.map +0 -1
  662. package/lib/summary/runningSummarizer.mjs.map +0 -1
  663. package/lib/summary/summarizer.d.mts.map +0 -1
  664. package/lib/summary/summarizer.mjs.map +0 -1
  665. package/lib/summary/summarizerClientElection.d.mts.map +0 -1
  666. package/lib/summary/summarizerClientElection.mjs.map +0 -1
  667. package/lib/summary/summarizerHeuristics.d.mts.map +0 -1
  668. package/lib/summary/summarizerHeuristics.mjs.map +0 -1
  669. package/lib/summary/summarizerNode/index.d.mts.map +0 -1
  670. package/lib/summary/summarizerNode/index.mjs +0 -7
  671. package/lib/summary/summarizerNode/index.mjs.map +0 -1
  672. package/lib/summary/summarizerNode/summarizerNode.d.mts.map +0 -1
  673. package/lib/summary/summarizerNode/summarizerNode.mjs.map +0 -1
  674. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +0 -1
  675. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +0 -1
  676. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +0 -1
  677. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +0 -1
  678. package/lib/summary/summarizerTypes.d.mts.map +0 -1
  679. package/lib/summary/summarizerTypes.mjs.map +0 -1
  680. package/lib/summary/summaryCollection.d.mts.map +0 -1
  681. package/lib/summary/summaryCollection.mjs.map +0 -1
  682. package/lib/summary/summaryFormat.d.mts.map +0 -1
  683. package/lib/summary/summaryFormat.mjs.map +0 -1
  684. package/lib/summary/summaryGenerator.d.mts.map +0 -1
  685. package/lib/summary/summaryGenerator.mjs.map +0 -1
  686. package/lib/summary/summaryManager.d.mts.map +0 -1
  687. package/lib/summary/summaryManager.mjs.map +0 -1
  688. package/lib/throttler.d.mts.map +0 -1
  689. package/lib/throttler.mjs.map +0 -1
  690. package/src/deltaManagerProxyBase.ts +0 -111
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcConfigs.spec.js","sourceRoot":"","sources":["../../../src/test/gc/gcConfigs.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport { SinonFakeTimers, useFakeTimers } from \"sinon\";\nimport { ICriticalContainerError } from \"@fluidframework/container-definitions\";\nimport { IErrorBase } from \"@fluidframework/core-interfaces\";\nimport {\n\tIGarbageCollectionData,\n\tIGarbageCollectionDetailsBase,\n} from \"@fluidframework/runtime-definitions\";\nimport {\n\tMockLogger,\n\tMonitoringContext,\n\tmixinMonitoringContext,\n\tcreateChildLogger,\n} from \"@fluidframework/telemetry-utils\";\nimport { Timer } from \"@fluidframework/core-utils\";\nimport {\n\tGarbageCollector,\n\tGCNodeType,\n\tGCSummaryStateTracker,\n\tIGarbageCollectionRuntime,\n\tIGarbageCollectionState,\n\tIGarbageCollector,\n\tIGarbageCollectorConfigs,\n\tIGarbageCollectorCreateParams,\n\tIGCMetadata,\n\tIGCMetadata_Deprecated,\n\tIGCRuntimeOptions,\n\tdefaultSessionExpiryDurationMs,\n\toneDayMs,\n\trunGCKey,\n\trunSweepKey,\n\tdefaultInactiveTimeoutMs,\n\tdefaultSweepGracePeriodMs,\n\tgcTestModeKey,\n\tnextGCVersion,\n\tstableGCVersion,\n\tgcVersionUpgradeToV4Key,\n\tgcGenerationOptionName,\n\tthrowOnTombstoneLoadOverrideKey,\n\tgcDisableDataStoreSweepOptionName,\n\tgcDisableThrowOnTombstoneLoadOptionName,\n\tGCVersion,\n\trunSessionExpiryKey,\n\tdisableDatastoreSweepKey,\n} from \"../../gc/index.js\";\nimport { ContainerRuntimeGCMessage } from \"../../messageTypes.js\";\nimport { IContainerRuntimeMetadata } from \"../../summary/index.js\";\nimport { pkgVersion } from \"../../packageVersion.js\";\nimport { createTestConfigProvider } from \"./gcUnitTestHelpers.js\";\n\ntype GcWithPrivates = IGarbageCollector & {\n\treadonly configs: IGarbageCollectorConfigs;\n\treadonly summaryStateTracker: Omit<GCSummaryStateTracker, \"latestSummaryGCVersion\"> & {\n\t\tlatestSummaryGCVersion: GCVersion;\n\t};\n\treadonly sessionExpiryTimer: Omit<Timer, \"defaultTimeout\"> & { defaultTimeout: number };\n};\n\ndescribe(\"Garbage Collection configurations\", () => {\n\tconst testPkgPath = [\"testPkg\"];\n\tconst configProvider = createTestConfigProvider();\n\n\tlet mockLogger: MockLogger;\n\tlet mc: MonitoringContext<MockLogger>;\n\tlet clock: SinonFakeTimers;\n\t// The default GC data returned by `getGCData` on which GC is run. Update this to update the referenced graph.\n\tlet defaultGCData: IGarbageCollectionData = { gcNodes: {} };\n\n\tconst customSessionExpiryDurationMs = defaultSessionExpiryDurationMs + 1;\n\tconst testOverrideInactiveTimeoutKey = \"Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs\";\n\tconst testOverrideTombstoneTimeoutKey =\n\t\t\"Fluid.GarbageCollection.TestOverride.TombstoneTimeoutMs\";\n\tconst testOverrideSessionExpiryMsKey = \"Fluid.GarbageCollection.TestOverride.SessionExpiryMs\";\n\n\tlet gc: GcWithPrivates | undefined;\n\n\tconst createGcWithPrivateMembers = (\n\t\tgcMetadata?: IGCMetadata,\n\t\tgcOptions?: IGCRuntimeOptions,\n\t\tisSummarizerClient?: boolean,\n\t): GcWithPrivates => {\n\t\tconst metadata: IContainerRuntimeMetadata | undefined = gcMetadata && {\n\t\t\tsummaryFormatVersion: 1,\n\t\t\tmessage: undefined,\n\t\t\t...gcMetadata,\n\t\t};\n\t\treturn createGarbageCollector(\n\t\t\t{ metadata, gcOptions },\n\t\t\tundefined /* gcBlobsMap */,\n\t\t\tundefined /* closeFn */,\n\t\t\tisSummarizerClient,\n\t\t) as GcWithPrivates;\n\t};\n\n\tfunction createGarbageCollector(\n\t\tcreateParams: Partial<IGarbageCollectorCreateParams> = {},\n\t\tgcBlobsMap: Map<\n\t\t\tstring,\n\t\t\tIGarbageCollectionState | IGarbageCollectionDetailsBase | string[]\n\t\t> = new Map(),\n\t\tcloseFn: (error?: ICriticalContainerError) => void = () => {},\n\t\tisSummarizerClient: boolean = true,\n\t) {\n\t\tconst getNodeType = (nodePath: string) => {\n\t\t\tif (nodePath.split(\"/\").length !== 2) {\n\t\t\t\treturn GCNodeType.Other;\n\t\t\t}\n\t\t\treturn GCNodeType.DataStore;\n\t\t};\n\n\t\t// The runtime to be passed to the garbage collector.\n\t\tconst gcRuntime: IGarbageCollectionRuntime = {\n\t\t\tupdateStateBeforeGC: async () => {},\n\t\t\tgetGCData: async (fullGC?: boolean) => defaultGCData,\n\t\t\tupdateUsedRoutes: (usedRoutes: string[]) => {\n\t\t\t\treturn { totalNodeCount: 0, unusedNodeCount: 0 };\n\t\t\t},\n\t\t\tupdateUnusedRoutes: (unusedRoutes: string[]) => {},\n\t\t\tdeleteSweepReadyNodes: (sweepReadyRoutes: string[]): string[] => {\n\t\t\t\treturn [];\n\t\t\t},\n\t\t\tupdateTombstonedRoutes: (tombstoneRoutes: string[]) => {},\n\t\t\tgetNodeType,\n\t\t\tgetCurrentReferenceTimestampMs: () => Date.now(),\n\t\t\tcloseFn,\n\t\t};\n\n\t\treturn GarbageCollector.create({\n\t\t\t...createParams,\n\t\t\truntime: gcRuntime,\n\t\t\tgcOptions: createParams.gcOptions ?? {},\n\t\t\tbaseSnapshot: createParams.baseSnapshot,\n\t\t\tbaseLogger: createChildLogger({ logger: mc.logger }),\n\t\t\texisting: createParams.metadata !== undefined /* existing */,\n\t\t\tmetadata: createParams.metadata,\n\t\t\tcreateContainerMetadata: {\n\t\t\t\tcreateContainerRuntimeVersion: pkgVersion,\n\t\t\t\tcreateContainerTimestamp: Date.now(),\n\t\t\t},\n\t\t\tisSummarizerClient,\n\t\t\treadAndParseBlob: async <T>(id: string) => gcBlobsMap.get(id) as T,\n\t\t\tgetNodePackagePath: async (nodeId: string) => testPkgPath,\n\t\t\tgetLastSummaryTimestampMs: () => Date.now(),\n\t\t\tsubmitMessage: (message: ContainerRuntimeGCMessage) => {},\n\t\t});\n\t}\n\n\tbefore(() => {\n\t\tclock = useFakeTimers();\n\t});\n\n\tbeforeEach(() => {\n\t\tgc = undefined;\n\t\tmockLogger = new MockLogger();\n\t\t// To ensure inactive timeout is less than tombstone timeout.\n\t\tconfigProvider.set(testOverrideInactiveTimeoutKey, 1);\n\t\tmc = mixinMonitoringContext(mockLogger, configProvider);\n\t});\n\n\tafterEach(() => {\n\t\tclock.reset();\n\t\tconfigProvider.clear();\n\t\tdefaultGCData = { gcNodes: {} };\n\t\tgc?.dispose();\n\t});\n\n\tafter(() => {\n\t\tclock.restore();\n\t});\n\n\tdescribe(\"Existing container\", () => {\n\t\tit(\"No metadata\", () => {\n\t\t\tgc = createGcWithPrivateMembers({});\n\t\t\tassert(!gc.configs.gcEnabled, \"gcEnabled incorrect\");\n\t\t\tassert(!gc.configs.shouldRunGC, \"shouldRunGC incorrect\");\n\t\t\tassert(gc.configs.sweepEnabled, \"sweepEnabled incorrect\");\n\t\t\tassert.equal(gc.configs.shouldRunSweep, \"NO\", \"shouldRunSweep incorrect\");\n\t\t\tassert(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs === undefined,\n\t\t\t\t\"sessionExpiryTimeoutMs incorrect\",\n\t\t\t);\n\t\t\tassert(gc.configs.tombstoneTimeoutMs === undefined, \"tombstoneTimeoutMs incorrect\");\n\t\t\tassert.equal(\n\t\t\t\tgc.summaryStateTracker.latestSummaryGCVersion,\n\t\t\t\t0,\n\t\t\t\t\"latestSummaryGCVersion incorrect\",\n\t\t\t);\n\t\t});\n\t\tit(\"gcFeature 0\", () => {\n\t\t\tgc = createGcWithPrivateMembers({ gcFeature: 0 });\n\t\t\tassert(!gc.configs.gcEnabled, \"gcEnabled incorrect\");\n\t\t\tassert.equal(\n\t\t\t\tgc.summaryStateTracker.latestSummaryGCVersion,\n\t\t\t\t0,\n\t\t\t\t\"latestSummaryGCVersion incorrect\",\n\t\t\t);\n\t\t});\n\t\tit(\"gcFeature 0, Sweep enabled via gcGeneration\", () => {\n\t\t\tgc = createGcWithPrivateMembers(\n\t\t\t\t{ gcFeature: 0, gcFeatureMatrix: { gcGeneration: 0 } },\n\t\t\t\t{ [gcGenerationOptionName]: 0 },\n\t\t\t);\n\t\t\tassert(!gc.configs.gcEnabled, \"gcEnabled incorrect\");\n\t\t\tassert(gc.configs.sweepEnabled, \"sweepEnabled incorrect\");\n\t\t\tassert.equal(\n\t\t\t\tgc.summaryStateTracker.latestSummaryGCVersion,\n\t\t\t\t0,\n\t\t\t\t\"latestSummaryGCVersion incorrect\",\n\t\t\t);\n\t\t});\n\t\tit(\"gcFeature 1\", () => {\n\t\t\tgc = createGcWithPrivateMembers({ gcFeature: 1 });\n\t\t\tassert(gc.configs.gcEnabled, \"gcEnabled incorrect\");\n\t\t\tassert.equal(\n\t\t\t\tgc.summaryStateTracker.latestSummaryGCVersion,\n\t\t\t\t1,\n\t\t\t\t\"latestSummaryGCVersion incorrect\",\n\t\t\t);\n\t\t});\n\t\tit(\"sweepEnabled value ignored\", () => {\n\t\t\tgc = createGcWithPrivateMembers(\n\t\t\t\t{ sweepEnabled: true },\n\t\t\t\t{ [gcGenerationOptionName]: 1 }, // No persisted value, so sweep should not be allowed\n\t\t\t);\n\t\t\tassert(!gc.configs.sweepEnabled, \"sweepEnabled incorrect\");\n\t\t});\n\t\tit(\"sessionExpiryTimeoutMs set (tombstoneTimeoutMs unset)\", () => {\n\t\t\tgc = createGcWithPrivateMembers({\n\t\t\t\tsessionExpiryTimeoutMs: customSessionExpiryDurationMs,\n\t\t\t});\n\t\t\tassert.equal(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs,\n\t\t\t\tcustomSessionExpiryDurationMs,\n\t\t\t\t\"sessionExpiryTimeoutMs incorrect\",\n\t\t\t);\n\t\t\tassert.equal(\n\t\t\t\tgc.configs.tombstoneTimeoutMs,\n\t\t\t\tcustomSessionExpiryDurationMs + 6 * oneDayMs,\n\t\t\t\t\"tombstoneTimeoutMs incorrect\",\n\t\t\t);\n\t\t});\n\t\tit(\"tombstoneTimeoutMs set\", () => {\n\t\t\tgc = createGcWithPrivateMembers({ tombstoneTimeoutMs: 123 });\n\t\t\tassert.equal(gc.configs.tombstoneTimeoutMs, 123, \"tombstoneTimeoutMs incorrect\");\n\t\t});\n\t\tit(\"Metadata Roundtrip\", () => {\n\t\t\tconst inputMetadata: IGCMetadata = {\n\t\t\t\tsweepEnabled: true, // ignored\n\t\t\t\tgcFeature: 1,\n\t\t\t\tsessionExpiryTimeoutMs: customSessionExpiryDurationMs,\n\t\t\t\ttombstoneTimeoutMs: 123,\n\t\t\t\tgcFeatureMatrix: { gcGeneration: 1 },\n\t\t\t};\n\t\t\tgc = createGcWithPrivateMembers(inputMetadata, {\n\t\t\t\t[gcGenerationOptionName]: 2, // 2 should not replace already-persisted value of 1\n\t\t\t});\n\t\t\tconst outputMetadata = gc.getMetadata();\n\t\t\tconst expectedOutputMetadata: IGCMetadata = {\n\t\t\t\t...inputMetadata,\n\t\t\t\tsweepEnabled: false, // Hardcoded, not used\n\t\t\t\tgcFeature: stableGCVersion,\n\t\t\t};\n\t\t\tassert.deepEqual(\n\t\t\t\toutputMetadata,\n\t\t\t\texpectedOutputMetadata,\n\t\t\t\t\"getMetadata returned different metadata than loaded from\",\n\t\t\t);\n\t\t});\n\t\tit(\"Metadata Roundtrip - old file with tombstoneGeneration\", () => {\n\t\t\tconst inputMetadata: IGCMetadata = {\n\t\t\t\tsweepEnabled: true, // ignored\n\t\t\t\tgcFeature: 1,\n\t\t\t\tsessionExpiryTimeoutMs: customSessionExpiryDurationMs,\n\t\t\t\ttombstoneTimeoutMs: 123,\n\t\t\t\tgcFeatureMatrix: { tombstoneGeneration: 1 }, // legacy file before gcGeneration\n\t\t\t};\n\t\t\tgc = createGcWithPrivateMembers(inputMetadata, {\n\t\t\t\t[gcGenerationOptionName]: 2, // Will not be persisted - legacy file will only ever be stamped with tombstoneGeneration\n\t\t\t});\n\t\t\tconst outputMetadata = gc.getMetadata();\n\t\t\tconst expectedOutputMetadata: IGCMetadata = {\n\t\t\t\t...inputMetadata,\n\t\t\t\tsweepEnabled: false, // Hardcoded, not used\n\t\t\t\tgcFeature: stableGCVersion,\n\t\t\t};\n\t\t\tassert.deepEqual(\n\t\t\t\toutputMetadata,\n\t\t\t\texpectedOutputMetadata,\n\t\t\t\t\"getMetadata returned different metadata than loaded from\",\n\t\t\t);\n\t\t});\n\t\tit(\"Metadata Roundtrip transition to gcGeneration from tombstoneGeneration\", () => {\n\t\t\tconst inputMetadata: IGCMetadata = {\n\t\t\t\tsweepEnabled: true, // ignored\n\t\t\t\tgcFeature: 1,\n\t\t\t\tsessionExpiryTimeoutMs: customSessionExpiryDurationMs,\n\t\t\t\ttombstoneTimeoutMs: 123,\n\t\t\t\tgcFeatureMatrix: { gcGeneration: 1 },\n\t\t\t};\n\t\t\t// An app may write both Generation options to ease the transition. Only gcGeneration will be persisted\n\t\t\t// (and previous to the change introducing gcGeneration, only tombstoneGeneration would have been persisted).\n\t\t\tgc = createGcWithPrivateMembers(inputMetadata, {\n\t\t\t\t[gcGenerationOptionName]: 1,\n\t\t\t\tgcTombstoneGeneration: 1, // Legacy - will not be persisted but is ok to pass in\n\t\t\t});\n\t\t\tconst outputMetadata = gc.getMetadata();\n\t\t\tconst expectedOutputMetadata: IGCMetadata = {\n\t\t\t\t...inputMetadata,\n\t\t\t\tsweepEnabled: false, // Hardcoded, not used\n\t\t\t\tgcFeature: stableGCVersion,\n\t\t\t};\n\t\t\tassert.deepEqual(\n\t\t\t\toutputMetadata,\n\t\t\t\texpectedOutputMetadata,\n\t\t\t\t\"getMetadata returned different metadata than loaded from\",\n\t\t\t);\n\t\t});\n\t\tit(\"Metadata Roundtrip with GC version upgrade to v4 enabled\", () => {\n\t\t\tconfigProvider.set(gcVersionUpgradeToV4Key, true);\n\t\t\tconst inputMetadata: IGCMetadata = {\n\t\t\t\tsweepEnabled: true, // ignored\n\t\t\t\tgcFeature: 1,\n\t\t\t\tsessionExpiryTimeoutMs: customSessionExpiryDurationMs,\n\t\t\t\ttombstoneTimeoutMs: 123,\n\t\t\t\tgcFeatureMatrix: { gcGeneration: 1 },\n\t\t\t};\n\t\t\tgc = createGcWithPrivateMembers(inputMetadata);\n\t\t\tconst outputMetadata = gc.getMetadata();\n\t\t\tconst expectedOutputMetadata: IGCMetadata = {\n\t\t\t\t...inputMetadata,\n\t\t\t\tsweepEnabled: false, // Hardcoded, not used\n\t\t\t\tgcFeature: nextGCVersion,\n\t\t\t};\n\t\t\tassert.deepEqual(\n\t\t\t\toutputMetadata,\n\t\t\t\texpectedOutputMetadata,\n\t\t\t\t\"getMetadata returned different metadata than loaded from\",\n\t\t\t);\n\t\t});\n\t\tit(\"Metadata Roundtrip with GC version upgrade to v4 disabled\", () => {\n\t\t\tconfigProvider.set(gcVersionUpgradeToV4Key, false);\n\t\t\tconst inputMetadata: IGCMetadata = {\n\t\t\t\tsweepEnabled: true, // ignored\n\t\t\t\tgcFeature: 1,\n\t\t\t\tsessionExpiryTimeoutMs: customSessionExpiryDurationMs,\n\t\t\t\ttombstoneTimeoutMs: 123,\n\t\t\t\tgcFeatureMatrix: { gcGeneration: 1 },\n\t\t\t};\n\t\t\tgc = createGcWithPrivateMembers(inputMetadata);\n\t\t\tconst outputMetadata = gc.getMetadata();\n\t\t\tconst expectedOutputMetadata: IGCMetadata = {\n\t\t\t\t...inputMetadata,\n\t\t\t\tsweepEnabled: false, // Hardcoded, not used\n\t\t\t\tgcFeature: stableGCVersion,\n\t\t\t};\n\t\t\tassert.deepEqual(\n\t\t\t\toutputMetadata,\n\t\t\t\texpectedOutputMetadata,\n\t\t\t\t\"getMetadata returned different metadata than loaded from\",\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe(\"New Container\", () => {\n\t\tit(\"No options\", () => {\n\t\t\tgc = createGcWithPrivateMembers(undefined /* metadata */, {});\n\t\t\tassert(gc.configs.gcEnabled, \"gcEnabled incorrect\");\n\t\t\tassert(gc.configs.shouldRunGC, \"shouldRunGC incorrect\");\n\t\t\tassert(gc.configs.sweepEnabled, \"sweepEnabled incorrect\"); // Sweep is always allowed for a new container\n\t\t\tassert.equal(gc.configs.shouldRunSweep, \"NO\", \"shouldRunSweep incorrect\");\n\t\t\tassert(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs !== undefined,\n\t\t\t\t\"sessionExpiryTimeoutMs incorrect\",\n\t\t\t);\n\t\t\tassert(gc.configs.tombstoneTimeoutMs !== undefined, \"tombstoneTimeoutMs incorrect\");\n\t\t\tassert.equal(\n\t\t\t\tgc.summaryStateTracker.latestSummaryGCVersion,\n\t\t\t\tstableGCVersion,\n\t\t\t\t\"latestSummaryGCVersion incorrect\",\n\t\t\t);\n\t\t});\n\t\tit(\"gcAllowed true\", () => {\n\t\t\tgc = createGcWithPrivateMembers(undefined /* metadata */, { gcAllowed: true });\n\t\t\tassert(gc.configs.gcEnabled, \"gcEnabled incorrect\");\n\t\t});\n\t\tit(\"gcAllowed false\", () => {\n\t\t\tgc = createGcWithPrivateMembers(undefined /* metadata */, { gcAllowed: false });\n\t\t\tassert(!gc.configs.gcEnabled, \"gcEnabled incorrect\");\n\t\t});\n\t\tit(\"Sweep enabled via gcGeneration, gcAllowed true\", () => {\n\t\t\tgc = createGcWithPrivateMembers(undefined /* metadata */, {\n\t\t\t\tgcAllowed: true,\n\t\t\t\t[gcGenerationOptionName]: 1,\n\t\t\t});\n\t\t\tassert(gc.configs.gcEnabled, \"gcEnabled incorrect\");\n\t\t\tassert(gc.configs.sweepEnabled, \"sweepEnabled incorrect\");\n\t\t\tassert(gc.configs.tombstoneTimeoutMs !== undefined, \"tombstoneTimeoutMs incorrect\");\n\t\t\tassert(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs !== undefined,\n\t\t\t\t\"sessionExpiryTimeoutMs incorrect\",\n\t\t\t);\n\t\t});\n\t\tit(\"Sweep enabled via gcGeneration, gcAllowed true, sessionExpiry off\", () => {\n\t\t\tconfigProvider.set(runSessionExpiryKey, false);\n\t\t\tgc = createGcWithPrivateMembers(undefined /* metadata */, {\n\t\t\t\tgcAllowed: true,\n\t\t\t\t[gcGenerationOptionName]: 1,\n\t\t\t});\n\t\t\tassert(gc.configs.gcEnabled, \"gcEnabled incorrect\");\n\t\t\tassert(gc.configs.sweepEnabled, \"sweepEnabled incorrect\");\n\t\t\tassert(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs === undefined,\n\t\t\t\t\"sessionExpiryTimeoutMs incorrect\",\n\t\t\t);\n\t\t\tassert(gc.configs.tombstoneTimeoutMs === undefined, \"tombstoneTimeoutMs incorrect\");\n\t\t});\n\t\tit(\"TestOverride.TombstoneTimeoutMs set, sessionExpiry on\", () => {\n\t\t\tconfigProvider.set(testOverrideTombstoneTimeoutKey, 123);\n\t\t\tgc = createGcWithPrivateMembers(undefined /* metadata */, {});\n\t\t\tassert(gc.configs.sweepEnabled, \"sweepEnabled incorrect\");\n\t\t\tassert(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs === defaultSessionExpiryDurationMs,\n\t\t\t\t\"sessionExpiryTimeoutMs incorrect\",\n\t\t\t);\n\t\t\tassert(gc.configs.tombstoneTimeoutMs === 123, \"tombstoneTimeoutMs incorrect\");\n\t\t});\n\t\tit(\"TestOverride.TombstoneTimeoutMs set, sessionExpiry off\", () => {\n\t\t\tconfigProvider.set(testOverrideTombstoneTimeoutKey, 123);\n\t\t\tconfigProvider.set(runSessionExpiryKey, false);\n\t\t\tgc = createGcWithPrivateMembers(undefined /* metadata */, {});\n\t\t\tassert(gc.configs.sweepEnabled, \"sweepEnabled incorrect\");\n\t\t\tassert(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs === undefined,\n\t\t\t\t\"sessionExpiryTimeoutMs incorrect\",\n\t\t\t);\n\t\t\tassert(gc.configs.tombstoneTimeoutMs === 123, \"tombstoneTimeoutMs incorrect\");\n\t\t});\n\t\tit(\"Metadata Roundtrip\", () => {\n\t\t\tconst expectedMetadata: IGCMetadata = {\n\t\t\t\tsweepEnabled: false, // hardcoded, not used\n\t\t\t\tgcFeature: stableGCVersion,\n\t\t\t\tsessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,\n\t\t\t\ttombstoneTimeoutMs: defaultSessionExpiryDurationMs + 6 * oneDayMs,\n\t\t\t\tgcFeatureMatrix: { gcGeneration: 2 },\n\t\t\t};\n\t\t\tgc = createGcWithPrivateMembers(undefined /* metadata */, {\n\t\t\t\t[gcGenerationOptionName]: 2,\n\t\t\t});\n\t\t\tconst outputMetadata = gc.getMetadata();\n\t\t\tassert.deepEqual(\n\t\t\t\toutputMetadata,\n\t\t\t\texpectedMetadata,\n\t\t\t\t\"getMetadata returned different metadata than expected\",\n\t\t\t);\n\t\t});\n\t\tit(\"Metadata Roundtrip with GC version upgrade to v4 enabled\", () => {\n\t\t\tconfigProvider.set(gcVersionUpgradeToV4Key, true);\n\t\t\tconst expectedMetadata: IGCMetadata = {\n\t\t\t\tsweepEnabled: false, // hardcoded, not used\n\t\t\t\tgcFeature: nextGCVersion,\n\t\t\t\tsessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,\n\t\t\t\ttombstoneTimeoutMs: defaultSessionExpiryDurationMs + 6 * oneDayMs,\n\t\t\t\tgcFeatureMatrix: undefined,\n\t\t\t};\n\t\t\tgc = createGcWithPrivateMembers(undefined /* metadata */, {});\n\t\t\tconst outputMetadata = gc.getMetadata();\n\t\t\tassert.deepEqual(\n\t\t\t\toutputMetadata,\n\t\t\t\texpectedMetadata,\n\t\t\t\t\"getMetadata returned different metadata than expected\",\n\t\t\t);\n\t\t});\n\t\tit(\"Metadata Roundtrip transition to gcGeneration from tombstoneGeneration\", () => {\n\t\t\tconst expectedMetadata: IGCMetadata = {\n\t\t\t\tsweepEnabled: false, // hardcoded, not used\n\t\t\t\tgcFeature: stableGCVersion,\n\t\t\t\tsessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,\n\t\t\t\ttombstoneTimeoutMs: defaultSessionExpiryDurationMs + 6 * oneDayMs,\n\t\t\t\tgcFeatureMatrix: {\n\t\t\t\t\tgcGeneration: 2,\n\t\t\t\t\t// tombstoneGeneration will not be persisted\n\t\t\t\t},\n\t\t\t};\n\t\t\t// An app may write both Generation options to ease the transition. Only gcGeneration will be persisted\n\t\t\t// (and previous to the change introducing gcGeneration, only tombstoneGeneration would have been persisted).\n\t\t\tgc = createGcWithPrivateMembers(undefined /* metadata */, {\n\t\t\t\t[gcGenerationOptionName]: 2,\n\t\t\t\tgcTombstoneGeneration: 2, // Legacy - will not be persisted but is ok to pass in\n\t\t\t});\n\t\t\tconst outputMetadata = gc.getMetadata();\n\t\t\tassert.deepEqual(\n\t\t\t\toutputMetadata,\n\t\t\t\texpectedMetadata,\n\t\t\t\t\"getMetadata returned different metadata than expected\",\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe(\"Session Expiry and Tombstone Timeout\", () => {\n\t\tbeforeEach(() => {\n\t\t\tconfigProvider.set(\"Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs\", 1); // To ensure it's less than tombstone timeout\n\t\t});\n\n\t\t// Config sources for Session Expiry:\n\t\t// 1. defaultSessionExpiryDurationMs in code\n\t\t// 2. IGCRuntimeOptions.sessionExpiryTimeoutMs\n\t\t// 3. IGCMetadata.sessionExpiryTimeoutMs\n\t\t// 4. \"Fluid.GarbageCollection.TestOverride.SessionExpiryMs\" setting\n\t\t// Config sources for Tombstone Timeout:\n\t\t// 1. IGCMetadata.tombstoneTimeoutMs\n\t\t// 2. IGCMetadata_Deprecated.sweepTimeoutMs (backfill from before two-stage sweep)\n\t\t// 3. Computed from Session Expiry, fixed upper bound for Snapshot Expiry and a fixed buffer (on create, or to backfill existing)\n\t\t// 4. \"Fluid.GarbageCollection.TestOverride.TombstoneTimeoutMs\" setting (only applicable on create)\n\n\t\tit(\"defaultSessionExpiryDurationMs\", () => {\n\t\t\tgc = createGcWithPrivateMembers();\n\t\t\tassert.equal(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs,\n\t\t\t\tdefaultSessionExpiryDurationMs,\n\t\t\t\t\"sessionExpiryTimeoutMs incorrect\",\n\t\t\t);\n\t\t\tassert.equal(\n\t\t\t\tgc.sessionExpiryTimer.defaultTimeout,\n\t\t\t\tdefaultSessionExpiryDurationMs,\n\t\t\t\t\"sessionExpiryTimer incorrect\",\n\t\t\t);\n\t\t\tassert.equal(\n\t\t\t\tgc.configs.tombstoneTimeoutMs,\n\t\t\t\tdefaultSessionExpiryDurationMs + 6 * oneDayMs,\n\t\t\t\t\"tombstoneTimeoutMs incorrect\",\n\t\t\t);\n\t\t});\n\t\tit(\"defaultSessionExpiryDurationMs, TestOverride.TombstoneTimeoutMs set\", () => {\n\t\t\tconfigProvider.set(testOverrideTombstoneTimeoutKey, 7890);\n\t\t\tgc = createGcWithPrivateMembers();\n\t\t\tassert.equal(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs,\n\t\t\t\tdefaultSessionExpiryDurationMs,\n\t\t\t\t\"sessionExpiryTimeoutMs incorrect\",\n\t\t\t);\n\t\t\tassert.equal(\n\t\t\t\tgc.sessionExpiryTimer.defaultTimeout,\n\t\t\t\tdefaultSessionExpiryDurationMs,\n\t\t\t\t\"sessionExpiryTimer incorrect\",\n\t\t\t);\n\t\t\tassert.equal(gc.configs.tombstoneTimeoutMs, 7890, \"tombstoneTimeoutMs incorrect\");\n\t\t});\n\t\tit(\"gcAllowed off, session expiry off\", () => {\n\t\t\tgc = gc = createGcWithPrivateMembers(undefined /* metadata */, {\n\t\t\t\tgcAllowed: false,\n\t\t\t});\n\t\t\tassert.equal(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs,\n\t\t\t\tundefined,\n\t\t\t\t\"sessionExpiryTimeoutMs incorrect\",\n\t\t\t);\n\t\t\tassert.equal(gc.sessionExpiryTimer, undefined, \"sessionExpiryTimer incorrect\");\n\t\t\tassert.equal(gc.configs.tombstoneTimeoutMs, undefined, \"tombstoneTimeoutMs incorrect\");\n\t\t});\n\t\tit(\"IGCRuntimeOptions.sessionExpiryTimeoutMs\", () => {\n\t\t\tgc = createGcWithPrivateMembers(undefined /* metadata */, {\n\t\t\t\tsessionExpiryTimeoutMs: 123,\n\t\t\t});\n\t\t\tassert.equal(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs,\n\t\t\t\t123,\n\t\t\t\t\"sessionExpiryTimeoutMs incorrect\",\n\t\t\t);\n\t\t\tassert.equal(gc.sessionExpiryTimer.defaultTimeout, 123, \"sessionExpiryTimer incorrect\");\n\t\t\tassert.equal(\n\t\t\t\tgc.configs.tombstoneTimeoutMs,\n\t\t\t\t123 + 6 * oneDayMs,\n\t\t\t\t\"tombstoneTimeoutMs incorrect\",\n\t\t\t);\n\t\t});\n\t\tit(\"IGCMetadata.sessionExpiryTimeoutMs, backfill tombstoneTimeoutMs\", () => {\n\t\t\tconfigProvider.set(testOverrideTombstoneTimeoutKey, 1337); // Should be ignored\n\t\t\tgc = createGcWithPrivateMembers({ sessionExpiryTimeoutMs: 456 } /* metadata */);\n\t\t\tassert.equal(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs,\n\t\t\t\t456,\n\t\t\t\t\"sessionExpiryTimeoutMs incorrect\",\n\t\t\t);\n\t\t\tassert.equal(gc.sessionExpiryTimer.defaultTimeout, 456, \"sessionExpiryTimer incorrect\");\n\t\t\tassert.equal(\n\t\t\t\tgc.configs.tombstoneTimeoutMs,\n\t\t\t\t456 + 6 * oneDayMs,\n\t\t\t\t\"tombstoneTimeoutMs incorrect\",\n\t\t\t);\n\t\t});\n\t\tit(\"IGCMetadata.sessionExpiryTimeoutMs and IGCMetadata.tombstoneTimeoutMs\", () => {\n\t\t\tconfigProvider.set(testOverrideTombstoneTimeoutKey, 1337); // Should be ignored\n\t\t\tgc = createGcWithPrivateMembers(\n\t\t\t\t{ sessionExpiryTimeoutMs: 456, tombstoneTimeoutMs: 789 } /* metadata */,\n\t\t\t);\n\t\t\tassert.equal(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs,\n\t\t\t\t456,\n\t\t\t\t\"sessionExpiryTimeoutMs incorrect\",\n\t\t\t);\n\t\t\tassert.equal(gc.sessionExpiryTimer.defaultTimeout, 456, \"sessionExpiryTimer incorrect\");\n\t\t\tassert.equal(gc.configs.tombstoneTimeoutMs, 789, \"tombstoneTimeoutMs incorrect\");\n\t\t});\n\t\tit(\"IGCMetadata.tombstoneTimeoutMs only\", () => {\n\t\t\tconfigProvider.set(testOverrideTombstoneTimeoutKey, 1337); // Should be ignored\n\t\t\t// This could happen if you used TestOverride.TombstoneTimeoutMs but had SessionExpiry disabled, then loaded that container.\n\t\t\tgc = createGcWithPrivateMembers({ tombstoneTimeoutMs: 789 } /* metadata */);\n\t\t\tassert.equal(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs,\n\t\t\t\tundefined,\n\t\t\t\t\"sessionExpiryTimeoutMs incorrect\",\n\t\t\t);\n\t\t\tassert.equal(gc.sessionExpiryTimer, undefined, \"sessionExpiryTimer incorrect\");\n\t\t\tassert.equal(gc.configs.tombstoneTimeoutMs, 789, \"tombstoneTimeoutMs incorrect\");\n\t\t});\n\t\tit(\"IGCMetadata.tombstoneTimeoutMs - backfill from sweepTimeoutMs\", () => {\n\t\t\tconfigProvider.set(testOverrideTombstoneTimeoutKey, 1337); // Should be ignored\n\t\t\tconst metadata: IGCMetadata & IGCMetadata_Deprecated = {\n\t\t\t\tsweepTimeoutMs: 789, // Snapshot was generated by code built before the rename\n\t\t\t};\n\t\t\tgc = createGcWithPrivateMembers(metadata);\n\t\t\tassert.equal(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs,\n\t\t\t\tundefined,\n\t\t\t\t\"sessionExpiryTimeoutMs incorrect\",\n\t\t\t);\n\t\t\tassert.equal(gc.sessionExpiryTimer, undefined, \"sessionExpiryTimer incorrect\");\n\t\t\tassert.equal(gc.configs.tombstoneTimeoutMs, 789, \"tombstoneTimeoutMs incorrect\");\n\t\t});\n\t\tit(\"RunSessionExpiry setting turned off\", () => {\n\t\t\tconfigProvider.set(runSessionExpiryKey, false);\n\t\t\tconfigProvider.set(testOverrideSessionExpiryMsKey, 123); // This override should be ignored\n\t\t\tgc = createGcWithPrivateMembers();\n\t\t\tassert.equal(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs,\n\t\t\t\tundefined,\n\t\t\t\t\"sessionExpiryTimeoutMs should be undefined if runSessionExpiryKey setting is false\",\n\t\t\t);\n\t\t\tassert.equal(\n\t\t\t\tgc.sessionExpiryTimer,\n\t\t\t\tundefined,\n\t\t\t\t\"sessionExpiryTimer should be undefined if it's disabled\",\n\t\t\t);\n\t\t\tassert.equal(gc.configs.tombstoneTimeoutMs, undefined, \"tombstoneTimeoutMs incorrect\");\n\t\t});\n\t\tit(\"RunSessionExpiry setting turned off, TestOverride.TombstoneTimeoutMs set\", () => {\n\t\t\tconfigProvider.set(runSessionExpiryKey, false);\n\t\t\tconfigProvider.set(testOverrideTombstoneTimeoutKey, 7890);\n\t\t\tconfigProvider.set(testOverrideSessionExpiryMsKey, 123); // This override should be ignored\n\t\t\tgc = createGcWithPrivateMembers();\n\t\t\tassert.equal(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs,\n\t\t\t\tundefined,\n\t\t\t\t\"sessionExpiryTimeoutMs should be undefined if runSessionExpiryKey setting is false\",\n\t\t\t);\n\t\t\tassert.equal(\n\t\t\t\tgc.sessionExpiryTimer,\n\t\t\t\tundefined,\n\t\t\t\t\"sessionExpiryTimer should be undefined if it's disabled\",\n\t\t\t);\n\t\t\tassert.equal(gc.configs.tombstoneTimeoutMs, 7890, \"tombstoneTimeoutMs incorrect\");\n\t\t});\n\n\t\tfunction testSessionExpiryMsOverride() {\n\t\t\tconst expectedTombstoneTimeoutMs = defaultSessionExpiryDurationMs + 6 * oneDayMs;\n\t\t\tassert(!!gc, \"PRECONDITION: gc must be set before calling this helper\");\n\t\t\tassert.equal(\n\t\t\t\tgc.configs.sessionExpiryTimeoutMs,\n\t\t\t\tdefaultSessionExpiryDurationMs,\n\t\t\t\t\"sessionExpiryTimeoutMs incorrect\",\n\t\t\t);\n\t\t\tassert.equal(\n\t\t\t\tgc.sessionExpiryTimer.defaultTimeout,\n\t\t\t\t789,\n\t\t\t\t\"sessionExpiry used for timer should be the override value\",\n\t\t\t);\n\t\t\tassert.equal(\n\t\t\t\tgc.configs.tombstoneTimeoutMs,\n\t\t\t\texpectedTombstoneTimeoutMs,\n\t\t\t\t\"tombstoneTimeoutMs incorrect\",\n\t\t\t);\n\n\t\t\tconst expectedMetadata: IGCMetadata = {\n\t\t\t\tsweepEnabled: false,\n\t\t\t\tgcFeature: stableGCVersion,\n\t\t\t\tsessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,\n\t\t\t\ttombstoneTimeoutMs: expectedTombstoneTimeoutMs,\n\t\t\t\tgcFeatureMatrix: undefined,\n\t\t\t};\n\t\t\tconst outputMetadata = gc.getMetadata();\n\t\t\tassert.deepEqual(\n\t\t\t\toutputMetadata,\n\t\t\t\texpectedMetadata,\n\t\t\t\t\"getMetadata returned different metadata than expected\",\n\t\t\t);\n\t\t}\n\t\tit(\"TestOverride.SessionExpiryMs setting applied to timeout but not written to file - New Container\", () => {\n\t\t\tconfigProvider.set(testOverrideSessionExpiryMsKey, 789);\n\t\t\tgc = createGcWithPrivateMembers();\n\t\t\ttestSessionExpiryMsOverride();\n\t\t});\n\t\tit(\"TestOverride.SessionExpiryMs setting applied to timeout but not written to file - Existing Container\", () => {\n\t\t\tconfigProvider.set(testOverrideSessionExpiryMsKey, 789);\n\t\t\tgc = createGcWithPrivateMembers(\n\t\t\t\t{\n\t\t\t\t\tsessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,\n\t\t\t\t\tgcFeature: 1,\n\t\t\t\t} /* metadata */,\n\t\t\t);\n\t\t\ttestSessionExpiryMsOverride();\n\t\t});\n\t});\n\n\tdescribe(\"Session Behavior (e.g. 'shouldRun' fields)\", () => {\n\t\tbeforeEach(() => {\n\t\t\tconfigProvider.set(\"Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs\", 1); // To ensure it's less than tombstone timeout\n\t\t});\n\n\t\tdescribe(\"shouldRunGC\", () => {\n\t\t\tconst testCases: {\n\t\t\t\tgcEnabled: boolean;\n\t\t\t\tdisableGC?: boolean;\n\t\t\t\trunGC?: boolean;\n\t\t\t\texpectedResult: boolean;\n\t\t\t}[] = [\n\t\t\t\t{ gcEnabled: false, disableGC: true, runGC: true, expectedResult: true },\n\t\t\t\t{ gcEnabled: true, disableGC: false, runGC: false, expectedResult: false },\n\t\t\t\t{ gcEnabled: true, disableGC: true, expectedResult: false },\n\t\t\t\t{ gcEnabled: true, disableGC: false, expectedResult: true },\n\t\t\t\t{ gcEnabled: true, expectedResult: true },\n\t\t\t\t{ gcEnabled: false, expectedResult: false },\n\t\t\t];\n\t\t\ttestCases.forEach((testCase) => {\n\t\t\t\tit(`Test Case ${JSON.stringify(testCase)}`, () => {\n\t\t\t\t\tconfigProvider.set(runGCKey, testCase.runGC);\n\t\t\t\t\tgc = createGcWithPrivateMembers(undefined /* metadata */, {\n\t\t\t\t\t\tgcAllowed: testCase.gcEnabled,\n\t\t\t\t\t\tdisableGC: testCase.disableGC,\n\t\t\t\t\t});\n\t\t\t\t\tassert.equal(\n\t\t\t\t\t\tgc.configs.gcEnabled,\n\t\t\t\t\t\ttestCase.gcEnabled,\n\t\t\t\t\t\t\"PRECONDITION: gcEnabled set incorrectly\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.equal(\n\t\t\t\t\t\tgc.configs.shouldRunGC,\n\t\t\t\t\t\ttestCase.expectedResult,\n\t\t\t\t\t\t\"shouldRunGC not set as expected\",\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tit(\"shouldRunGC should be true when gcVersionInEffect is newer than gcVersionInBaseSnapshot\", () => {\n\t\t\t\tconst gcVersionInBaseSnapshot = stableGCVersion - 1;\n\t\t\t\tgc = createGcWithPrivateMembers({ gcFeature: gcVersionInBaseSnapshot });\n\t\t\t\tassert.equal(gc.configs.gcEnabled, true, \"PRECONDITION: gcEnabled set incorrectly\");\n\t\t\t\tassert.equal(gc.configs.shouldRunGC, true, \"shouldRunGC should be true\");\n\t\t\t\tassert.equal(\n\t\t\t\t\tgc.configs.gcVersionInBaseSnapshot,\n\t\t\t\t\tgcVersionInBaseSnapshot,\n\t\t\t\t\t\"gcVersionInBaseSnapshot set incorrectly\",\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"shouldRunGC should be false when gcVersionInEffect is older than gcVersionInBaseSnapshot\", () => {\n\t\t\t\tconst gcVersionInBaseSnapshot = nextGCVersion + 1;\n\t\t\t\tgc = createGcWithPrivateMembers({ gcFeature: gcVersionInBaseSnapshot });\n\t\t\t\tassert.equal(gc.configs.gcEnabled, true, \"PRECONDITION: gcEnabled set incorrectly\");\n\t\t\t\tassert.equal(gc.configs.shouldRunGC, false, \"shouldRunGC should be false\");\n\t\t\t\tassert.equal(\n\t\t\t\t\tgc.configs.gcVersionInBaseSnapshot,\n\t\t\t\t\tgcVersionInBaseSnapshot,\n\t\t\t\t\t\"gcVersionInBaseSnapshot set incorrectly\",\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t\tdescribe(\"shouldRunSweep\", () => {\n\t\t\tconst testCases: {\n\t\t\t\tshouldRunGC: boolean;\n\t\t\t\tsweepEnabled_doc: boolean;\n\t\t\t\tsweepEnabled_session: boolean;\n\t\t\t\tdisableDataStoreSweep?: \"viaGCOption\" | \"viaConfigProvider\";\n\t\t\t\tshouldRunSweep?: boolean;\n\t\t\t\texpectedShouldRunSweep: IGarbageCollectorConfigs[\"shouldRunSweep\"];\n\t\t\t}[] = [\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: false, // Veto\n\t\t\t\t\tsweepEnabled_doc: true,\n\t\t\t\t\tsweepEnabled_session: true,\n\t\t\t\t\tdisableDataStoreSweep: \"viaGCOption\",\n\t\t\t\t\tshouldRunSweep: true,\n\t\t\t\t\texpectedShouldRunSweep: \"NO\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\tsweepEnabled_doc: false, // Veto\n\t\t\t\t\tsweepEnabled_session: true,\n\t\t\t\t\tdisableDataStoreSweep: \"viaGCOption\",\n\t\t\t\t\texpectedShouldRunSweep: \"NO\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\tsweepEnabled_doc: true,\n\t\t\t\t\tsweepEnabled_session: false, // Veto\n\t\t\t\t\tdisableDataStoreSweep: \"viaGCOption\",\n\t\t\t\t\texpectedShouldRunSweep: \"NO\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\tsweepEnabled_doc: true,\n\t\t\t\t\tsweepEnabled_session: true,\n\t\t\t\t\tshouldRunSweep: false, // Veto\n\t\t\t\t\tdisableDataStoreSweep: \"viaGCOption\",\n\t\t\t\t\texpectedShouldRunSweep: \"NO\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\tsweepEnabled_doc: true,\n\t\t\t\t\tsweepEnabled_session: false, // Overriden by shouldRunSweep\n\t\t\t\t\tshouldRunSweep: true,\n\t\t\t\t\texpectedShouldRunSweep: \"YES\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\tsweepEnabled_doc: true,\n\t\t\t\t\tsweepEnabled_session: true,\n\t\t\t\t\texpectedShouldRunSweep: \"YES\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\tsweepEnabled_doc: true,\n\t\t\t\t\tsweepEnabled_session: true,\n\t\t\t\t\tdisableDataStoreSweep: \"viaGCOption\",\n\t\t\t\t\texpectedShouldRunSweep: \"ONLY_BLOBS\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\tsweepEnabled_doc: true,\n\t\t\t\t\tsweepEnabled_session: true,\n\t\t\t\t\tdisableDataStoreSweep: \"viaConfigProvider\",\n\t\t\t\t\texpectedShouldRunSweep: \"ONLY_BLOBS\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\tsweepEnabled_doc: true,\n\t\t\t\t\tsweepEnabled_session: true,\n\t\t\t\t\tshouldRunSweep: true,\n\t\t\t\t\tdisableDataStoreSweep: \"viaGCOption\", // Applies after shouldRunSweep\n\t\t\t\t\texpectedShouldRunSweep: \"ONLY_BLOBS\",\n\t\t\t\t},\n\t\t\t];\n\t\t\ttestCases.forEach((testCase, index) => {\n\t\t\t\tit(`Test Case ${JSON.stringify(testCase)}`, () => {\n\t\t\t\t\tconfigProvider.set(runGCKey, testCase.shouldRunGC);\n\t\t\t\t\tconfigProvider.set(runSweepKey, testCase.shouldRunSweep);\n\t\t\t\t\tconfigProvider.set(\n\t\t\t\t\t\tdisableDatastoreSweepKey,\n\t\t\t\t\t\ttestCase.disableDataStoreSweep === \"viaConfigProvider\",\n\t\t\t\t\t);\n\t\t\t\t\tgc = createGcWithPrivateMembers(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgcFeatureMatrix: { gcGeneration: 1 },\n\t\t\t\t\t\t\tsessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,\n\t\t\t\t\t\t} /* metadata */,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t[gcDisableDataStoreSweepOptionName]:\n\t\t\t\t\t\t\t\ttestCase.disableDataStoreSweep === \"viaGCOption\",\n\t\t\t\t\t\t\tenableGCSweep: testCase.sweepEnabled_session ? true : undefined,\n\t\t\t\t\t\t\t[gcGenerationOptionName]: testCase.sweepEnabled_doc ? 1 : 2,\n\t\t\t\t\t\t} /* gcOptions */,\n\t\t\t\t\t);\n\t\t\t\t\tassert.equal(\n\t\t\t\t\t\tgc.configs.shouldRunGC,\n\t\t\t\t\t\ttestCase.shouldRunGC,\n\t\t\t\t\t\t\"PRECONDITION: shouldRunGC set incorrectly\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.equal(\n\t\t\t\t\t\tgc.configs.sweepEnabled,\n\t\t\t\t\t\ttestCase.sweepEnabled_doc,\n\t\t\t\t\t\t\"PRECONDITION: sweepEnabled set incorrectly\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.equal(\n\t\t\t\t\t\tgc.configs.shouldRunSweep,\n\t\t\t\t\t\ttestCase.expectedShouldRunSweep,\n\t\t\t\t\t\t`shouldRunSweep not set as expected`,\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t\tdescribe(\"inactiveTimeoutMs\", () => {\n\t\t\tbeforeEach(() => {\n\t\t\t\t// Remove setting added in outer describe block\n\t\t\t\tconfigProvider.set(\n\t\t\t\t\t\"Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs\",\n\t\t\t\t\tundefined,\n\t\t\t\t);\n\t\t\t});\n\t\t\tconst testCases: {\n\t\t\t\ttestOverride?: number;\n\t\t\t\toption?: number;\n\t\t\t\texpectedResult: number;\n\t\t\t}[] = [\n\t\t\t\t{ testOverride: 123, option: 456, expectedResult: 123 },\n\t\t\t\t{ option: 456, expectedResult: 456 },\n\t\t\t\t{ expectedResult: defaultInactiveTimeoutMs },\n\t\t\t];\n\t\t\ttestCases.forEach((testCase) => {\n\t\t\t\tit(`Test Case ${JSON.stringify(testCase)}`, () => {\n\t\t\t\t\tconfigProvider.set(\n\t\t\t\t\t\t\"Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs\",\n\t\t\t\t\t\ttestCase.testOverride,\n\t\t\t\t\t);\n\t\t\t\t\tgc = createGcWithPrivateMembers(undefined /* metadata */, {\n\t\t\t\t\t\tinactiveTimeoutMs: testCase.option,\n\t\t\t\t\t});\n\t\t\t\t\tassert.equal(\n\t\t\t\t\t\tgc.configs.inactiveTimeoutMs,\n\t\t\t\t\t\ttestCase.expectedResult,\n\t\t\t\t\t\t\"inactiveTimeoutMs not set as expected\",\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\t\t\tit(\"inactiveTimeout must not be greater than tombstoneTimeout\", () => {\n\t\t\t\tconfigProvider.set(\n\t\t\t\t\t\"Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs\",\n\t\t\t\t\tNumber.MAX_VALUE,\n\t\t\t\t);\n\t\t\t\tassert.throws(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tgc = createGcWithPrivateMembers();\n\t\t\t\t\t},\n\t\t\t\t\t(e: IErrorBase) => e.errorType === \"usageError\",\n\t\t\t\t\t\"inactiveTimeout must not be greater than tombstoneTimeout\",\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t\tdescribe(\"sweepGracePeriodMs\", () => {\n\t\t\tconst testCases: {\n\t\t\t\toption: number | undefined;\n\t\t\t\texpectedResult: number;\n\t\t\t}[] = [\n\t\t\t\t{ option: 123, expectedResult: 123 },\n\t\t\t\t{ option: 0, expectedResult: 0 },\n\t\t\t\t{ option: undefined, expectedResult: defaultSweepGracePeriodMs },\n\t\t\t];\n\t\t\ttestCases.forEach((testCase) => {\n\t\t\t\tit(`Test Case ${JSON.stringify(testCase)}`, () => {\n\t\t\t\t\tgc = createGcWithPrivateMembers(\n\t\t\t\t\t\t{} /* metadata */,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsweepGracePeriodMs: testCase.option,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tassert.equal(gc.configs.sweepGracePeriodMs, testCase.expectedResult);\n\t\t\t\t});\n\t\t\t});\n\t\t\tit(\"sweepGracePeriodMs must be non-negative\", () => {\n\t\t\t\tassert.throws(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tgc = createGcWithPrivateMembers(\n\t\t\t\t\t\t\t{} /* metadata */,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsweepGracePeriodMs: -1,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t\t(e: IErrorBase) => e.errorType === \"usageError\",\n\t\t\t\t\t\"sweepGracePeriodMs must be non-negative\",\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t\tdescribe(\"testMode\", () => {\n\t\t\tconst testCases: {\n\t\t\t\tsetting?: boolean;\n\t\t\t\toption?: boolean;\n\t\t\t\texpectedResult: boolean;\n\t\t\t}[] = [\n\t\t\t\t{ setting: true, option: false, expectedResult: true },\n\t\t\t\t{ setting: false, option: true, expectedResult: false },\n\t\t\t\t{ option: true, expectedResult: true },\n\t\t\t\t{ expectedResult: false },\n\t\t\t];\n\t\t\ttestCases.forEach((testCase) => {\n\t\t\t\tit(`Test Case ${JSON.stringify(testCase)}`, () => {\n\t\t\t\t\tconfigProvider.set(gcTestModeKey, testCase.setting);\n\t\t\t\t\tgc = createGcWithPrivateMembers(undefined /* metadata */, {\n\t\t\t\t\t\trunGCInTestMode: testCase.option,\n\t\t\t\t\t});\n\t\t\t\t\tassert.equal(\n\t\t\t\t\t\tgc.configs.testMode,\n\t\t\t\t\t\ttestCase.expectedResult,\n\t\t\t\t\t\t\"testMode not set as expected\",\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"throwOnTombstoneLoad (using new container)\", () => {\n\t\tbeforeEach(() => {\n\t\t\tconfigProvider.set(testOverrideSessionExpiryMsKey, defaultSessionExpiryDurationMs); // Required for sweep to be enabled\n\t\t});\n\t\tit(\"gcDisableThrowOnTombstoneLoad true\", () => {\n\t\t\tgc = createGcWithPrivateMembers(\n\t\t\t\tundefined /* metadata */,\n\t\t\t\t{ enableGCSweep: true, [gcDisableThrowOnTombstoneLoadOptionName]: true },\n\t\t\t\tfalse /* isSummarizerClient */,\n\t\t\t);\n\t\t\tassert.equal(gc.configs.throwOnTombstoneLoad, false, \"throwOnTombstoneLoad incorrect\");\n\t\t});\n\t\tit(\"gcDisableThrowOnTombstoneLoad false\", () => {\n\t\t\tgc = createGcWithPrivateMembers(\n\t\t\t\tundefined /* metadata */,\n\t\t\t\t{ enableGCSweep: true, [gcDisableThrowOnTombstoneLoadOptionName]: false },\n\t\t\t\tfalse /* isSummarizerClient */,\n\t\t\t);\n\t\t\tassert.equal(gc.configs.throwOnTombstoneLoad, true, \"throwOnTombstoneLoad incorrect\");\n\t\t});\n\t\tit(\"gcDisableThrowOnTombstoneLoad undefined\", () => {\n\t\t\tgc = createGcWithPrivateMembers(\n\t\t\t\tundefined /* metadata */,\n\t\t\t\t{\n\t\t\t\t\tenableGCSweep: true,\n\t\t\t\t\t[gcDisableThrowOnTombstoneLoadOptionName]: undefined,\n\t\t\t\t},\n\t\t\t\tfalse /* isSummarizerClient */,\n\t\t\t);\n\t\t\tassert.equal(gc.configs.throwOnTombstoneLoad, true, \"throwOnTombstoneLoad incorrect\");\n\t\t});\n\t\tit(\"gcDisableThrowOnTombstoneLoad undefined - Sweep Disabled does not interfere\", () => {\n\t\t\tconfigProvider.set(runSweepKey, false); // Disable Sweep\n\t\t\tgc = createGcWithPrivateMembers(\n\t\t\t\tundefined /* metadata */,\n\t\t\t\t{ [gcDisableThrowOnTombstoneLoadOptionName]: undefined },\n\t\t\t\tfalse /* isSummarizerClient */,\n\t\t\t);\n\t\t\tassert.equal(gc.configs.throwOnTombstoneLoad, true, \"throwOnTombstoneLoad incorrect\");\n\t\t});\n\t\tit(\"Old 'enable' option false (ignored)\", () => {\n\t\t\tconst gcThrowOnTombstoneLoadOptionName_old = \"gcThrowOnTombstoneLoad\";\n\t\t\tgc = createGcWithPrivateMembers(\n\t\t\t\tundefined /* metadata */,\n\t\t\t\t{ enableGCSweep: true, [gcThrowOnTombstoneLoadOptionName_old]: false },\n\t\t\t\tfalse /* isSummarizerClient */,\n\t\t\t);\n\t\t\tassert.equal(gc.configs.throwOnTombstoneLoad, true, \"throwOnTombstoneLoad incorrect\");\n\t\t});\n\t\tit(\"throwOnTombstoneLoad enabled via override\", () => {\n\t\t\tconfigProvider.set(throwOnTombstoneLoadOverrideKey, true);\n\t\t\tgc = createGcWithPrivateMembers(\n\t\t\t\tundefined /* metadata */,\n\t\t\t\t{ enableGCSweep: true, [gcDisableThrowOnTombstoneLoadOptionName]: true },\n\t\t\t\tfalse /* isSummarizerClient */,\n\t\t\t);\n\t\t\tassert.equal(gc.configs.throwOnTombstoneLoad, true, \"throwOnTombstoneLoad incorrect\");\n\t\t});\n\t\tit(\"throwOnTombstoneLoad disabled via override\", () => {\n\t\t\tconfigProvider.set(throwOnTombstoneLoadOverrideKey, false);\n\t\t\tgc = createGcWithPrivateMembers(\n\t\t\t\tundefined /* metadata */,\n\t\t\t\t{ enableGCSweep: true, [gcDisableThrowOnTombstoneLoadOptionName]: false },\n\t\t\t\tfalse /* isSummarizerClient */,\n\t\t\t);\n\t\t\tassert.equal(gc.configs.throwOnTombstoneLoad, false, \"throwOnTombstoneLoad incorrect\");\n\t\t});\n\t});\n});\n"]}
@@ -0,0 +1,110 @@
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
+ // eslint-disable-next-line import/no-internal-modules
7
+ import { shouldAllowGcSweep } from "../../gc/gcHelpers.js";
8
+ describe("Garbage Collection Helpers Tests", () => {
9
+ describe("[TEMP] shouldAllowGcTombstoneEnforcement - Show behavior change as it's replaced by shouldAllowGcSweep", () => {
10
+ const testCases = [
11
+ {
12
+ persisted: undefined,
13
+ current: undefined,
14
+ expectedShouldAllowValue: true,
15
+ },
16
+ {
17
+ persisted: undefined,
18
+ current: 1,
19
+ expectedShouldAllowValue: false,
20
+ },
21
+ {
22
+ persisted: 1,
23
+ current: undefined,
24
+ expectedShouldAllowValue: true,
25
+ },
26
+ {
27
+ persisted: 1,
28
+ current: 1,
29
+ expectedShouldAllowValue: true,
30
+ },
31
+ {
32
+ persisted: 1,
33
+ current: 2,
34
+ expectedShouldAllowValue: false,
35
+ },
36
+ {
37
+ persisted: 2,
38
+ current: 1,
39
+ expectedShouldAllowValue: false,
40
+ },
41
+ ];
42
+ testCases.forEach(({ persisted, current, expectedShouldAllowValue }) => {
43
+ it(`persisted=${persisted}, current=${current}`, () => {
44
+ const shouldAllow = shouldAllowGcSweep({ tombstoneGeneration: persisted }, current);
45
+ assert.equal(shouldAllow, expectedShouldAllowValue);
46
+ });
47
+ });
48
+ });
49
+ describe("shouldAllowGcSweep", () => {
50
+ const testCases = [
51
+ {
52
+ persisted: {},
53
+ current: undefined,
54
+ expectedShouldAllowValue: true,
55
+ },
56
+ {
57
+ persisted: { gcGeneration: 1 },
58
+ current: undefined,
59
+ expectedShouldAllowValue: true,
60
+ },
61
+ {
62
+ persisted: {},
63
+ current: 0,
64
+ expectedShouldAllowValue: false,
65
+ },
66
+ {
67
+ persisted: { tombstoneGeneration: 0 },
68
+ current: 0,
69
+ expectedShouldAllowValue: true,
70
+ },
71
+ {
72
+ persisted: { tombstoneGeneration: 1 },
73
+ current: 1,
74
+ expectedShouldAllowValue: true,
75
+ },
76
+ {
77
+ persisted: { tombstoneGeneration: 1 },
78
+ current: 0,
79
+ expectedShouldAllowValue: false,
80
+ },
81
+ {
82
+ persisted: { gcGeneration: 0 },
83
+ current: 0,
84
+ expectedShouldAllowValue: true,
85
+ },
86
+ {
87
+ persisted: { gcGeneration: 1 },
88
+ current: 1,
89
+ expectedShouldAllowValue: true,
90
+ },
91
+ {
92
+ persisted: { gcGeneration: 1 },
93
+ current: 2,
94
+ expectedShouldAllowValue: false,
95
+ },
96
+ {
97
+ persisted: { gcGeneration: 2 },
98
+ current: 1,
99
+ expectedShouldAllowValue: false,
100
+ },
101
+ ];
102
+ testCases.forEach(({ persisted, current, expectedShouldAllowValue }) => {
103
+ it(`persisted=${JSON.stringify(persisted)}, current=${current}`, () => {
104
+ const shouldAllow = shouldAllowGcSweep(persisted, current);
105
+ assert.equal(shouldAllow, expectedShouldAllowValue);
106
+ });
107
+ });
108
+ });
109
+ });
110
+ //# sourceMappingURL=gcHelpers.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcHelpers.spec.js","sourceRoot":"","sources":["../../../src/test/gc/gcHelpers.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport { GCFeatureMatrix } from \"../../gc/index.js\";\n// eslint-disable-next-line import/no-internal-modules\nimport { shouldAllowGcSweep } from \"../../gc/gcHelpers.js\";\n\ndescribe(\"Garbage Collection Helpers Tests\", () => {\n\tdescribe(\"[TEMP] shouldAllowGcTombstoneEnforcement - Show behavior change as it's replaced by shouldAllowGcSweep\", () => {\n\t\tconst testCases: {\n\t\t\tpersisted: number | undefined;\n\t\t\tcurrent: number | undefined;\n\t\t\texpectedShouldAllowValue: boolean;\n\t\t}[] = [\n\t\t\t{\n\t\t\t\tpersisted: undefined,\n\t\t\t\tcurrent: undefined,\n\t\t\t\texpectedShouldAllowValue: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tpersisted: undefined,\n\t\t\t\tcurrent: 1,\n\t\t\t\texpectedShouldAllowValue: false,\n\t\t\t},\n\t\t\t{\n\t\t\t\tpersisted: 1,\n\t\t\t\tcurrent: undefined,\n\t\t\t\texpectedShouldAllowValue: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tpersisted: 1,\n\t\t\t\tcurrent: 1,\n\t\t\t\texpectedShouldAllowValue: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tpersisted: 1,\n\t\t\t\tcurrent: 2,\n\t\t\t\texpectedShouldAllowValue: false,\n\t\t\t},\n\t\t\t{\n\t\t\t\tpersisted: 2,\n\t\t\t\tcurrent: 1,\n\t\t\t\texpectedShouldAllowValue: false,\n\t\t\t},\n\t\t];\n\t\ttestCases.forEach(({ persisted, current, expectedShouldAllowValue }) => {\n\t\t\tit(`persisted=${persisted}, current=${current}`, () => {\n\t\t\t\tconst shouldAllow = shouldAllowGcSweep({ tombstoneGeneration: persisted }, current);\n\t\t\t\tassert.equal(shouldAllow, expectedShouldAllowValue);\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"shouldAllowGcSweep\", () => {\n\t\tconst testCases: {\n\t\t\tpersisted: GCFeatureMatrix;\n\t\t\tcurrent: number | undefined;\n\t\t\texpectedShouldAllowValue: boolean;\n\t\t}[] = [\n\t\t\t{\n\t\t\t\tpersisted: {},\n\t\t\t\tcurrent: undefined,\n\t\t\t\texpectedShouldAllowValue: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tpersisted: { gcGeneration: 1 },\n\t\t\t\tcurrent: undefined,\n\t\t\t\texpectedShouldAllowValue: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tpersisted: {},\n\t\t\t\tcurrent: 0,\n\t\t\t\texpectedShouldAllowValue: false,\n\t\t\t},\n\t\t\t{\n\t\t\t\tpersisted: { tombstoneGeneration: 0 },\n\t\t\t\tcurrent: 0,\n\t\t\t\texpectedShouldAllowValue: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tpersisted: { tombstoneGeneration: 1 },\n\t\t\t\tcurrent: 1,\n\t\t\t\texpectedShouldAllowValue: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tpersisted: { tombstoneGeneration: 1 },\n\t\t\t\tcurrent: 0,\n\t\t\t\texpectedShouldAllowValue: false,\n\t\t\t},\n\t\t\t{\n\t\t\t\tpersisted: { gcGeneration: 0 },\n\t\t\t\tcurrent: 0,\n\t\t\t\texpectedShouldAllowValue: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tpersisted: { gcGeneration: 1 },\n\t\t\t\tcurrent: 1,\n\t\t\t\texpectedShouldAllowValue: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tpersisted: { gcGeneration: 1 },\n\t\t\t\tcurrent: 2,\n\t\t\t\texpectedShouldAllowValue: false,\n\t\t\t},\n\t\t\t{\n\t\t\t\tpersisted: { gcGeneration: 2 },\n\t\t\t\tcurrent: 1,\n\t\t\t\texpectedShouldAllowValue: false,\n\t\t\t},\n\t\t];\n\t\ttestCases.forEach(({ persisted, current, expectedShouldAllowValue }) => {\n\t\t\tit(`persisted=${JSON.stringify(persisted)}, current=${current}`, () => {\n\t\t\t\tconst shouldAllow = shouldAllowGcSweep(persisted, current);\n\t\t\t\tassert.equal(shouldAllow, expectedShouldAllowValue);\n\t\t\t});\n\t\t});\n\t});\n});\n"]}
@@ -0,0 +1,68 @@
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 { runGarbageCollection } from "../../gc/index.js";
7
+ describe("Garbage Collector", () => {
8
+ function runGCAndValidateResults(gcNodes, startingIds, deletedNodes) {
9
+ const referenceGraph = {};
10
+ for (const node of gcNodes) {
11
+ referenceGraph[node.id] = node.outboundRoutes;
12
+ }
13
+ // Referenced nodes are all nodes in the gcNodes that are not in deletedNodes.
14
+ const referencedNodes = gcNodes.filter((node) => !deletedNodes.includes(node));
15
+ const referencedNodeIds = Array.from(referencedNodes, (node) => node.id);
16
+ const deletedNodeIds = Array.from(deletedNodes, (node) => node.id);
17
+ const gcResult = runGarbageCollection(referenceGraph, startingIds);
18
+ assert.deepStrictEqual(gcResult.referencedNodeIds.sort(), referencedNodeIds.sort(), "Referenced nodes generated by GC are incorrect");
19
+ assert.deepStrictEqual(gcResult.deletedNodeIds.sort(), deletedNodeIds.sort(), "Deleted nodes generated by GC are incorrect");
20
+ }
21
+ it("should not collect nodes when all nodes are referenced", () => {
22
+ const gcNode1 = { id: "/", outboundRoutes: ["/ds1"] };
23
+ const gcNode2 = { id: "/ds1", outboundRoutes: ["/ds1/dds1"] };
24
+ const gcNode3 = { id: "/ds2", outboundRoutes: [] };
25
+ const gcNode4 = { id: "/ds1/dds1", outboundRoutes: ["/ds2"] };
26
+ const gcNodes = [gcNode1, gcNode2, gcNode3, gcNode4];
27
+ const deletedNodes = [];
28
+ runGCAndValidateResults(gcNodes, ["/"], deletedNodes);
29
+ });
30
+ it("should collect nodes that are not referenced", () => {
31
+ const gcNode1 = { id: "/", outboundRoutes: ["/ds1"] };
32
+ const gcNode2 = { id: "/ds1", outboundRoutes: ["/ds1/dds1"] };
33
+ const gcNode3 = { id: "/ds1/dds1", outboundRoutes: [] };
34
+ // The following nodes are not referenced by any of the nodes above.
35
+ const gcNode4 = { id: "/ds2", outboundRoutes: ["/ds2/dds1"] };
36
+ const gcNode5 = { id: "/ds2/dds1", outboundRoutes: [] };
37
+ const gcNodes = [gcNode1, gcNode2, gcNode3, gcNode4, gcNode5];
38
+ const deletedNodes = [gcNode4, gcNode5];
39
+ runGCAndValidateResults(gcNodes, ["/"], deletedNodes);
40
+ });
41
+ it("should collect nodes with cycles in the graph", () => {
42
+ const gcNode1 = { id: "/", outboundRoutes: ["/ds1"] };
43
+ const gcNode2 = { id: "/ds1", outboundRoutes: ["/ds1/dds1"] };
44
+ const gcNode3 = { id: "/ds2", outboundRoutes: ["/ds2/dds1"] };
45
+ const gcNode4 = { id: "/ds1/dds1", outboundRoutes: ["/ds2", "/ds1"] };
46
+ const gcNode5 = { id: "/ds2/dds1", outboundRoutes: ["/ds1", "/ds2"] };
47
+ // The following node is not referenced by any of the nodes above.
48
+ const gcNode6 = { id: "/ds3", outboundRoutes: [] };
49
+ const gcNodes = [gcNode1, gcNode2, gcNode3, gcNode4, gcNode5, gcNode6];
50
+ const deletedNodes = [gcNode6];
51
+ runGCAndValidateResults(gcNodes, ["/"], deletedNodes);
52
+ });
53
+ it("should collect nodes with multiple starting ids", () => {
54
+ const gcNode1 = { id: "/", outboundRoutes: ["/ds1"] };
55
+ const gcNode2 = { id: "/ds1", outboundRoutes: ["/ds1/dds1"] };
56
+ const gcNode3 = { id: "/ds1/dds1", outboundRoutes: [] };
57
+ // The following node is not referenced by any of the nodes above. But its id will be given as starting id to
58
+ // GC, so it will be referenced.
59
+ const gcNode4 = { id: "/ds2", outboundRoutes: ["/ds2/dds1"] };
60
+ const gcNode5 = { id: "/ds2/dds1", outboundRoutes: [] };
61
+ // The following node is not referenced by any of the nodes above.
62
+ const gcNode6 = { id: "/ds3", outboundRoutes: [] };
63
+ const gcNodes = [gcNode1, gcNode2, gcNode3, gcNode4, gcNode5, gcNode6];
64
+ const deletedNodes = [gcNode6];
65
+ runGCAndValidateResults(gcNodes, ["/", "/ds2"], deletedNodes);
66
+ });
67
+ });
68
+ //# sourceMappingURL=gcReferenceGraphAlgorithm.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcReferenceGraphAlgorithm.spec.js","sourceRoot":"","sources":["../../../src/test/gc/gcReferenceGraphAlgorithm.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport { IGCResult, runGarbageCollection } from \"../../gc/index.js\";\n\ninterface IGCNode {\n\tid: string;\n\toutboundRoutes: string[];\n}\n\ndescribe(\"Garbage Collector\", () => {\n\tfunction runGCAndValidateResults(\n\t\tgcNodes: IGCNode[],\n\t\tstartingIds: string[],\n\t\tdeletedNodes: IGCNode[],\n\t) {\n\t\tconst referenceGraph: { [id: string]: string[] } = {};\n\t\tfor (const node of gcNodes) {\n\t\t\treferenceGraph[node.id] = node.outboundRoutes;\n\t\t}\n\n\t\t// Referenced nodes are all nodes in the gcNodes that are not in deletedNodes.\n\t\tconst referencedNodes = gcNodes.filter((node) => !deletedNodes.includes(node));\n\t\tconst referencedNodeIds = Array.from(referencedNodes, (node: IGCNode) => node.id);\n\t\tconst deletedNodeIds = Array.from(deletedNodes, (node: IGCNode) => node.id);\n\n\t\tconst gcResult: IGCResult = runGarbageCollection(referenceGraph, startingIds);\n\t\tassert.deepStrictEqual(\n\t\t\tgcResult.referencedNodeIds.sort(),\n\t\t\treferencedNodeIds.sort(),\n\t\t\t\"Referenced nodes generated by GC are incorrect\",\n\t\t);\n\t\tassert.deepStrictEqual(\n\t\t\tgcResult.deletedNodeIds.sort(),\n\t\t\tdeletedNodeIds.sort(),\n\t\t\t\"Deleted nodes generated by GC are incorrect\",\n\t\t);\n\t}\n\n\tit(\"should not collect nodes when all nodes are referenced\", () => {\n\t\tconst gcNode1: IGCNode = { id: \"/\", outboundRoutes: [\"/ds1\"] };\n\t\tconst gcNode2: IGCNode = { id: \"/ds1\", outboundRoutes: [\"/ds1/dds1\"] };\n\t\tconst gcNode3: IGCNode = { id: \"/ds2\", outboundRoutes: [] };\n\t\tconst gcNode4: IGCNode = { id: \"/ds1/dds1\", outboundRoutes: [\"/ds2\"] };\n\n\t\tconst gcNodes = [gcNode1, gcNode2, gcNode3, gcNode4];\n\t\tconst deletedNodes = [];\n\n\t\trunGCAndValidateResults(gcNodes, [\"/\"], deletedNodes);\n\t});\n\n\tit(\"should collect nodes that are not referenced\", () => {\n\t\tconst gcNode1: IGCNode = { id: \"/\", outboundRoutes: [\"/ds1\"] };\n\t\tconst gcNode2: IGCNode = { id: \"/ds1\", outboundRoutes: [\"/ds1/dds1\"] };\n\t\tconst gcNode3: IGCNode = { id: \"/ds1/dds1\", outboundRoutes: [] };\n\t\t// The following nodes are not referenced by any of the nodes above.\n\t\tconst gcNode4: IGCNode = { id: \"/ds2\", outboundRoutes: [\"/ds2/dds1\"] };\n\t\tconst gcNode5: IGCNode = { id: \"/ds2/dds1\", outboundRoutes: [] };\n\n\t\tconst gcNodes = [gcNode1, gcNode2, gcNode3, gcNode4, gcNode5];\n\t\tconst deletedNodes = [gcNode4, gcNode5];\n\n\t\trunGCAndValidateResults(gcNodes, [\"/\"], deletedNodes);\n\t});\n\n\tit(\"should collect nodes with cycles in the graph\", () => {\n\t\tconst gcNode1: IGCNode = { id: \"/\", outboundRoutes: [\"/ds1\"] };\n\t\tconst gcNode2: IGCNode = { id: \"/ds1\", outboundRoutes: [\"/ds1/dds1\"] };\n\t\tconst gcNode3: IGCNode = { id: \"/ds2\", outboundRoutes: [\"/ds2/dds1\"] };\n\t\tconst gcNode4: IGCNode = { id: \"/ds1/dds1\", outboundRoutes: [\"/ds2\", \"/ds1\"] };\n\t\tconst gcNode5: IGCNode = { id: \"/ds2/dds1\", outboundRoutes: [\"/ds1\", \"/ds2\"] };\n\t\t// The following node is not referenced by any of the nodes above.\n\t\tconst gcNode6: IGCNode = { id: \"/ds3\", outboundRoutes: [] };\n\n\t\tconst gcNodes = [gcNode1, gcNode2, gcNode3, gcNode4, gcNode5, gcNode6];\n\t\tconst deletedNodes = [gcNode6];\n\n\t\trunGCAndValidateResults(gcNodes, [\"/\"], deletedNodes);\n\t});\n\n\tit(\"should collect nodes with multiple starting ids\", () => {\n\t\tconst gcNode1: IGCNode = { id: \"/\", outboundRoutes: [\"/ds1\"] };\n\t\tconst gcNode2: IGCNode = { id: \"/ds1\", outboundRoutes: [\"/ds1/dds1\"] };\n\t\tconst gcNode3: IGCNode = { id: \"/ds1/dds1\", outboundRoutes: [] };\n\t\t// The following node is not referenced by any of the nodes above. But its id will be given as starting id to\n\t\t// GC, so it will be referenced.\n\t\tconst gcNode4: IGCNode = { id: \"/ds2\", outboundRoutes: [\"/ds2/dds1\"] };\n\t\tconst gcNode5: IGCNode = { id: \"/ds2/dds1\", outboundRoutes: [] };\n\t\t// The following node is not referenced by any of the nodes above.\n\t\tconst gcNode6: IGCNode = { id: \"/ds3\", outboundRoutes: [] };\n\n\t\tconst gcNodes = [gcNode1, gcNode2, gcNode3, gcNode4, gcNode5, gcNode6];\n\t\tconst deletedNodes = [gcNode6];\n\n\t\trunGCAndValidateResults(gcNodes, [\"/\", \"/ds2\"], deletedNodes);\n\t});\n});\n"]}