diff --git a/services/venice-controller/src/main/java/com/linkedin/venice/controller/StoreBackupVersionCleanupService.java b/services/venice-controller/src/main/java/com/linkedin/venice/controller/StoreBackupVersionCleanupService.java index 6087922fa75..9db8a91e4f4 100644 --- a/services/venice-controller/src/main/java/com/linkedin/venice/controller/StoreBackupVersionCleanupService.java +++ b/services/venice-controller/src/main/java/com/linkedin/venice/controller/StoreBackupVersionCleanupService.java @@ -299,6 +299,16 @@ protected boolean cleanupBackupVersion(Store store, String clusterName) { return false; } + long minRetentionThreshold = store.getLatestVersionPromoteToCurrentTimestamp() + minBackupVersionCleanupDelay; + long defaultRetentionThreshold = + store.getLatestVersionPromoteToCurrentTimestamp() + defaultBackupVersionRetentionMs; + boolean pastDefaultRetention = time.getMilliseconds() > defaultRetentionThreshold; + boolean pastMinRetention = time.getMilliseconds() > minRetentionThreshold; + // We should always wait min retention before any deletion. + if (!pastMinRetention) { + return false; + } + // First, consider any versions that can be deleted (invalid status: error or killed) and are not in use List readyToBeRemovedVersions = versions.stream().filter(v -> VersionStatus.canDelete(v.getStatus())).collect(Collectors.toList()); @@ -310,16 +320,8 @@ protected boolean cleanupBackupVersion(Store store, String clusterName) { if (readyToBeRemovedVersions.isEmpty()) { int repushSourceVersion = store.getVersionOrThrow(currentVersion).getRepushSourceVersion(); boolean isCurrentVersionRepushed = repushSourceVersion > NON_EXISTING_VERSION; - long minRetentionThreshold = store.getLatestVersionPromoteToCurrentTimestamp() + minBackupVersionCleanupDelay; - long defaultRetentionThreshold = - store.getLatestVersionPromoteToCurrentTimestamp() + defaultBackupVersionRetentionMs; - boolean pastDefaultRetention = time.getMilliseconds() > defaultRetentionThreshold; - boolean pastMinRetention = time.getMilliseconds() > minRetentionThreshold; HashSet repushChainVersions = new HashSet<>(); // all versions repushed into the current version - if (!pastMinRetention) { - return false; - } readyToBeRemovedVersions = versions.stream() .sorted((v1, v2) -> Integer.compare(v2.getNumber(), v1.getNumber())) // sort in descending order .filter(v -> {