Skip to content

Commit 042e88a

Browse files
EricWittmannclaude
andauthored
fix: Add primary keys to label tables for MySQL InnoDB Cluster compatibility (#6867)
Adds composite primary keys to three label tables (group_labels, artifact_labels, and version_labels) across all database types (MySQL, PostgreSQL, H2, and MSSQL). MySQL InnoDB Cluster requires all tables to have primary keys defined. The missing primary keys prevented cluster initialization from completing. The primary keys are based on the natural keys of each table: - group_labels: (groupId, labelKey) - artifact_labels: (groupId, artifactId, labelKey) - version_labels: (globalId, labelKey) This change only affects new installations. Existing deployments will continue to function without these primary keys, as they are not functionally required by the application logic. Fixes #6865 Co-authored-by: Claude <[email protected]>
1 parent ddda200 commit 042e88a

File tree

4 files changed

+12
-0
lines changed

4 files changed

+12
-0
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ CREATE TABLE groups (groupId VARCHAR(512) NOT NULL, description VARCHAR(1024), a
3737
ALTER TABLE groups ADD PRIMARY KEY (groupId);
3838

3939
CREATE TABLE group_labels (groupId VARCHAR(512) NOT NULL, labelKey VARCHAR(256) NOT NULL, labelValue VARCHAR(512));
40+
ALTER TABLE group_labels ADD PRIMARY KEY (groupId, labelKey);
4041
ALTER TABLE group_labels ADD CONSTRAINT FK_glabels_1 FOREIGN KEY (groupId) REFERENCES groups(groupId) ON DELETE CASCADE;
4142
CREATE INDEX IDX_glabels_1 ON group_labels(labelKey);
4243
CREATE INDEX IDX_glabels_2 ON group_labels(labelValue);
@@ -54,6 +55,7 @@ CREATE INDEX IDX_artifacts_3 ON artifacts(name);
5455
CREATE INDEX IDX_artifacts_4 ON artifacts(description);
5556

5657
CREATE TABLE artifact_labels (groupId VARCHAR(512) NOT NULL, artifactId VARCHAR(512) NOT NULL, labelKey VARCHAR(256) NOT NULL, labelValue VARCHAR(512));
58+
ALTER TABLE artifact_labels ADD PRIMARY KEY (groupId, artifactId, labelKey);
5759
ALTER TABLE artifact_labels ADD CONSTRAINT FK_alabels_1 FOREIGN KEY (groupId, artifactId) REFERENCES artifacts(groupId, artifactId) ON DELETE CASCADE;
5860
CREATE INDEX IDX_alabels_1 ON artifact_labels(labelKey);
5961
CREATE INDEX IDX_alabels_2 ON artifact_labels(labelValue);
@@ -81,6 +83,7 @@ CREATE INDEX IDX_versions_6 ON versions(createdOn);
8183
CREATE HASH INDEX IDX_versions_7 ON versions(contentId);
8284

8385
CREATE TABLE version_labels (globalId BIGINT NOT NULL, labelKey VARCHAR(256) NOT NULL, labelValue VARCHAR(512));
86+
ALTER TABLE version_labels ADD PRIMARY KEY (globalId, labelKey);
8487
ALTER TABLE version_labels ADD CONSTRAINT FK_vlabels_1 FOREIGN KEY (globalId) REFERENCES versions(globalId) ON DELETE CASCADE;
8588
CREATE INDEX IDX_vlabels_1 ON version_labels(labelKey);
8689
CREATE INDEX IDX_vlabels_2 ON version_labels(labelValue);

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ CREATE TABLE groups (groupId NVARCHAR(512) NOT NULL, description NVARCHAR(1024),
3737
ALTER TABLE groups ADD PRIMARY KEY (groupId);
3838

3939
CREATE TABLE group_labels (groupId NVARCHAR(512) NOT NULL, labelKey NVARCHAR(256) NOT NULL, labelValue NVARCHAR(512));
40+
ALTER TABLE group_labels ADD PRIMARY KEY (groupId, labelKey);
4041
ALTER TABLE group_labels ADD CONSTRAINT FK_glabels_1 FOREIGN KEY (groupId) REFERENCES groups(groupId) ON DELETE CASCADE;
4142
CREATE INDEX IDX_glabels_1 ON group_labels(labelKey);
4243
CREATE INDEX IDX_glabels_2 ON group_labels(labelValue);
@@ -54,6 +55,7 @@ CREATE INDEX IDX_artifacts_3 ON artifacts(name);
5455
-- CREATE INDEX IDX_artifacts_4 ON artifacts(description);
5556

5657
CREATE TABLE artifact_labels (groupId NVARCHAR(512) NOT NULL, artifactId NVARCHAR(512) NOT NULL, labelKey NVARCHAR(256) NOT NULL, labelValue NVARCHAR(512));
58+
ALTER TABLE artifact_labels ADD PRIMARY KEY (groupId, artifactId, labelKey);
5759
ALTER TABLE artifact_labels ADD CONSTRAINT FK_alabels_1 FOREIGN KEY (groupId, artifactId) REFERENCES artifacts(groupId, artifactId) ON DELETE CASCADE;
5860
CREATE INDEX IDX_alabels_1 ON artifact_labels(labelKey);
5961
CREATE INDEX IDX_alabels_2 ON artifact_labels(labelValue);
@@ -81,6 +83,7 @@ CREATE INDEX IDX_versions_6 ON versions(createdOn);
8183
CREATE INDEX IDX_versions_7 ON versions(contentId);
8284

8385
CREATE TABLE version_labels (globalId BIGINT NOT NULL, labelKey NVARCHAR(256) NOT NULL, labelValue NVARCHAR(512));
86+
ALTER TABLE version_labels ADD PRIMARY KEY (globalId, labelKey);
8487
ALTER TABLE version_labels ADD CONSTRAINT FK_vlabels_1 FOREIGN KEY (globalId) REFERENCES versions(globalId) ON DELETE CASCADE;
8588
CREATE INDEX IDX_vlabels_1 ON version_labels(labelKey);
8689
CREATE INDEX IDX_vlabels_2 ON version_labels(labelValue);

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ CREATE TABLE group_labels (
8484
labelKey VARCHAR(256) NOT NULL,
8585
labelValue VARCHAR(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
8686
) DEFAULT CHARACTER SET ascii COLLATE ascii_general_ci;
87+
ALTER TABLE group_labels ADD PRIMARY KEY (groupId, labelKey);
8788
ALTER TABLE group_labels ADD CONSTRAINT FK_glabels_1 FOREIGN KEY (groupId) REFERENCES `groups` (groupId) ON DELETE CASCADE;
8889
CREATE INDEX IDX_glabels_1 ON group_labels (labelKey);
8990
CREATE INDEX IDX_glabels_2 ON group_labels (labelValue);
@@ -121,6 +122,7 @@ CREATE TABLE artifact_labels (
121122
labelKey VARCHAR(256) NOT NULL,
122123
labelValue VARCHAR(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
123124
) DEFAULT CHARACTER SET ascii COLLATE ascii_general_ci;
125+
ALTER TABLE artifact_labels ADD PRIMARY KEY (groupId, artifactId, labelKey);
124126
ALTER TABLE artifact_labels ADD CONSTRAINT FK_alabels_1 FOREIGN KEY (groupId, artifactId) REFERENCES artifacts (groupId, artifactId) ON DELETE CASCADE;
125127
CREATE INDEX IDX_alabels_1 ON artifact_labels (labelKey);
126128
CREATE INDEX IDX_alabels_2 ON artifact_labels (labelValue);
@@ -167,6 +169,7 @@ CREATE TABLE version_labels (
167169
labelKey VARCHAR(256) NOT NULL,
168170
labelValue VARCHAR(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
169171
) DEFAULT CHARACTER SET ascii COLLATE ascii_general_ci;
172+
ALTER TABLE version_labels ADD PRIMARY KEY (globalId, labelKey);
170173
ALTER TABLE version_labels ADD CONSTRAINT FK_vlabels_1 FOREIGN KEY (globalId) REFERENCES versions (globalId) ON DELETE CASCADE;
171174
CREATE INDEX IDX_vlabels_1 ON version_labels (labelKey);
172175
CREATE INDEX IDX_vlabels_2 ON version_labels (labelValue);

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ CREATE TABLE groups (groupId VARCHAR(512) NOT NULL, description VARCHAR(1024), a
3737
ALTER TABLE groups ADD PRIMARY KEY (groupId);
3838

3939
CREATE TABLE group_labels (groupId VARCHAR(512) NOT NULL, labelKey VARCHAR(256) NOT NULL, labelValue VARCHAR(512));
40+
ALTER TABLE group_labels ADD PRIMARY KEY (groupId, labelKey);
4041
ALTER TABLE group_labels ADD CONSTRAINT FK_glabels_1 FOREIGN KEY (groupId) REFERENCES groups(groupId) ON DELETE CASCADE;
4142
CREATE INDEX IDX_glabels_1 ON group_labels(labelKey);
4243
CREATE INDEX IDX_glabels_2 ON group_labels(labelValue);
@@ -54,6 +55,7 @@ CREATE INDEX IDX_artifacts_3 ON artifacts(name);
5455
CREATE INDEX IDX_artifacts_4 ON artifacts(description);
5556

5657
CREATE TABLE artifact_labels (groupId VARCHAR(512) NOT NULL, artifactId VARCHAR(512) NOT NULL, labelKey VARCHAR(256) NOT NULL, labelValue VARCHAR(512));
58+
ALTER TABLE artifact_labels ADD PRIMARY KEY (groupId, artifactId, labelKey);
5759
ALTER TABLE artifact_labels ADD CONSTRAINT FK_alabels_1 FOREIGN KEY (groupId, artifactId) REFERENCES artifacts(groupId, artifactId) ON DELETE CASCADE;
5860
CREATE INDEX IDX_alabels_1 ON artifact_labels(labelKey);
5961
CREATE INDEX IDX_alabels_2 ON artifact_labels(labelValue);
@@ -81,6 +83,7 @@ CREATE INDEX IDX_versions_6 ON versions(createdOn);
8183
CREATE INDEX IDX_versions_7 ON versions USING HASH (contentId);
8284

8385
CREATE TABLE version_labels (globalId BIGINT NOT NULL, labelKey VARCHAR(256) NOT NULL, labelValue VARCHAR(512));
86+
ALTER TABLE version_labels ADD PRIMARY KEY (globalId, labelKey);
8487
ALTER TABLE version_labels ADD CONSTRAINT FK_vlabels_1 FOREIGN KEY (globalId) REFERENCES versions(globalId) ON DELETE CASCADE;
8588
CREATE INDEX IDX_vlabels_1 ON version_labels(labelKey);
8689
CREATE INDEX IDX_vlabels_2 ON version_labels(labelValue);

0 commit comments

Comments
 (0)