Skip to content

Commit

Permalink
feat(sql): preparing sql backend for upstream
Browse files Browse the repository at this point in the history
  • Loading branch information
ajordens committed Jul 8, 2019
1 parent 4f6d7aa commit 51e8803
Show file tree
Hide file tree
Showing 13 changed files with 69 additions and 469 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ buildscript {
}
dependencies {
classpath "com.netflix.spinnaker.gradle:spinnaker-dev-plugin:$spinnakerGradleVersion"
classpath "com.netflix.nebula:nebula-kotlin-plugin:1.3.10"
if (Boolean.valueOf(enablePublishing)) {
classpath "com.netflix.spinnaker.gradle:spinnaker-gradle-project:$spinnakerGradleVersion"
// TODO: nebula-publishing-plugin version override should be removed as soon as spinnaker-gradle-project is updated
Expand Down
5 changes: 2 additions & 3 deletions front50-sql/front50-sql.gradle
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
apply from: "$rootDir/gradle/kotlin.gradle"

dependencies {
implementation project(":front50-core")
implementation project(":front50-sql-mysql")

implementation "com.netflix.spinnaker.front50:front50-core"

implementation "com.netflix.spinnaker.kork:kork-sql"
implementation "com.netflix.spinnaker.kork:kork-exceptions"

Expand All @@ -17,7 +16,7 @@ dependencies {
implementation("org.jooq:jooq:3.9.6"){
force = true
}

testImplementation "io.mockk:mockk"
testImplementation "mysql:mysql-connector-java"
testImplementation "dev.minutest:minutest"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,12 @@ class CompositeStorageServiceConfiguration() {
@Bean
@Primary
@ConditionalOnProperty("spinnaker.migration.compositeStorageService.enabled")
fun compositeStorageService(dynamicConfigService: DynamicConfigService,
registry: Registry,
properties: StorageServiceMigratorConfigurationProperties,
storageServices: List<StorageService>) =
fun compositeStorageService(
dynamicConfigService: DynamicConfigService,
registry: Registry,
properties: StorageServiceMigratorConfigurationProperties,
storageServices: List<StorageService>
) =
CompositeStorageService(
dynamicConfigService,
registry,
Expand All @@ -48,11 +50,13 @@ class CompositeStorageServiceConfiguration() {

@Bean
@ConditionalOnProperty("spinnaker.migration.compositeStorageService.enabled")
fun storageServiceMigrator(dynamicConfigService: DynamicConfigService,
registry: Registry,
properties: StorageServiceMigratorConfigurationProperties,
storageServices: List<StorageService>,
entityTagsDAO : EntityTagsDAO) =
fun storageServiceMigrator(
dynamicConfigService: DynamicConfigService,
registry: Registry,
properties: StorageServiceMigratorConfigurationProperties,
storageServices: List<StorageService>,
entityTagsDAO: EntityTagsDAO
) =
StorageServiceMigrator(
dynamicConfigService,
registry,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,12 @@ import java.time.Clock
class SqlConfiguration : CommonStorageServiceDAOConfig() {

@Bean
fun sqlStorageService(objectMapper: ObjectMapper,
registry: Registry,
jooq: DSLContext,
sqlProperties: SqlProperties): SqlStorageService =
fun sqlStorageService(
objectMapper: ObjectMapper,
registry: Registry,
jooq: DSLContext,
sqlProperties: SqlProperties
): SqlStorageService =
SqlStorageService(
objectMapper,
registry,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,9 +174,11 @@ class CompositeStorageService(
return objectKeys
}

override fun <T : Timestamped?> listObjectVersions(objectType: ObjectType?,
objectKey: String?,
maxResults: Int): MutableCollection<T> {
override fun <T : Timestamped?> listObjectVersions(
objectType: ObjectType?,
objectKey: String?,
maxResults: Int
): MutableCollection<T> {
var exception: Exception? = null

if (isPrimaryReadEnabled()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,34 @@ package com.netflix.spinnaker.front50.model
import com.fasterxml.jackson.databind.ObjectMapper
import com.netflix.spectator.api.Registry
import com.netflix.spinnaker.front50.exception.NotFoundException
import com.netflix.spinnaker.front50.model.ObjectType.APPLICATION
import com.netflix.spinnaker.front50.model.ObjectType.APPLICATION_PERMISSION
import com.netflix.spinnaker.front50.model.ObjectType.DELIVERY
import com.netflix.spinnaker.front50.model.ObjectType.ENTITY_TAGS
import com.netflix.spinnaker.front50.model.ObjectType.NOTIFICATION
import com.netflix.spinnaker.front50.model.ObjectType.PIPELINE
import com.netflix.spinnaker.front50.model.ObjectType.PIPELINE_TEMPLATE
import com.netflix.spinnaker.front50.model.ObjectType.PROJECT
import com.netflix.spinnaker.front50.model.ObjectType.SERVICE_ACCOUNT
import com.netflix.spinnaker.front50.model.ObjectType.SNAPSHOT
import com.netflix.spinnaker.front50.model.ObjectType.STRATEGY
import com.netflix.spinnaker.front50.model.sql.DefaultTableDefinition
import com.netflix.spinnaker.front50.model.sql.DeliveryTableDefinition
import com.netflix.spinnaker.front50.model.sql.PipelineStrategyTableDefinition
import com.netflix.spinnaker.front50.model.sql.PipelineTableDefinition
import com.netflix.spinnaker.front50.model.sql.ProjectTableDefinition
import com.netflix.spinnaker.front50.model.sql.transactional
import com.netflix.spinnaker.front50.model.sql.withRetry
import com.netflix.spinnaker.kork.sql.config.SqlRetryProperties
import com.netflix.spinnaker.security.AuthenticatedRequest
import org.jooq.DSLContext
import org.jooq.exception.SQLDialectNotSupportedException
import org.jooq.impl.DSL
import org.jooq.impl.DSL.*
import org.jooq.impl.DSL.field
import org.jooq.impl.DSL.max
import org.jooq.impl.DSL.table
import org.slf4j.LoggerFactory
import java.time.Clock

import com.netflix.spinnaker.front50.model.ObjectType.*
import com.netflix.spinnaker.front50.model.sql.*
import com.netflix.spinnaker.kork.sql.config.SqlRetryProperties
import org.jooq.exception.SQLDialectNotSupportedException
import kotlin.system.measureTimeMillis

class SqlStorageService(
Expand Down Expand Up @@ -260,9 +277,11 @@ class SqlStorageService(
return objectKeys
}

override fun <T : Timestamped> listObjectVersions(objectType: ObjectType,
objectKey: String,
maxResults: Int): List<T> {
override fun <T : Timestamped> listObjectVersions(
objectType: ObjectType,
objectKey: String,
maxResults: Int
): List<T> {
if (maxResults == 1) {
// will throw NotFoundException if object does not exist
return mutableListOf(loadObject(objectType, objectKey))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ package com.netflix.spinnaker.front50.model.sql
import com.netflix.spinnaker.kork.core.RetrySupport
import com.netflix.spinnaker.kork.sql.config.RetryProperties
import org.jooq.DSLContext
import org.jooq.Record
import org.jooq.impl.DSL

internal val retrySupport = RetrySupport()
Expand All @@ -43,4 +42,3 @@ internal fun <T> DSLContext.withRetry(retryProperties: RetryProperties, fn: (DSL
fn(this)
}, retryProperties.maxRetries, retryProperties.backoffMs, false)
}

Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,12 @@ open class DefaultTableDefinition(
)
}

fun getHistoryPairs(objectMapper: ObjectMapper,
clock: Clock,
objectKey: String,
item: Timestamped): Map<String, Any> {
fun getHistoryPairs(
objectMapper: ObjectMapper,
clock: Clock,
objectKey: String,
item: Timestamped
): Map<String, Any> {
val objectAsString = objectMapper.writeValueAsString(item)

val signature = Hashing.murmur3_128().newHasher().putString(objectAsString, UTF_8).hash().toString()
Expand Down
Loading

0 comments on commit 51e8803

Please sign in to comment.