startCompactionJob method

  1. @override
Future<void> startCompactionJob({
  1. Duration? commitLogCompactionDuration,
})
override

Initiates a compaction job for the commit log.

The commitLogCompactionTimeIntervalInMins parameter specifies the time interval, in minutes, after which the commit log should be compacted. By default, it is set to 11 minutes.

The compaction job removes duplicate entries of a key from the commit log that are already synced to the remote secondary. Only the latest commit entry of the key is retained. Uncommitted entries that are duplicates will not be removed/compacted.

Implementation

@override
Future<void> startCompactionJob(
    {Duration? commitLogCompactionDuration}) async {
  commitLogCompactionDuration ??= Duration(
      minutes:
          AtClientConfig.getInstance().commitLogCompactionTimeIntervalInMins);
  AtCompactionJob atCompactionJob = AtCompactionJob(
      (await AtCommitLogManagerImpl.getInstance().getCommitLog(_atSign))!,
      SecondaryPersistenceStoreFactory.getInstance()
          .getSecondaryPersistenceStore(_atSign)!);

  _atClientCommitLogCompaction ??=
      AtClientCommitLogCompaction.create(_atSign, atCompactionJob);

  _atClientConfig ??= AtClientConfig.getInstance();

  if (!_atClientCommitLogCompaction!.isCompactionJobRunning()) {
    _atClientCommitLogCompaction!
        .scheduleCompaction(commitLogCompactionDuration.inMinutes);
  }
}