From b4e6f5bba23facfdbf77047d3f0b04936c49a058 Mon Sep 17 00:00:00 2001 From: Adam Jordens Date: Wed, 29 May 2019 15:12:56 -0700 Subject: [PATCH] fix(sql): Cleanup orphans less agressively during migration --- .../front50/migrations/StorageServiceMigrator.kt | 5 ++++- .../spinnaker/front50/model/CompositeStorageService.kt | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/front50-sql/src/main/kotlin/com/netflix/spinnaker/front50/migrations/StorageServiceMigrator.kt b/front50-sql/src/main/kotlin/com/netflix/spinnaker/front50/migrations/StorageServiceMigrator.kt index 5235ddb55..4d7343bc6 100644 --- a/front50-sql/src/main/kotlin/com/netflix/spinnaker/front50/migrations/StorageServiceMigrator.kt +++ b/front50-sql/src/main/kotlin/com/netflix/spinnaker/front50/migrations/StorageServiceMigrator.kt @@ -28,6 +28,7 @@ import kotlinx.coroutines.runBlocking import org.slf4j.LoggerFactory import org.slf4j.MDC import org.springframework.scheduling.annotation.Scheduled +import java.util.concurrent.TimeUnit import kotlin.system.measureTimeMillis class StorageServiceMigrator( @@ -49,7 +50,9 @@ class StorageServiceMigrator( val targetObjectKeys = target.listObjectKeys(objectType) val deletableObjectKeys = targetObjectKeys.filter { e -> - !sourceObjectKeys.containsKey(e.key) + // only cleanup "orphans" if they don't exist in source _AND_ they are at least five minutes old + // (accounts for edge cases around eventual consistency reads in s3)9 + !sourceObjectKeys.containsKey(e.key) && (e.value + TimeUnit.MINUTES.toMillis(5)) < System.currentTimeMillis() } if (!deletableObjectKeys.isEmpty()) { diff --git a/front50-sql/src/main/kotlin/com/netflix/spinnaker/front50/model/CompositeStorageService.kt b/front50-sql/src/main/kotlin/com/netflix/spinnaker/front50/model/CompositeStorageService.kt index aa7926ae7..f8319eb60 100644 --- a/front50-sql/src/main/kotlin/com/netflix/spinnaker/front50/model/CompositeStorageService.kt +++ b/front50-sql/src/main/kotlin/com/netflix/spinnaker/front50/model/CompositeStorageService.kt @@ -44,6 +44,14 @@ class CompositeStorageService( .withTag("class", previous.javaClass.simpleName) ) + override fun supportsEventing(objectType: ObjectType): Boolean { + if (!isPrimaryReadEnabled()) { + return true + } + + return objectType == ObjectType.ENTITY_TAGS + } + @Scheduled(fixedDelay = 60000L) fun status() { log.debug(