All Known Implementing Classes:
AggregateSnapshotDeletionStrategy.DeleteAllHistoricSnapshots, AggregateSnapshotDeletionStrategy.KeepHistoricSnapshots

public interface AggregateSnapshotDeletionStrategy
Strategy for which historic aggregate snapshots (i.e. old aggregate snapshots) should be deleted when a new aggregate snapshot is persisted
  • Method Details

    • keepALimitedNumberOfHistoricSnapshots

      static AggregateSnapshotDeletionStrategy keepALimitedNumberOfHistoricSnapshots(long numberOfHistoricSnapshotsToKeep)
      Strategy that keeps a specific number historic aggregate snapshots
      Parameters:
      numberOfHistoricSnapshotsToKeep - the number of historic aggregate snapshots to keep
      Returns:
      Strategy that keeps all historic aggregate snapshot events
    • keepAllHistoricSnapshots

      static AggregateSnapshotDeletionStrategy keepAllHistoricSnapshots()
      Strategy that keeps all historic aggregate snapshots
      Returns:
      Strategy that keeps all historic aggregate snapshots
    • deleteAllHistoricSnapshots

      static AggregateSnapshotDeletionStrategy deleteAllHistoricSnapshots()
      Strategy that deletes any historic aggregate snapshots when a new aggregate snapshot is persisted
      Returns:
      Strategy that deletes any historic aggregate snapshots when a new aggregate snapshot is persisted
    • requiresExistingSnapshotDetailsToDetermineWhichAggregateSnapshotsToDelete

      boolean requiresExistingSnapshotDetailsToDetermineWhichAggregateSnapshotsToDelete()
      Guard method that determines if Aggregate Snapshot statistics are required in order to determine which Snapshots to delete
      Returns:
      true if AggregateSnapshotRepository.aggregateUpdated(Object, AggregateEventStream) should fetch existing AggregateSnapshot's (without the payload) as input to resolveSnapshotsToDelete(List) or false if all existing snapshots can be deleted (solves AggregateSnapshotDeletionStrategy.DeleteAllHistoricSnapshots without incurring additional DB queries)
    • resolveSnapshotsToDelete

      <ID, AGGREGATE_IMPL_TYPE> Stream<AggregateSnapshot<ID,AGGREGATE_IMPL_TYPE>> resolveSnapshotsToDelete(List<AggregateSnapshot<ID,AGGREGATE_IMPL_TYPE>> existingSnapshots)
      Out of all the existing snapshots (loaded without the snapshot payload), return the AggregateSnapshot's that should be deleted
      This method is called just prior to adding a new AggregateSnapshot, so if the purpose it to keep 3 snapshots, and we already have 3 snapshots, then this method should return a Stream containing the oldest snapshot, which will then be deleted
      Type Parameters:
      ID - the id type for the aggregate
      AGGREGATE_IMPL_TYPE - the aggregate type implementation type
      Parameters:
      existingSnapshots - all the existing snapshots pertaining to a given aggregate instance
      Returns:
      all the AggregateSnapshot's that should be deleted