Skip to content

Commit d7ae9f5

Browse files
Restore storage test [updated] (#5350)
* Restore storage test * Add groups search test * Merged changes from #5280 and fixed problems caused by storage changes * Code formatting * Fix multiple cascade FK limitation in mssql * Fixes for mssql + outbox * Fixes for the mssql storage variant and for 3.0.1 patch scripts * Fix patch scripts --------- Co-authored-by: Carles Arnal <carlesarnal92@gmail.com>
1 parent 948b31c commit d7ae9f5

File tree

11 files changed

+1336
-1121
lines changed

11 files changed

+1336
-1121
lines changed

app/src/main/java/io/apicurio/registry/storage/impl/sql/AbstractSqlRegistryStorage.java

+12
Original file line numberDiff line numberDiff line change
@@ -1681,6 +1681,9 @@ public VersionSearchResultsDto searchVersions(Set<SearchFilter> filters, OrderBy
16811681
case globalId:
16821682
orderByQuery.append(" ORDER BY v.globalId");
16831683
break;
1684+
case groupId:
1685+
orderByQuery.append(" ORDER BY v.groupId");
1686+
break;
16841687
case version:
16851688
orderByQuery.append(" ORDER BY v.version");
16861689
break;
@@ -2686,6 +2689,8 @@ public void deleteAllUserData() {
26862689

26872690
handle.createUpdate(sqlStatements.deleteAllVersionComments()).execute();
26882691

2692+
handle.createUpdate(sqlStatements.deleteAllBranchVersions()).execute();
2693+
26892694
handle.createUpdate(sqlStatements.deleteAllBranches()).execute();
26902695

26912696
handle.createUpdate(sqlStatements.deleteAllVersions()).execute();
@@ -2849,6 +2854,7 @@ public GroupSearchResultsDto searchGroups(Set<SearchFilter> filters, OrderBy ord
28492854
where.append(" AND l.groupId = g.groupId)");
28502855
break;
28512856
default:
2857+
28522858
break;
28532859
}
28542860
where.append(")");
@@ -3689,6 +3695,12 @@ public void deleteBranch(GA ga, BranchId branchId) {
36893695
}
36903696

36913697
handles.withHandleNoException(handle -> {
3698+
// First delete all branch versions (only needed for "mssql" due to cascade limitations there).
3699+
if (isMssql()) {
3700+
handle.createUpdate(sqlStatements.deleteBranchVersions()).bind(0, ga.getRawGroupId())
3701+
.bind(1, ga.getRawArtifactId()).bind(2, branchId.getRawBranchId()).execute();
3702+
}
3703+
36923704
var affected = handle.createUpdate(sqlStatements.deleteBranch()).bind(0, ga.getRawGroupId())
36933705
.bind(1, ga.getRawArtifactId()).bind(2, branchId.getRawBranchId()).execute();
36943706

app/src/main/java/io/apicurio/registry/storage/impl/sql/CommonSqlStatements.java

+7-8
Original file line numberDiff line numberDiff line change
@@ -1161,6 +1161,11 @@ public String deleteBranch() {
11611161
return "DELETE FROM branches WHERE groupId = ? AND artifactId = ? AND branchId = ?";
11621162
}
11631163

1164+
@Override
1165+
public String deleteAllBranchVersions() {
1166+
return "DELETE FROM branch_versions";
1167+
}
1168+
11641169
@Override
11651170
public String deleteAllBranches() {
11661171
return "DELETE FROM branches";
@@ -1198,17 +1203,11 @@ public String deleteGroupRules() {
11981203

11991204
@Override
12001205
public String createOutboxEvent() {
1201-
return """
1202-
INSERT INTO outbox (id, aggregatetype, aggregateid, type, payload) \
1203-
VALUES (?, ?, ?, ?, ?::jsonb)\
1204-
""";
1206+
return "INSERT INTO outbox (id, aggregatetype, aggregateid, type, payload) VALUES (?, ?, ?, ?, ?)";
12051207
}
12061208

12071209
@Override
12081210
public String deleteOutboxEvent() {
1209-
return """
1210-
DELETE FROM outbox o \
1211-
WHERE o.id= ?\
1212-
""";
1211+
return "DELETE FROM outbox WHERE id = ?";
12131212
}
12141213
}

app/src/main/java/io/apicurio/registry/storage/impl/sql/PostgreSQLSqlStatements.java

+9
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,13 @@ public String createDataSnapshot() {
7878
public String restoreFromSnapshot() {
7979
throw new IllegalStateException("Restoring from snapshot is not supported for Postgresql storage");
8080
}
81+
82+
@Override
83+
public String createOutboxEvent() {
84+
return """
85+
INSERT INTO outbox (id, aggregatetype, aggregateid, type, payload)
86+
VALUES (?, ?, ?, ?, ?::jsonb)
87+
""";
88+
}
89+
8190
}

app/src/main/java/io/apicurio/registry/storage/impl/sql/SQLServerSqlStatements.java

+12-11
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ public String dbType() {
2525
*/
2626
@Override
2727
public boolean isPrimaryKeyViolation(Exception error) {
28-
return error.getMessage().contains("Violation of PRIMARY KEY constraint");
28+
return error.getMessage().contains("Violation of PRIMARY KEY constraint")
29+
|| error.getMessage().contains("Violation of UNIQUE KEY constraint");
2930
}
3031

3132
/**
@@ -52,7 +53,7 @@ public String upsertBranch() {
5253
ON (target.groupId = source.groupId AND target.artifactId = source.artifactId AND target.branchId = source.branchId)
5354
WHEN NOT MATCHED THEN
5455
INSERT (groupId, artifactId, branchId, description, systemDefined, owner, createdOn, modifiedBy, modifiedOn)
55-
VALUES (source.groupId, source.artifactId, source.branchId, source.description, source.systemDefined, source.owner, source.createdOn, source.modifiedBy, source.modifiedOn)
56+
VALUES (source.groupId, source.artifactId, source.branchId, source.description, source.systemDefined, source.owner, source.createdOn, source.modifiedBy, source.modifiedOn);
5657
""";
5758
}
5859

@@ -70,7 +71,7 @@ public String getNextSequenceValue() {
7071
WHEN NOT MATCHED THEN
7172
INSERT (seqName, seqValue)
7273
VALUES (source.seqName, 1)
73-
OUTPUT INSERTED.seqValue
74+
OUTPUT INSERTED.seqValue;
7475
""";
7576
}
7677

@@ -88,7 +89,7 @@ public String resetSequenceValue() {
8889
WHEN NOT MATCHED THEN
8990
INSERT (seqName, seqValue)
9091
VALUES (source.seqName, source.seqValue)
91-
OUTPUT INSERTED.seqValue
92+
OUTPUT INSERTED.seqValue;
9293
""";
9394
}
9495

@@ -111,17 +112,17 @@ public String selectGroups() {
111112

112113
@Override
113114
public String selectBranchTip() {
114-
return "SELECT ab.groupId, ab.artifactId, ab.version FROM artifact_branches ab "
115-
+ "WHERE ab.groupId = ? AND ab.artifactId = ? AND ab.branchId = ? "
116-
+ "ORDER BY ab.branchOrder DESC OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY";
115+
return "SELECT bv.groupId, bv.artifactId, bv.version FROM branch_versions bv "
116+
+ "WHERE bv.groupId = ? AND bv.artifactId = ? AND bv.branchId = ? "
117+
+ "ORDER BY bv.branchOrder DESC OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY";
117118
}
118119

119120
@Override
120121
public String selectBranchTipFilteredByState() {
121-
return "SELECT ab.groupId, ab.artifactId, ab.version FROM artifact_branches ab "
122-
+ "JOIN versions v ON ab.groupId = v.groupId AND ab.artifactId = v.artifactId AND ab.version = v.version "
123-
+ "WHERE ab.groupId = ? AND ab.artifactId = ? AND ab.branchId = ? AND v.state IN (?) "
124-
+ "ORDER BY ab.branchOrder DESC OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY";
122+
return "SELECT bv.groupId, bv.artifactId, bv.version FROM branch_versions bv "
123+
+ "JOIN versions v ON bv.groupId = v.groupId AND bv.artifactId = v.artifactId AND bv.version = v.version "
124+
+ "WHERE bv.groupId = ? AND bv.artifactId = ? AND bv.branchId = ? AND v.state IN (?) "
125+
+ "ORDER BY bv.branchOrder DESC OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY";
125126
}
126127

127128
@Override

app/src/main/java/io/apicurio/registry/storage/impl/sql/SqlStatements.java

+2
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,8 @@ public interface SqlStatements {
634634

635635
public String deleteBranch();
636636

637+
public String deleteAllBranchVersions();
638+
637639
public String deleteAllBranches();
638640

639641
public String deleteVersionFromBranch();

app/src/main/resources/io/apicurio/registry/storage/impl/sql/mssql.ddl

+2-2
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,11 @@ ALTER TABLE branches ADD CONSTRAINT FK_branches_1 FOREIGN KEY (groupId, artifact
9797

9898
CREATE TABLE branch_versions (groupId NVARCHAR(512) NOT NULL, artifactId NVARCHAR(512) NOT NULL, branchId NVARCHAR(256) NOT NULL, branchOrder INT NOT NULL, version NVARCHAR(256) NOT NULL);
9999
ALTER TABLE branch_versions ADD PRIMARY KEY (groupId, artifactId, branchId, version);
100-
ALTER TABLE branch_versions ADD CONSTRAINT FK_branch_versions_1 FOREIGN KEY (groupId, artifactId, branchId) REFERENCES branches(groupId, artifactId, branchId) ON DELETE CASCADE;
100+
ALTER TABLE branch_versions ADD CONSTRAINT FK_branch_versions_1 FOREIGN KEY (groupId, artifactId, branchId) REFERENCES branches(groupId, artifactId, branchId);
101101
ALTER TABLE branch_versions ADD CONSTRAINT FK_branch_versions_2 FOREIGN KEY (groupId, artifactId, version) REFERENCES versions(groupId, artifactId, version) ON DELETE CASCADE;
102102
CREATE INDEX IDX_branch_versions_1 ON branch_versions(groupId, artifactId, branchId, branchOrder);
103103
CREATE INDEX IDX_branch_versions_2 ON branch_versions(branchId);
104104
CREATE INDEX IDX_branch_versions_3 ON branch_versions(branchOrder);
105105

106-
CREATE TABLE outbox (id VARCHAR(128) NOT NULL, aggregatetype VARCHAR(255) NOT NULL, aggregateid VARCHAR(255) NOT NULL, type VARCHAR(255) NOT NULL, payload JSONB NOT NULL);
106+
CREATE TABLE outbox (id VARCHAR(128) NOT NULL, aggregatetype VARCHAR(255) NOT NULL, aggregateid VARCHAR(255) NOT NULL, type VARCHAR(255) NOT NULL, payload TEXT NOT NULL);
107107
ALTER TABLE outbox ADD PRIMARY KEY (id);
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
-- *********************************************************************
22
-- DDL for the Apicurio Registry - Database: H2
33
-- Upgrade Script from 100 to 101
4-
-- *********************************************************************
4+
-- *********************************************************************
5+
6+
UPDATE apicurio SET propValue = 101 WHERE propName = 'db_version';

app/src/main/resources/io/apicurio/registry/storage/impl/sql/upgrades/101/mssql.upgrade.ddl

+4-2
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,7 @@
33
-- Upgrade Script from 100 to 101
44
-- *********************************************************************
55

6-
CREATE TABLE outbox (id VARCHAR(128) NOT NULL, aggregatetype VARCHAR(255) NOT NULL, aggregateid VARCHAR(255) NOT NULL, type VARCHAR(255) NOT NULL, payload JSONB NOT NULL);
7-
ALTER TABLE outbox ADD PRIMARY KEY (id);
6+
UPDATE apicurio SET propValue = 101 WHERE propName = 'db_version';
7+
8+
CREATE TABLE outbox (id VARCHAR(128) NOT NULL, aggregatetype VARCHAR(255) NOT NULL, aggregateid VARCHAR(255) NOT NULL, type VARCHAR(255) NOT NULL, payload TEXT NOT NULL);
9+
ALTER TABLE outbox ADD PRIMARY KEY (id);

app/src/main/resources/io/apicurio/registry/storage/impl/sql/upgrades/101/postgresql.upgrade.ddl

+3-1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,7 @@
33
-- Upgrade Script from 100 to 101
44
-- *********************************************************************
55

6+
UPDATE apicurio SET propValue = 101 WHERE propName = 'db_version';
7+
68
CREATE TABLE outbox (id VARCHAR(128) NOT NULL, aggregatetype VARCHAR(255) NOT NULL, aggregateid VARCHAR(255) NOT NULL, type VARCHAR(255) NOT NULL, payload JSONB NOT NULL);
7-
ALTER TABLE outbox ADD PRIMARY KEY (id);
9+
ALTER TABLE outbox ADD PRIMARY KEY (id);

0 commit comments

Comments
 (0)