diff --git a/memory-vault/src/main/java/com/memoryvault/BackupManager.kt b/memory-vault/src/main/java/com/memoryvault/BackupManager.kt index 050178a0..19f7b975 100644 --- a/memory-vault/src/main/java/com/memoryvault/BackupManager.kt +++ b/memory-vault/src/main/java/com/memoryvault/BackupManager.kt @@ -75,6 +75,16 @@ class BackupManager(private val vaultFile: File) { backupSize = restoredSize ) } + + suspend fun cleanupOldBackups(backupDir: File, maxBackups: Int) = withContext(Dispatchers.IO) { + val backups = backupDir.listFiles { file -> + file.name.startsWith("vault_") && file.name.endsWith(".mvlt.gz") + }?.sortedByDescending { it.lastModified() } ?: return@withContext + + if (backups.size > maxBackups) { + backups.drop(maxBackups).forEach { it.delete() } + } + } } data class BackupResult( diff --git a/memory-vault/src/test/java/com/memoryvault/BackupManagerBenchmark.kt b/memory-vault/src/test/java/com/memoryvault/BackupManagerBenchmark.kt new file mode 100644 index 00000000..75217ec1 --- /dev/null +++ b/memory-vault/src/test/java/com/memoryvault/BackupManagerBenchmark.kt @@ -0,0 +1,33 @@ +package com.memoryvault + +import kotlinx.coroutines.runBlocking +import org.junit.Test +import java.io.File +import kotlin.system.measureTimeMillis + +class BackupManagerBenchmark { + + @Test + fun benchmarkCleanup() { + runBlocking { + val tempDir = File(System.getProperty("java.io.tmpdir"), "backup_benchmark") + tempDir.mkdirs() + + // Create 30000 dummy backup files + for (i in 1..30000) { + val file = File(tempDir, "vault_backup_$i.mvlt.gz") + file.createNewFile() + } + + val manager = BackupManager(File("dummy")) + + val time = measureTimeMillis { + manager.cleanupOldBackups(tempDir, 10) + } + + // Print to standard error as it might bypass gradle's output buffering + System.err.println("Baseline Cleanup Time: $time ms") + tempDir.deleteRecursively() + } + } +}