@fluidframework/container-runtime 2.0.0-dev.7.4.0.215366 → 2.0.0-dev.7.4.0.215930

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 (60) hide show
  1. package/api-report/container-runtime.api.md +24 -10
  2. package/dist/container-runtime-alpha.d.ts +45 -19
  3. package/dist/container-runtime-beta.d.ts +45 -19
  4. package/dist/container-runtime-public.d.ts +45 -19
  5. package/dist/container-runtime-untrimmed.d.ts +45 -19
  6. package/dist/gc/garbageCollection.d.ts +14 -5
  7. package/dist/gc/garbageCollection.d.ts.map +1 -1
  8. package/dist/gc/garbageCollection.js +85 -30
  9. package/dist/gc/garbageCollection.js.map +1 -1
  10. package/dist/gc/gcDefinitions.d.ts +26 -4
  11. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  12. package/dist/gc/gcDefinitions.js +1 -3
  13. package/dist/gc/gcDefinitions.js.map +1 -1
  14. package/dist/gc/gcTelemetry.d.ts +0 -5
  15. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  16. package/dist/gc/gcTelemetry.js +0 -39
  17. package/dist/gc/gcTelemetry.js.map +1 -1
  18. package/dist/gc/index.d.ts +1 -1
  19. package/dist/gc/index.d.ts.map +1 -1
  20. package/dist/gc/index.js +1 -2
  21. package/dist/gc/index.js.map +1 -1
  22. package/dist/index.d.ts +1 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js.map +1 -1
  25. package/dist/packageVersion.d.ts +1 -1
  26. package/dist/packageVersion.js +1 -1
  27. package/dist/packageVersion.js.map +1 -1
  28. package/lib/container-runtime-alpha.d.ts +45 -19
  29. package/lib/container-runtime-beta.d.ts +45 -19
  30. package/lib/container-runtime-public.d.ts +45 -19
  31. package/lib/container-runtime-untrimmed.d.ts +45 -19
  32. package/lib/gc/garbageCollection.d.ts +14 -5
  33. package/lib/gc/garbageCollection.d.ts.map +1 -1
  34. package/lib/gc/garbageCollection.js +85 -30
  35. package/lib/gc/garbageCollection.js.map +1 -1
  36. package/lib/gc/gcDefinitions.d.ts +26 -4
  37. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  38. package/lib/gc/gcDefinitions.js +0 -2
  39. package/lib/gc/gcDefinitions.js.map +1 -1
  40. package/lib/gc/gcTelemetry.d.ts +0 -5
  41. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  42. package/lib/gc/gcTelemetry.js +1 -40
  43. package/lib/gc/gcTelemetry.js.map +1 -1
  44. package/lib/gc/index.d.ts +1 -1
  45. package/lib/gc/index.d.ts.map +1 -1
  46. package/lib/gc/index.js +1 -1
  47. package/lib/gc/index.js.map +1 -1
  48. package/lib/index.d.ts +1 -1
  49. package/lib/index.d.ts.map +1 -1
  50. package/lib/index.js.map +1 -1
  51. package/lib/packageVersion.d.ts +1 -1
  52. package/lib/packageVersion.js +1 -1
  53. package/lib/packageVersion.js.map +1 -1
  54. package/package.json +18 -15
  55. package/src/gc/garbageCollection.ts +101 -48
  56. package/src/gc/gcDefinitions.ts +27 -4
  57. package/src/gc/gcTelemetry.ts +0 -53
  58. package/src/gc/index.ts +2 -1
  59. package/src/index.ts +2 -0
  60. package/src/packageVersion.ts +1 -1
@@ -446,16 +446,7 @@ export interface IGCRuntimeOptions {
446
446
  }
447
447
 
448
448
  // @public
449
- export interface IGCStats {
450
- attachmentBlobCount: number;
451
- dataStoreCount: number;
452
- nodeCount: number;
453
- unrefAttachmentBlobCount: number;
454
- unrefDataStoreCount: number;
455
- unrefNodeCount: number;
456
- updatedAttachmentBlobCount: number;
457
- updatedDataStoreCount: number;
458
- updatedNodeCount: number;
449
+ export interface IGCStats extends IMarkPhaseStats, ISweepPhaseStats {
459
450
  }
460
451
 
461
452
  // @public
@@ -478,6 +469,19 @@ export interface IGenerateSummaryTreeResult extends Omit<IBaseSummarizeResult, "
478
469
  readonly summaryTree: ISummaryTree;
479
470
  }
480
471
 
472
+ // @public
473
+ export interface IMarkPhaseStats {
474
+ attachmentBlobCount: number;
475
+ dataStoreCount: number;
476
+ nodeCount: number;
477
+ unrefAttachmentBlobCount: number;
478
+ unrefDataStoreCount: number;
479
+ unrefNodeCount: number;
480
+ updatedAttachmentBlobCount: number;
481
+ updatedDataStoreCount: number;
482
+ updatedNodeCount: number;
483
+ }
484
+
481
485
  // @public (undocumented)
482
486
  export interface INackSummaryResult extends IRetriableFailureResult {
483
487
  // (undocumented)
@@ -703,6 +707,16 @@ export interface ISummaryRuntimeOptions {
703
707
  summaryConfigOverrides?: ISummaryConfiguration;
704
708
  }
705
709
 
710
+ // @public
711
+ export interface ISweepPhaseStats {
712
+ deletedAttachmentBlobCount: number;
713
+ deletedDataStoreCount: number;
714
+ deletedNodeCount: number;
715
+ lifetimeAttachmentBlobCount: number;
716
+ lifetimeDataStoreCount: number;
717
+ lifetimeNodeCount: number;
718
+ }
719
+
706
720
  // @public
707
721
  export interface IUploadSummaryResult extends Omit<IGenerateSummaryTreeResult, "stage"> {
708
722
  readonly handle: string;
@@ -1008,25 +1008,7 @@ export declare interface IGCRuntimeOptions {
1008
1008
  * The statistics of the system state after a garbage collection run.
1009
1009
  * @public
1010
1010
  */
1011
- export declare interface IGCStats {
1012
- /** The number of nodes in the container. */
1013
- nodeCount: number;
1014
- /** The number of data stores in the container. */
1015
- dataStoreCount: number;
1016
- /** The number of attachment blobs in the container. */
1017
- attachmentBlobCount: number;
1018
- /** The number of unreferenced nodes in the container. */
1019
- unrefNodeCount: number;
1020
- /** The number of unreferenced data stores in the container. */
1021
- unrefDataStoreCount: number;
1022
- /** The number of unreferenced attachment blobs in the container. */
1023
- unrefAttachmentBlobCount: number;
1024
- /** The number of nodes whose reference state updated since last GC run. */
1025
- updatedNodeCount: number;
1026
- /** The number of data stores whose reference state updated since last GC run. */
1027
- updatedDataStoreCount: number;
1028
- /** The number of attachment blobs whose reference state updated since last GC run. */
1029
- updatedAttachmentBlobCount: number;
1011
+ export declare interface IGCStats extends IMarkPhaseStats, ISweepPhaseStats {
1030
1012
  }
1031
1013
 
1032
1014
  /**
@@ -1065,6 +1047,31 @@ export declare interface IGenerateSummaryTreeResult extends Omit<IBaseSummarizeR
1065
1047
  readonly forcedFullTree: boolean;
1066
1048
  }
1067
1049
 
1050
+ /**
1051
+ * The statistics of the system state after a garbage collection mark phase run.
1052
+ * @public
1053
+ */
1054
+ export declare interface IMarkPhaseStats {
1055
+ /** The number of nodes in the container. */
1056
+ nodeCount: number;
1057
+ /** The number of data stores in the container. */
1058
+ dataStoreCount: number;
1059
+ /** The number of attachment blobs in the container. */
1060
+ attachmentBlobCount: number;
1061
+ /** The number of unreferenced nodes in the container. */
1062
+ unrefNodeCount: number;
1063
+ /** The number of unreferenced data stores in the container. */
1064
+ unrefDataStoreCount: number;
1065
+ /** The number of unreferenced attachment blobs in the container. */
1066
+ unrefAttachmentBlobCount: number;
1067
+ /** The number of nodes whose reference state updated since last GC run. */
1068
+ updatedNodeCount: number;
1069
+ /** The number of data stores whose reference state updated since last GC run. */
1070
+ updatedDataStoreCount: number;
1071
+ /** The number of attachment blobs whose reference state updated since last GC run. */
1072
+ updatedAttachmentBlobCount: number;
1073
+ }
1074
+
1068
1075
  /**
1069
1076
  * @public
1070
1077
  */
@@ -1455,6 +1462,25 @@ export declare interface ISummaryRuntimeOptions {
1455
1462
  initialSummarizerDelayMs?: number;
1456
1463
  }
1457
1464
 
1465
+ /**
1466
+ * The statistics of the system state after a garbage collection sweep phase run.
1467
+ * @public
1468
+ */
1469
+ export declare interface ISweepPhaseStats {
1470
+ /** The number of nodes in the lifetime of the container. */
1471
+ lifetimeNodeCount: number;
1472
+ /** The number of data stores in the lifetime of the container. */
1473
+ lifetimeDataStoreCount: number;
1474
+ /** The number of attachment blobs in the lifetime of the container. */
1475
+ lifetimeAttachmentBlobCount: number;
1476
+ /** The number of deleted nodes in the container. */
1477
+ deletedNodeCount: number;
1478
+ /** The number of deleted data stores in the container. */
1479
+ deletedDataStoreCount: number;
1480
+ /** The number of deleted attachment blobs in the container. */
1481
+ deletedAttachmentBlobCount: number;
1482
+ }
1483
+
1458
1484
  /**
1459
1485
  * Results of submitSummary after uploading the tree to storage.
1460
1486
  * @public
@@ -1007,25 +1007,7 @@ export declare interface IGCRuntimeOptions {
1007
1007
  * The statistics of the system state after a garbage collection run.
1008
1008
  * @public
1009
1009
  */
1010
- export declare interface IGCStats {
1011
- /** The number of nodes in the container. */
1012
- nodeCount: number;
1013
- /** The number of data stores in the container. */
1014
- dataStoreCount: number;
1015
- /** The number of attachment blobs in the container. */
1016
- attachmentBlobCount: number;
1017
- /** The number of unreferenced nodes in the container. */
1018
- unrefNodeCount: number;
1019
- /** The number of unreferenced data stores in the container. */
1020
- unrefDataStoreCount: number;
1021
- /** The number of unreferenced attachment blobs in the container. */
1022
- unrefAttachmentBlobCount: number;
1023
- /** The number of nodes whose reference state updated since last GC run. */
1024
- updatedNodeCount: number;
1025
- /** The number of data stores whose reference state updated since last GC run. */
1026
- updatedDataStoreCount: number;
1027
- /** The number of attachment blobs whose reference state updated since last GC run. */
1028
- updatedAttachmentBlobCount: number;
1010
+ export declare interface IGCStats extends IMarkPhaseStats, ISweepPhaseStats {
1029
1011
  }
1030
1012
 
1031
1013
  /**
@@ -1066,6 +1048,31 @@ export declare interface IGenerateSummaryTreeResult extends Omit<IBaseSummarizeR
1066
1048
 
1067
1049
  /* Excluded from this release type: IGetPendingLocalStateProps */
1068
1050
 
1051
+ /**
1052
+ * The statistics of the system state after a garbage collection mark phase run.
1053
+ * @public
1054
+ */
1055
+ export declare interface IMarkPhaseStats {
1056
+ /** The number of nodes in the container. */
1057
+ nodeCount: number;
1058
+ /** The number of data stores in the container. */
1059
+ dataStoreCount: number;
1060
+ /** The number of attachment blobs in the container. */
1061
+ attachmentBlobCount: number;
1062
+ /** The number of unreferenced nodes in the container. */
1063
+ unrefNodeCount: number;
1064
+ /** The number of unreferenced data stores in the container. */
1065
+ unrefDataStoreCount: number;
1066
+ /** The number of unreferenced attachment blobs in the container. */
1067
+ unrefAttachmentBlobCount: number;
1068
+ /** The number of nodes whose reference state updated since last GC run. */
1069
+ updatedNodeCount: number;
1070
+ /** The number of data stores whose reference state updated since last GC run. */
1071
+ updatedDataStoreCount: number;
1072
+ /** The number of attachment blobs whose reference state updated since last GC run. */
1073
+ updatedAttachmentBlobCount: number;
1074
+ }
1075
+
1069
1076
  /**
1070
1077
  * @public
1071
1078
  */
@@ -1456,6 +1463,25 @@ export declare interface ISummaryRuntimeOptions {
1456
1463
  initialSummarizerDelayMs?: number;
1457
1464
  }
1458
1465
 
1466
+ /**
1467
+ * The statistics of the system state after a garbage collection sweep phase run.
1468
+ * @public
1469
+ */
1470
+ export declare interface ISweepPhaseStats {
1471
+ /** The number of nodes in the lifetime of the container. */
1472
+ lifetimeNodeCount: number;
1473
+ /** The number of data stores in the lifetime of the container. */
1474
+ lifetimeDataStoreCount: number;
1475
+ /** The number of attachment blobs in the lifetime of the container. */
1476
+ lifetimeAttachmentBlobCount: number;
1477
+ /** The number of deleted nodes in the container. */
1478
+ deletedNodeCount: number;
1479
+ /** The number of deleted data stores in the container. */
1480
+ deletedDataStoreCount: number;
1481
+ /** The number of deleted attachment blobs in the container. */
1482
+ deletedAttachmentBlobCount: number;
1483
+ }
1484
+
1459
1485
  /**
1460
1486
  * Results of submitSummary after uploading the tree to storage.
1461
1487
  * @public
@@ -1007,25 +1007,7 @@ export declare interface IGCRuntimeOptions {
1007
1007
  * The statistics of the system state after a garbage collection run.
1008
1008
  * @public
1009
1009
  */
1010
- export declare interface IGCStats {
1011
- /** The number of nodes in the container. */
1012
- nodeCount: number;
1013
- /** The number of data stores in the container. */
1014
- dataStoreCount: number;
1015
- /** The number of attachment blobs in the container. */
1016
- attachmentBlobCount: number;
1017
- /** The number of unreferenced nodes in the container. */
1018
- unrefNodeCount: number;
1019
- /** The number of unreferenced data stores in the container. */
1020
- unrefDataStoreCount: number;
1021
- /** The number of unreferenced attachment blobs in the container. */
1022
- unrefAttachmentBlobCount: number;
1023
- /** The number of nodes whose reference state updated since last GC run. */
1024
- updatedNodeCount: number;
1025
- /** The number of data stores whose reference state updated since last GC run. */
1026
- updatedDataStoreCount: number;
1027
- /** The number of attachment blobs whose reference state updated since last GC run. */
1028
- updatedAttachmentBlobCount: number;
1010
+ export declare interface IGCStats extends IMarkPhaseStats, ISweepPhaseStats {
1029
1011
  }
1030
1012
 
1031
1013
  /**
@@ -1066,6 +1048,31 @@ export declare interface IGenerateSummaryTreeResult extends Omit<IBaseSummarizeR
1066
1048
 
1067
1049
  /* Excluded from this release type: IGetPendingLocalStateProps */
1068
1050
 
1051
+ /**
1052
+ * The statistics of the system state after a garbage collection mark phase run.
1053
+ * @public
1054
+ */
1055
+ export declare interface IMarkPhaseStats {
1056
+ /** The number of nodes in the container. */
1057
+ nodeCount: number;
1058
+ /** The number of data stores in the container. */
1059
+ dataStoreCount: number;
1060
+ /** The number of attachment blobs in the container. */
1061
+ attachmentBlobCount: number;
1062
+ /** The number of unreferenced nodes in the container. */
1063
+ unrefNodeCount: number;
1064
+ /** The number of unreferenced data stores in the container. */
1065
+ unrefDataStoreCount: number;
1066
+ /** The number of unreferenced attachment blobs in the container. */
1067
+ unrefAttachmentBlobCount: number;
1068
+ /** The number of nodes whose reference state updated since last GC run. */
1069
+ updatedNodeCount: number;
1070
+ /** The number of data stores whose reference state updated since last GC run. */
1071
+ updatedDataStoreCount: number;
1072
+ /** The number of attachment blobs whose reference state updated since last GC run. */
1073
+ updatedAttachmentBlobCount: number;
1074
+ }
1075
+
1069
1076
  /**
1070
1077
  * @public
1071
1078
  */
@@ -1456,6 +1463,25 @@ export declare interface ISummaryRuntimeOptions {
1456
1463
  initialSummarizerDelayMs?: number;
1457
1464
  }
1458
1465
 
1466
+ /**
1467
+ * The statistics of the system state after a garbage collection sweep phase run.
1468
+ * @public
1469
+ */
1470
+ export declare interface ISweepPhaseStats {
1471
+ /** The number of nodes in the lifetime of the container. */
1472
+ lifetimeNodeCount: number;
1473
+ /** The number of data stores in the lifetime of the container. */
1474
+ lifetimeDataStoreCount: number;
1475
+ /** The number of attachment blobs in the lifetime of the container. */
1476
+ lifetimeAttachmentBlobCount: number;
1477
+ /** The number of deleted nodes in the container. */
1478
+ deletedNodeCount: number;
1479
+ /** The number of deleted data stores in the container. */
1480
+ deletedDataStoreCount: number;
1481
+ /** The number of deleted attachment blobs in the container. */
1482
+ deletedAttachmentBlobCount: number;
1483
+ }
1484
+
1459
1485
  /**
1460
1486
  * Results of submitSummary after uploading the tree to storage.
1461
1487
  * @public
@@ -1051,25 +1051,7 @@ export declare interface IGCRuntimeOptions {
1051
1051
  * The statistics of the system state after a garbage collection run.
1052
1052
  * @public
1053
1053
  */
1054
- export declare interface IGCStats {
1055
- /** The number of nodes in the container. */
1056
- nodeCount: number;
1057
- /** The number of data stores in the container. */
1058
- dataStoreCount: number;
1059
- /** The number of attachment blobs in the container. */
1060
- attachmentBlobCount: number;
1061
- /** The number of unreferenced nodes in the container. */
1062
- unrefNodeCount: number;
1063
- /** The number of unreferenced data stores in the container. */
1064
- unrefDataStoreCount: number;
1065
- /** The number of unreferenced attachment blobs in the container. */
1066
- unrefAttachmentBlobCount: number;
1067
- /** The number of nodes whose reference state updated since last GC run. */
1068
- updatedNodeCount: number;
1069
- /** The number of data stores whose reference state updated since last GC run. */
1070
- updatedDataStoreCount: number;
1071
- /** The number of attachment blobs whose reference state updated since last GC run. */
1072
- updatedAttachmentBlobCount: number;
1054
+ export declare interface IGCStats extends IMarkPhaseStats, ISweepPhaseStats {
1073
1055
  }
1074
1056
 
1075
1057
  /**
@@ -1108,6 +1090,31 @@ export declare interface IGenerateSummaryTreeResult extends Omit<IBaseSummarizeR
1108
1090
  readonly forcedFullTree: boolean;
1109
1091
  }
1110
1092
 
1093
+ /**
1094
+ * The statistics of the system state after a garbage collection mark phase run.
1095
+ * @public
1096
+ */
1097
+ export declare interface IMarkPhaseStats {
1098
+ /** The number of nodes in the container. */
1099
+ nodeCount: number;
1100
+ /** The number of data stores in the container. */
1101
+ dataStoreCount: number;
1102
+ /** The number of attachment blobs in the container. */
1103
+ attachmentBlobCount: number;
1104
+ /** The number of unreferenced nodes in the container. */
1105
+ unrefNodeCount: number;
1106
+ /** The number of unreferenced data stores in the container. */
1107
+ unrefDataStoreCount: number;
1108
+ /** The number of unreferenced attachment blobs in the container. */
1109
+ unrefAttachmentBlobCount: number;
1110
+ /** The number of nodes whose reference state updated since last GC run. */
1111
+ updatedNodeCount: number;
1112
+ /** The number of data stores whose reference state updated since last GC run. */
1113
+ updatedDataStoreCount: number;
1114
+ /** The number of attachment blobs whose reference state updated since last GC run. */
1115
+ updatedAttachmentBlobCount: number;
1116
+ }
1117
+
1111
1118
  /**
1112
1119
  * @public
1113
1120
  */
@@ -1498,6 +1505,25 @@ export declare interface ISummaryRuntimeOptions {
1498
1505
  initialSummarizerDelayMs?: number;
1499
1506
  }
1500
1507
 
1508
+ /**
1509
+ * The statistics of the system state after a garbage collection sweep phase run.
1510
+ * @public
1511
+ */
1512
+ export declare interface ISweepPhaseStats {
1513
+ /** The number of nodes in the lifetime of the container. */
1514
+ lifetimeNodeCount: number;
1515
+ /** The number of data stores in the lifetime of the container. */
1516
+ lifetimeDataStoreCount: number;
1517
+ /** The number of attachment blobs in the lifetime of the container. */
1518
+ lifetimeAttachmentBlobCount: number;
1519
+ /** The number of deleted nodes in the container. */
1520
+ deletedNodeCount: number;
1521
+ /** The number of deleted data stores in the container. */
1522
+ deletedDataStoreCount: number;
1523
+ /** The number of deleted attachment blobs in the container. */
1524
+ deletedAttachmentBlobCount: number;
1525
+ }
1526
+
1501
1527
  /**
1502
1528
  * Results of submitSummary after uploading the tree to storage.
1503
1529
  * @public
@@ -106,9 +106,10 @@ export declare class GarbageCollector implements IGarbageCollector {
106
106
  /**
107
107
  * Runs garbage collection. It does the following:
108
108
  * 1. It generates / analyzes the runtime's reference graph.
109
- * 2. Generates stats for the GC run based on previous / current GC state.
109
+ * 2. Generates mark phase stats.
110
110
  * 3. Runs Mark phase.
111
111
  * 4. Runs Sweep phase.
112
+ * 5. Generates sweep phase stats.
112
113
  */
113
114
  private runGC;
114
115
  /**
@@ -191,10 +192,18 @@ export declare class GarbageCollector implements IGarbageCollector {
191
192
  isNodeDeleted(nodePath: string): boolean;
192
193
  dispose(): void;
193
194
  /**
194
- * Generates the stats of a garbage collection run from the given results of the run.
195
- * @param gcResult - The result of a GC run.
196
- * @returns the GC stats of the GC run.
195
+ * Generates the stats of a garbage collection mark phase run.
196
+ * @param gcResult - The result of the current GC run.
197
+ * @returns the stats of the mark phase run.
197
198
  */
198
- private generateStats;
199
+ private getMarkPhaseStats;
200
+ /**
201
+ * Generates the stats of a garbage collection sweep phase run.
202
+ * @param allDeletedNodes - All the nodes that have been deleted across all GC runs.
203
+ * @param currentDeletedNodes - The nodes that have been deleted in this GC run.
204
+ * @param markPhaseStats - The stats of the mark phase run.
205
+ * @returns the stats of the sweep phase run.
206
+ */
207
+ private getSweepPhaseStats;
199
208
  }
200
209
  //# sourceMappingURL=garbageCollection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"garbageCollection.d.ts","sourceRoot":"","sources":["../../src/gc/garbageCollection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"garbageCollection.d.ts","sourceRoot":"","sources":["../../src/gc/garbageCollection.ts"],"names":[],"mappings":"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"}
@@ -200,6 +200,7 @@ class GarbageCollector {
200
200
  eventName: "GarbageCollectorLoaded",
201
201
  gcConfigs: JSON.stringify(this.configs),
202
202
  gcOptions: JSON.stringify(createParams.gcOptions),
203
+ ...createParams.createContainerMetadata,
203
204
  });
204
205
  }
205
206
  /**
@@ -375,7 +376,11 @@ class GarbageCollector {
375
376
  await this.runtime.updateStateBeforeGC();
376
377
  /** GC step */
377
378
  const gcStats = await this.runGC(fullGC, currentReferenceTimestampMs, logger);
378
- event.end({ ...gcStats, timestamp: currentReferenceTimestampMs });
379
+ event.end({
380
+ ...gcStats,
381
+ timestamp: currentReferenceTimestampMs,
382
+ sweep: this.configs.shouldRunSweep,
383
+ });
379
384
  /** Post-GC steps */
380
385
  // Log pending unreferenced events such as a node being used after inactive. This is done after GC runs and
381
386
  // updates its state so that we don't send false positives based on intermediate state. For example, we may get
@@ -391,9 +396,10 @@ class GarbageCollector {
391
396
  /**
392
397
  * Runs garbage collection. It does the following:
393
398
  * 1. It generates / analyzes the runtime's reference graph.
394
- * 2. Generates stats for the GC run based on previous / current GC state.
399
+ * 2. Generates mark phase stats.
395
400
  * 3. Runs Mark phase.
396
401
  * 4. Runs Sweep phase.
402
+ * 5. Generates sweep phase stats.
397
403
  */
398
404
  async runGC(fullGC, currentReferenceTimestampMs, logger) {
399
405
  // 1. Generate / analyze the runtime's reference graph.
@@ -403,17 +409,19 @@ class GarbageCollector {
403
409
  // Get all referenced nodes - References in this run + references between the previous and current runs.
404
410
  const allReferencedNodeIds = this.findAllNodesReferencedBetweenGCs(gcData, this.gcDataFromLastRun, logger) ??
405
411
  gcResult.referencedNodeIds;
406
- // 2. Generate stats based on the previous / current GC state.
407
- // Must happen before running Mark / Sweep phase because previous GC state will be updated in these stages.
408
- const gcStats = this.generateStats(gcResult);
412
+ // 2. Get the mark phase stats based on the previous / current GC state.
413
+ // This is done before running mark phase because we need the previous GC state before it is updated.
414
+ const markPhaseStats = this.getMarkPhaseStats(gcResult);
409
415
  // 3. Run the Mark phase.
410
416
  // It will mark nodes as referenced / unreferenced and return a list of node ids that are ready to be swept.
411
417
  const sweepReadyNodeIds = this.runMarkPhase(gcResult, allReferencedNodeIds, currentReferenceTimestampMs);
412
418
  // 4. Run the Sweep phase.
413
419
  // It will delete sweep ready nodes and return a list of deleted node ids.
414
- const deletedNodeIds = this.runSweepPhase(gcResult, sweepReadyNodeIds, currentReferenceTimestampMs, logger);
420
+ const deletedNodeIds = this.runSweepPhase(gcResult, sweepReadyNodeIds);
415
421
  this.gcDataFromLastRun = (0, gcHelpers_1.cloneGCData)(gcData, (id) => deletedNodeIds.includes(id) /* filter out deleted nodes */);
416
- return gcStats;
422
+ // 5. Get the sweep phase stats.
423
+ const sweepPhaseStats = this.getSweepPhaseStats(this.configs.shouldRunSweep ? this.deletedNodes : sweepReadyNodeIds, new Set(deletedNodeIds), markPhaseStats);
424
+ return { ...markPhaseStats, ...sweepPhaseStats };
417
425
  }
418
426
  /**
419
427
  * Runs the GC Mark phase. It does the following:
@@ -441,7 +449,7 @@ class GarbageCollector {
441
449
  }
442
450
  }
443
451
  // 2. Mark unreferenced nodes in this run by starting unreferenced tracking for them.
444
- const sweepReadyNodeIds = [];
452
+ const sweepReadyNodeIds = new Set();
445
453
  for (const nodeId of gcResult.deletedNodeIds) {
446
454
  const nodeStateTracker = this.unreferencedNodesState.get(nodeId);
447
455
  if (nodeStateTracker === undefined) {
@@ -453,7 +461,7 @@ class GarbageCollector {
453
461
  nodeStateTracker.updateTracking(currentReferenceTimestampMs);
454
462
  // If a node is sweep ready, store it so it can be returned.
455
463
  if (nodeStateTracker.state === gcDefinitions_1.UnreferencedState.SweepReady) {
456
- sweepReadyNodeIds.push(nodeId);
464
+ sweepReadyNodeIds.add(nodeId);
457
465
  }
458
466
  }
459
467
  }
@@ -472,10 +480,7 @@ class GarbageCollector {
472
480
  * @param logger - The logger to be used to log any telemetry.
473
481
  * @returns A list of nodes that have been deleted.
474
482
  */
475
- runSweepPhase(gcResult, sweepReadyNodes, currentReferenceTimestampMs, logger) {
476
- // Log events for objects that are ready to be deleted by sweep. This will give us data on sweep when
477
- // its not enabled.
478
- this.telemetryTracker.logSweepEvents(logger, currentReferenceTimestampMs, this.unreferencedNodesState, this.completedRuns, this.getLastSummaryTimestampMs());
483
+ runSweepPhase(gcResult, sweepReadyNodes) {
479
484
  /**
480
485
  * Currently, there are 3 modes for sweep:
481
486
  * Test mode - Unreferenced nodes are immediately deleted without waiting for them to be sweep ready.
@@ -491,7 +496,7 @@ class GarbageCollector {
491
496
  return [];
492
497
  }
493
498
  if (this.configs.tombstoneMode) {
494
- this.tombstones = sweepReadyNodes;
499
+ this.tombstones = Array.from(sweepReadyNodes);
495
500
  // If we are running in GC tombstone mode, update tombstoned routes. This enables testing scenarios
496
501
  // involving access to "deleted" data without actually deleting the data from summaries.
497
502
  this.runtime.updateTombstonedRoutes(this.tombstones);
@@ -503,7 +508,7 @@ class GarbageCollector {
503
508
  // 1. Call the runtime to delete sweep ready nodes. The runtime returns a list of nodes it deleted.
504
509
  // TODO: GC:Validation - validate that removed routes are not double delete and that the child routes of
505
510
  // removed routes are deleted as well.
506
- const deletedNodeIds = this.runtime.deleteSweepReadyNodes(sweepReadyNodes);
511
+ const deletedNodeIds = this.runtime.deleteSweepReadyNodes(Array.from(sweepReadyNodes));
507
512
  // 2. Clear unreferenced state tracking for deleted nodes.
508
513
  for (const nodeId of deletedNodeIds) {
509
514
  const nodeStateTracker = this.unreferencedNodesState.get(nodeId);
@@ -715,12 +720,12 @@ class GarbageCollector {
715
720
  this.sessionExpiryTimer = undefined;
716
721
  }
717
722
  /**
718
- * Generates the stats of a garbage collection run from the given results of the run.
719
- * @param gcResult - The result of a GC run.
720
- * @returns the GC stats of the GC run.
723
+ * Generates the stats of a garbage collection mark phase run.
724
+ * @param gcResult - The result of the current GC run.
725
+ * @returns the stats of the mark phase run.
721
726
  */
722
- generateStats(gcResult) {
723
- const gcStats = {
727
+ getMarkPhaseStats(gcResult) {
728
+ const markPhaseStats = {
724
729
  nodeCount: 0,
725
730
  dataStoreCount: 0,
726
731
  attachmentBlobCount: 0,
@@ -732,33 +737,33 @@ class GarbageCollector {
732
737
  updatedAttachmentBlobCount: 0,
733
738
  };
734
739
  const updateNodeStats = (nodeId, referenced) => {
735
- gcStats.nodeCount++;
740
+ markPhaseStats.nodeCount++;
736
741
  // If there is no previous GC data, every node's state is generated and is considered as updated.
737
742
  // Otherwise, find out if any node went from referenced to unreferenced or vice-versa.
738
743
  const stateUpdated = this.gcDataFromLastRun === undefined ||
739
744
  this.unreferencedNodesState.has(nodeId) === referenced;
740
745
  if (stateUpdated) {
741
- gcStats.updatedNodeCount++;
746
+ markPhaseStats.updatedNodeCount++;
742
747
  }
743
748
  if (!referenced) {
744
- gcStats.unrefNodeCount++;
749
+ markPhaseStats.unrefNodeCount++;
745
750
  }
746
751
  if (this.runtime.getNodeType(nodeId) === gcDefinitions_1.GCNodeType.DataStore) {
747
- gcStats.dataStoreCount++;
752
+ markPhaseStats.dataStoreCount++;
748
753
  if (stateUpdated) {
749
- gcStats.updatedDataStoreCount++;
754
+ markPhaseStats.updatedDataStoreCount++;
750
755
  }
751
756
  if (!referenced) {
752
- gcStats.unrefDataStoreCount++;
757
+ markPhaseStats.unrefDataStoreCount++;
753
758
  }
754
759
  }
755
760
  if (this.runtime.getNodeType(nodeId) === gcDefinitions_1.GCNodeType.Blob) {
756
- gcStats.attachmentBlobCount++;
761
+ markPhaseStats.attachmentBlobCount++;
757
762
  if (stateUpdated) {
758
- gcStats.updatedAttachmentBlobCount++;
763
+ markPhaseStats.updatedAttachmentBlobCount++;
759
764
  }
760
765
  if (!referenced) {
761
- gcStats.unrefAttachmentBlobCount++;
766
+ markPhaseStats.unrefAttachmentBlobCount++;
762
767
  }
763
768
  }
764
769
  };
@@ -768,7 +773,57 @@ class GarbageCollector {
768
773
  for (const nodeId of gcResult.deletedNodeIds) {
769
774
  updateNodeStats(nodeId, false /* referenced */);
770
775
  }
771
- return gcStats;
776
+ return markPhaseStats;
777
+ }
778
+ /**
779
+ * Generates the stats of a garbage collection sweep phase run.
780
+ * @param allDeletedNodes - All the nodes that have been deleted across all GC runs.
781
+ * @param currentDeletedNodes - The nodes that have been deleted in this GC run.
782
+ * @param markPhaseStats - The stats of the mark phase run.
783
+ * @returns the stats of the sweep phase run.
784
+ */
785
+ getSweepPhaseStats(allDeletedNodes, currentDeletedNodes, markPhaseStats) {
786
+ // Initialize the life time node counts to the mark phase node counts. If sweep is not enabled,
787
+ // these will be the life time node count for this container.
788
+ const sweepPhaseStats = {
789
+ lifetimeNodeCount: markPhaseStats.nodeCount,
790
+ lifetimeDataStoreCount: markPhaseStats.dataStoreCount,
791
+ lifetimeAttachmentBlobCount: markPhaseStats.attachmentBlobCount,
792
+ deletedNodeCount: 0,
793
+ deletedDataStoreCount: 0,
794
+ deletedAttachmentBlobCount: 0,
795
+ };
796
+ for (const nodeId of allDeletedNodes) {
797
+ sweepPhaseStats.deletedNodeCount++;
798
+ const nodeType = this.runtime.getNodeType(nodeId);
799
+ if (nodeType === gcDefinitions_1.GCNodeType.DataStore) {
800
+ sweepPhaseStats.deletedDataStoreCount++;
801
+ }
802
+ else if (nodeType === gcDefinitions_1.GCNodeType.Blob) {
803
+ sweepPhaseStats.deletedAttachmentBlobCount++;
804
+ }
805
+ }
806
+ if (!this.configs.shouldRunSweep) {
807
+ return sweepPhaseStats;
808
+ }
809
+ // If sweep is enabled, the counts from the mark phase stats do not include nodes that have been
810
+ // deleted in previous runs. Add the deleted node counts to life time stats.
811
+ sweepPhaseStats.lifetimeNodeCount += sweepPhaseStats.deletedNodeCount;
812
+ sweepPhaseStats.lifetimeDataStoreCount += sweepPhaseStats.deletedDataStoreCount;
813
+ sweepPhaseStats.lifetimeAttachmentBlobCount += sweepPhaseStats.deletedAttachmentBlobCount;
814
+ // The node deleted in current run are counted twice - once in allDeletedNodes and again in
815
+ // markPhaseStats. So, remove them from the life time stats.
816
+ for (const nodeId of currentDeletedNodes) {
817
+ sweepPhaseStats.lifetimeNodeCount--;
818
+ const nodeType = this.runtime.getNodeType(nodeId);
819
+ if (nodeType === gcDefinitions_1.GCNodeType.DataStore) {
820
+ sweepPhaseStats.lifetimeDataStoreCount--;
821
+ }
822
+ else if (nodeType === gcDefinitions_1.GCNodeType.Blob) {
823
+ sweepPhaseStats.lifetimeAttachmentBlobCount--;
824
+ }
825
+ }
826
+ return sweepPhaseStats;
772
827
  }
773
828
  }
774
829
  exports.GarbageCollector = GarbageCollector;