Skip to content
This repository was archived by the owner on Oct 2, 2025. It is now read-only.

Commit 4149130

Browse files
srekapallicfieber
authored andcommitted
feat(PostgreSQL DB Storage): Added support for Postgres. Changes incl… (#635)
* feat(PostgreSQL DB Storage): Added support for Postgres. Changes include liquibase changesets to target postgres with test running against both MySQL & Postgres in test containers * Fix jdbc url for postgres
1 parent 606b3af commit 4149130

File tree

10 files changed

+453
-182
lines changed

10 files changed

+453
-182
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
dependencies {
2+
runtimeOnly "org.postgresql:postgresql:42.2.8"
3+
}

front50-sql/README.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
## Configuring SQL store for front50
2+
3+
#### MySQL:
4+
5+
```yaml
6+
sql:
7+
enabled: true
8+
baseUrl: jdbc:mysql://localhost:3306/front50
9+
connectionPools:
10+
default:
11+
jdbcUrl: ${sql.baseUrl}?useSSL=false&serverTimezone=UTC
12+
user:
13+
password:
14+
migration:
15+
jdbcUrl: ${sql.baseUrl}?useSSL=false&serverTimezone=UTC
16+
user:
17+
password:
18+
```
19+
20+
#### PostgreSQL:
21+
```yaml
22+
sql:
23+
enabled: true
24+
baseUrl: jdbc:postgresql://localhost:5432/front50
25+
connectionPools:
26+
default:
27+
jdbcUrl: ${sql.baseUrl}
28+
dialect: POSTGRES
29+
user:
30+
password:
31+
migration:
32+
jdbcUrl: ${sql.baseUrl}
33+
user:
34+
password:
35+
```

front50-sql/front50-sql.gradle

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ dependencies {
44
implementation project(":front50-core")
55
if (!rootProject.hasProperty("excludeSqlDrivers")) {
66
runtimeOnly project(":front50-sql-mysql")
7+
runtimeOnly project(":front50-sql-postgres")
78
}
89

910
implementation "com.netflix.spinnaker.kork:kork-sql"
@@ -16,10 +17,15 @@ dependencies {
1617
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core"
1718

1819
testImplementation "io.mockk:mockk"
19-
testImplementation "mysql:mysql-connector-java"
2020
testImplementation "dev.minutest:minutest"
21-
testImplementation "org.testcontainers:mysql"
2221
testImplementation "org.junit.jupiter:junit-jupiter-api"
22+
23+
testImplementation "mysql:mysql-connector-java"
24+
testImplementation "org.testcontainers:mysql"
25+
26+
testImplementation "org.testcontainers:postgresql"
27+
testImplementation "org.postgresql:postgresql"
28+
2329
}
2430

2531
test {

front50-sql/src/main/kotlin/com/netflix/spinnaker/front50/model/SqlStorageService.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,8 @@ class SqlStorageService(
168168
*insertPairs.keys.map { DSL.field(it) }.toTypedArray()
169169
)
170170
.values(insertPairs.values)
171-
.onDuplicateKeyUpdate()
171+
.onConflict(DSL.field("id", String::class.java))
172+
.doUpdate()
172173
.set(updatePairs.mapKeys { DSL.field(it.key) })
173174
.execute()
174175
} catch (e: SQLDialectNotSupportedException) {

front50-sql/src/main/resources/db/changelog-master.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,9 @@ databaseChangeLog:
3535
- include:
3636
file: changelog/20190530-add-is-deleted-indexes.yml
3737
relativeToChangelogFile: true
38+
- include:
39+
file: changelog/20190530-add-is-deleted-indexes-postgres.yml
40+
relativeToChangelogFile: true
41+
- include:
42+
file: changelog/20191112-modify-char-columns-postgres.yml
43+
relativeToChangelogFile: true
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
databaseChangeLog:
2+
- changeSet:
3+
preConditions:
4+
onFail: CONTINUE
5+
dbms:
6+
type: postgresql
7+
id: create-indexes-postgresql
8+
author: srekapalli
9+
changes:
10+
- createIndex:
11+
indexName: is_deleted_applications_idx
12+
tableName: applications
13+
columns:
14+
- column:
15+
name: is_deleted
16+
- createIndex:
17+
indexName: is_deleted_application_permissions_idx
18+
tableName: application_permissions
19+
columns:
20+
- column:
21+
name: is_deleted
22+
- createIndex:
23+
indexName: is_deleted_deliveries_idx
24+
tableName: deliveries
25+
columns:
26+
- column:
27+
name: is_deleted
28+
- createIndex:
29+
indexName: is_deleted_entity_tags_idx
30+
tableName: entity_tags
31+
columns:
32+
- column:
33+
name: is_deleted
34+
- createIndex:
35+
indexName: is_deleted_notifications_idx
36+
tableName: notifications
37+
columns:
38+
- column:
39+
name: is_deleted
40+
- createIndex:
41+
indexName: is_deleted_pipeline_strategies_idx
42+
tableName: pipeline_strategies
43+
columns:
44+
- column:
45+
name: is_deleted
46+
- createIndex:
47+
indexName: is_deleted_pipeline_templates_idx
48+
tableName: pipeline_templates
49+
columns:
50+
- column:
51+
name: is_deleted
52+
- createIndex:
53+
indexName: is_deleted_pipelines_idx
54+
tableName: pipelines
55+
columns:
56+
- column:
57+
name: is_deleted
58+
- createIndex:
59+
indexName: is_deleted_projects_idx
60+
tableName: projects
61+
columns:
62+
- column:
63+
name: is_deleted
64+
- createIndex:
65+
indexName: is_deleted_service_accounts_idx
66+
tableName: service_accounts
67+
columns:
68+
- column:
69+
name: is_deleted
70+
- createIndex:
71+
indexName: is_deleted_snapshots_idx
72+
tableName: snapshots
73+
columns:
74+
- column:
75+
name: is_deleted
76+
rollback:
77+
- dropIndex:
78+
indexName: is_deleted_applications_idx
79+
tableName: applications
80+
- dropIndex:
81+
indexName: is_deleted_application_permissions_idx
82+
tableName: application_permissions
83+
- dropIndex:
84+
indexName: is_deleted_deliveries_idx
85+
tableName: deliveries
86+
- dropIndex:
87+
indexName: is_deleted_entity_tags_idx
88+
tableName: entity_tags
89+
- dropIndex:
90+
indexName: is_deleted_notifications_idx
91+
tableName: notifications
92+
- dropIndex:
93+
indexName: is_deleted_pipeline_strategies_idx
94+
tableName: pipeline_strategies
95+
- dropIndex:
96+
indexName: is_deleted_pipeline_templates_idx
97+
tableName: pipeline_templates
98+
- dropIndex:
99+
indexName: is_deleted_pipelines_idx
100+
tableName: pipelines
101+
- dropIndex:
102+
indexName: is_deleted_projects_idx
103+
tableName: projects
104+
- dropIndex:
105+
indexName: is_deleted_service_accounts_idx
106+
tableName: service_accounts
107+
- dropIndex:
108+
indexName: is_deleted_snapshots_idx
109+
tableName: snapshots

front50-sql/src/main/resources/db/changelog/20190530-add-is-deleted-indexes.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
databaseChangeLog:
22
- changeSet:
3+
preConditions:
4+
onFail: CONTINUE
5+
dbms:
6+
type: mysql
37
id: create-indexes
48
author: ajordens
59
changes:
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
databaseChangeLog:
2+
- changeSet:
3+
preConditions:
4+
onFail: CONTINUE
5+
dbms:
6+
type: postgresql
7+
id: modify_id_col_from_char_to_varchar
8+
author: srekapalli
9+
changes:
10+
- modifyDataType:
11+
columnName: id
12+
newDataType: varchar(255)
13+
tableName: application_permissions
14+
- modifyDataType:
15+
columnName: id
16+
newDataType: varchar(255)
17+
tableName: application_permissions_history
18+
- modifyDataType:
19+
columnName: id
20+
newDataType: varchar(255)
21+
tableName: applications
22+
- modifyDataType:
23+
columnName: id
24+
newDataType: varchar(255)
25+
tableName: applications_history
26+
- modifyDataType:
27+
columnName: id
28+
newDataType: varchar(255)
29+
tableName: deliveries
30+
- modifyDataType:
31+
columnName: id
32+
newDataType: varchar(255)
33+
tableName: deliveries_history
34+
- modifyDataType:
35+
columnName: id
36+
newDataType: varchar(255)
37+
tableName: entity_tags
38+
- modifyDataType:
39+
columnName: id
40+
newDataType: varchar(255)
41+
tableName: notifications
42+
- modifyDataType:
43+
columnName: id
44+
newDataType: varchar(255)
45+
tableName: notifications_history
46+
- modifyDataType:
47+
columnName: id
48+
newDataType: varchar(255)
49+
tableName: pipeline_strategies
50+
- modifyDataType:
51+
columnName: id
52+
newDataType: varchar(255)
53+
tableName: pipeline_strategies_history
54+
- modifyDataType:
55+
columnName: id
56+
newDataType: varchar(255)
57+
tableName: pipeline_templates
58+
- modifyDataType:
59+
columnName: id
60+
newDataType: varchar(255)
61+
tableName: pipeline_templates_history
62+
- modifyDataType:
63+
columnName: id
64+
newDataType: varchar(255)
65+
tableName: pipelines
66+
- modifyDataType:
67+
columnName: id
68+
newDataType: varchar(255)
69+
tableName: pipelines_history
70+
- modifyDataType:
71+
columnName: id
72+
newDataType: varchar(255)
73+
tableName: projects
74+
- modifyDataType:
75+
columnName: id
76+
newDataType: varchar(255)
77+
tableName: projects_history
78+
- modifyDataType:
79+
columnName: id
80+
newDataType: varchar(255)
81+
tableName: service_accounts
82+
- modifyDataType:
83+
columnName: id
84+
newDataType: varchar(255)
85+
tableName: service_accounts_history
86+
- modifyDataType:
87+
columnName: id
88+
newDataType: varchar(255)
89+
tableName: snapshots

0 commit comments

Comments
 (0)