in src/main/kotlin/org/opensearch/index/translog/ReplicationTranslogDeletionPolicy.kt [92:119]
fun minTranslogGenRequired(
readers: List<TranslogReader>, writer: TranslogWriter,
translogPruningEnabled: Boolean, retentionSizeInBytes: Long,
retentionAgeInMillis: Long, retentionTotalFiles: Int,
minTranslogGenRequiredByLocks: Long, retentionLeasesSupplier: Supplier<RetentionLeases>
): Long {
val minBySize: Long = getMinTranslogGenBySize(readers, writer, retentionSizeInBytes)
var minByRetentionLeasesAndSize = Long.MAX_VALUE
if (translogPruningEnabled) {
// If retention size is specified, size takes precedence.
val minByRetentionLeases: Long =
getMinTranslogGenByRetentionLease(readers, writer, retentionLeasesSupplier)
minByRetentionLeasesAndSize = minBySize.coerceAtLeast(minByRetentionLeases)
}
val minByAge = getMinTranslogGenByAge(readers, writer, retentionAgeInMillis, System.currentTimeMillis())
val minByAgeAndSize = if (minBySize == Long.MIN_VALUE && minByAge == Long.MIN_VALUE) {
// both size and age are disabled;
Long.MAX_VALUE
} else {
minByAge.coerceAtLeast(minBySize)
}
val minByNumFiles = getMinTranslogGenByTotalFiles(readers, writer, retentionTotalFiles)
val minByLocks: Long = minTranslogGenRequiredByLocks
val minByTranslogGenSettings = minByAgeAndSize.coerceAtLeast(minByNumFiles).coerceAtMost(minByLocks)
// If retention size is specified, size takes precedence.
return minByTranslogGenSettings.coerceAtMost(minByRetentionLeasesAndSize)
}