Skip to content

Commit ec442f8

Browse files
committed
Initial upgrade process support
1 parent 9ad2b9c commit ec442f8

File tree

69 files changed

+1221
-171
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+1221
-171
lines changed

app/src/main/java/io/apicurio/registry/ImportLifecycleBean.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import io.apicurio.registry.storage.impexp.EntityInputStream;
99
import io.apicurio.registry.types.Current;
1010
import io.apicurio.registry.utils.impexp.Entity;
11-
import io.apicurio.registry.utils.impexp.EntityReader;
11+
import io.apicurio.registry.utils.impexp.v3.EntityReader;
1212
import jakarta.enterprise.context.ApplicationScoped;
1313
import jakarta.enterprise.event.ObservesAsync;
1414
import jakarta.inject.Inject;

app/src/main/java/io/apicurio/registry/rest/v2/AdminResourceImpl.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
import io.apicurio.registry.types.RuleType;
3939
import io.apicurio.registry.types.provider.ArtifactTypeUtilProviderFactory;
4040
import io.apicurio.registry.utils.impexp.Entity;
41-
import io.apicurio.registry.utils.impexp.EntityReader;
41+
import io.apicurio.registry.utils.impexp.v3.EntityReader;
4242
import jakarta.enterprise.context.ApplicationScoped;
4343
import jakarta.inject.Inject;
4444
import jakarta.interceptor.Interceptors;

app/src/main/java/io/apicurio/registry/rest/v2/shared/DataExporter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import io.apicurio.registry.storage.RegistryStorage;
44
import io.apicurio.registry.types.Current;
5-
import io.apicurio.registry.utils.impexp.EntityWriter;
5+
import io.apicurio.registry.utils.impexp.v3.EntityWriter;
66
import jakarta.enterprise.context.ApplicationScoped;
77
import jakarta.inject.Inject;
88
import jakarta.ws.rs.core.Response;

app/src/main/java/io/apicurio/registry/rest/v3/AdminResourceImpl.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
import io.apicurio.registry.types.RuleType;
4242
import io.apicurio.registry.types.provider.ArtifactTypeUtilProviderFactory;
4343
import io.apicurio.registry.utils.impexp.Entity;
44-
import io.apicurio.registry.utils.impexp.EntityReader;
44+
import io.apicurio.registry.utils.impexp.v3.EntityReader;
4545
import jakarta.enterprise.context.ApplicationScoped;
4646
import jakarta.inject.Inject;
4747
import jakarta.interceptor.Interceptors;

app/src/main/java/io/apicurio/registry/rest/v3/shared/DataExporter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import io.apicurio.registry.storage.RegistryStorage;
44
import io.apicurio.registry.types.Current;
5-
import io.apicurio.registry.utils.impexp.EntityWriter;
5+
import io.apicurio.registry.utils.impexp.v3.EntityWriter;
66
import jakarta.enterprise.context.ApplicationScoped;
77
import jakarta.inject.Inject;
88
import jakarta.ws.rs.core.Response;

app/src/main/java/io/apicurio/registry/storage/RegistryStorage.java

+28-15
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,16 @@
4242
import io.apicurio.registry.storage.error.VersionNotFoundException;
4343
import io.apicurio.registry.storage.impexp.EntityInputStream;
4444
import io.apicurio.registry.types.RuleType;
45-
import io.apicurio.registry.utils.impexp.ArtifactEntity;
46-
import io.apicurio.registry.utils.impexp.ArtifactRuleEntity;
47-
import io.apicurio.registry.utils.impexp.ArtifactVersionEntity;
48-
import io.apicurio.registry.utils.impexp.BranchEntity;
49-
import io.apicurio.registry.utils.impexp.CommentEntity;
50-
import io.apicurio.registry.utils.impexp.ContentEntity;
5145
import io.apicurio.registry.utils.impexp.Entity;
52-
import io.apicurio.registry.utils.impexp.GlobalRuleEntity;
53-
import io.apicurio.registry.utils.impexp.GroupEntity;
54-
import io.apicurio.registry.utils.impexp.GroupRuleEntity;
46+
import io.apicurio.registry.utils.impexp.v3.ArtifactEntity;
47+
import io.apicurio.registry.utils.impexp.v3.ArtifactRuleEntity;
48+
import io.apicurio.registry.utils.impexp.v3.ArtifactVersionEntity;
49+
import io.apicurio.registry.utils.impexp.v3.BranchEntity;
50+
import io.apicurio.registry.utils.impexp.v3.CommentEntity;
51+
import io.apicurio.registry.utils.impexp.v3.ContentEntity;
52+
import io.apicurio.registry.utils.impexp.v3.GlobalRuleEntity;
53+
import io.apicurio.registry.utils.impexp.v3.GroupEntity;
54+
import io.apicurio.registry.utils.impexp.v3.GroupRuleEntity;
5555
import org.apache.commons.lang3.tuple.Pair;
5656

5757
import java.time.Instant;
@@ -246,7 +246,7 @@ void updateArtifactMetaData(String groupId, String artifactId, EditableArtifactM
246246

247247
/**
248248
* Get all rules configured for a group.
249-
*
249+
*
250250
* @param groupId
251251
* @throws GroupNotFoundException
252252
* @throws RegistryStorageException
@@ -255,7 +255,7 @@ void updateArtifactMetaData(String groupId, String artifactId, EditableArtifactM
255255

256256
/**
257257
* Create/configure a rule for a group.
258-
*
258+
*
259259
* @param groupId
260260
* @param rule
261261
* @param config
@@ -268,7 +268,7 @@ void createGroupRule(String groupId, RuleType rule, RuleConfigurationDto config)
268268

269269
/**
270270
* Delete all rules configured for a group.
271-
*
271+
*
272272
* @param groupId
273273
* @throws GroupNotFoundException
274274
* @throws RegistryStorageException
@@ -277,7 +277,7 @@ void createGroupRule(String groupId, RuleType rule, RuleConfigurationDto config)
277277

278278
/**
279279
* Update the configuration for a specific rule in a group.
280-
*
280+
*
281281
* @param groupId
282282
* @param rule
283283
* @param config
@@ -290,7 +290,7 @@ void updateGroupRule(String groupId, RuleType rule, RuleConfigurationDto config)
290290

291291
/**
292292
* Delete (unconfigure) a single rule for a group.
293-
*
293+
*
294294
* @param groupId
295295
* @param rule
296296
* @throws GroupNotFoundException
@@ -302,7 +302,7 @@ void deleteGroupRule(String groupId, RuleType rule)
302302

303303
/**
304304
* Gets the current configuration of a single rule in the group.
305-
*
305+
*
306306
* @param groupId
307307
* @param rule
308308
* @throws GroupNotFoundException
@@ -623,6 +623,19 @@ void updateGlobalRule(RuleType rule, RuleConfigurationDto config)
623623
void importData(EntityInputStream entities, boolean preserveGlobalId, boolean preserveContentId)
624624
throws RegistryStorageException;
625625

626+
/**
627+
* Called to upgrade and import previously exported data into the registry. It upgrades the data structure
628+
* from v2 to v3 and imports the data into Registry.
629+
*
630+
* @param entities
631+
* @param preserveGlobalId Preserve global ids. If false, global ids will be set to next id in global id
632+
* sequence.
633+
* @param preserveContentId Preserve content id. If false, content ids will be set to the next ids in the
634+
* content id sequence. Content-Version mapping will be preserved.
635+
* @throws RegistryStorageException
636+
*/
637+
void upgradeData(EntityInputStream entities, boolean preserveGlobalId, boolean preserveContentId);
638+
626639
/**
627640
* Counts the total number of artifacts in the registry.
628641
*

app/src/main/java/io/apicurio/registry/storage/decorator/ReadOnlyRegistryStorageDecorator.java

+16-9
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@
2828
import io.apicurio.registry.storage.error.RuleNotFoundException;
2929
import io.apicurio.registry.storage.impexp.EntityInputStream;
3030
import io.apicurio.registry.types.RuleType;
31-
import io.apicurio.registry.utils.impexp.ArtifactEntity;
32-
import io.apicurio.registry.utils.impexp.ArtifactRuleEntity;
33-
import io.apicurio.registry.utils.impexp.ArtifactVersionEntity;
34-
import io.apicurio.registry.utils.impexp.BranchEntity;
35-
import io.apicurio.registry.utils.impexp.CommentEntity;
36-
import io.apicurio.registry.utils.impexp.ContentEntity;
37-
import io.apicurio.registry.utils.impexp.GlobalRuleEntity;
38-
import io.apicurio.registry.utils.impexp.GroupEntity;
39-
import io.apicurio.registry.utils.impexp.GroupRuleEntity;
31+
import io.apicurio.registry.utils.impexp.v3.ArtifactEntity;
32+
import io.apicurio.registry.utils.impexp.v3.ArtifactRuleEntity;
33+
import io.apicurio.registry.utils.impexp.v3.ArtifactVersionEntity;
34+
import io.apicurio.registry.utils.impexp.v3.BranchEntity;
35+
import io.apicurio.registry.utils.impexp.v3.CommentEntity;
36+
import io.apicurio.registry.utils.impexp.v3.ContentEntity;
37+
import io.apicurio.registry.utils.impexp.v3.GlobalRuleEntity;
38+
import io.apicurio.registry.utils.impexp.v3.GroupEntity;
39+
import io.apicurio.registry.utils.impexp.v3.GroupRuleEntity;
4040
import jakarta.enterprise.context.ApplicationScoped;
4141
import org.apache.commons.lang3.tuple.Pair;
4242
import org.eclipse.microprofile.config.inject.ConfigProperty;
@@ -244,6 +244,13 @@ public void importData(EntityInputStream entities, boolean preserveGlobalId, boo
244244
delegate.importData(entities, preserveGlobalId, preserveContentId);
245245
}
246246

247+
@Override
248+
public void upgradeData(EntityInputStream entities, boolean preserveGlobalId, boolean preserveContentId)
249+
throws RegistryStorageException {
250+
checkReadOnly();
251+
delegate.upgradeData(entities, preserveGlobalId, preserveContentId);
252+
}
253+
247254
@Override
248255
public void createRoleMapping(String principalId, String role, String principalName)
249256
throws RegistryStorageException {

app/src/main/java/io/apicurio/registry/storage/decorator/RegistryStorageDecoratorBase.java

+15-9
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@
2525
import io.apicurio.registry.storage.error.VersionNotFoundException;
2626
import io.apicurio.registry.storage.impexp.EntityInputStream;
2727
import io.apicurio.registry.types.RuleType;
28-
import io.apicurio.registry.utils.impexp.ArtifactEntity;
29-
import io.apicurio.registry.utils.impexp.ArtifactRuleEntity;
30-
import io.apicurio.registry.utils.impexp.ArtifactVersionEntity;
31-
import io.apicurio.registry.utils.impexp.BranchEntity;
32-
import io.apicurio.registry.utils.impexp.CommentEntity;
33-
import io.apicurio.registry.utils.impexp.ContentEntity;
34-
import io.apicurio.registry.utils.impexp.GlobalRuleEntity;
35-
import io.apicurio.registry.utils.impexp.GroupEntity;
36-
import io.apicurio.registry.utils.impexp.GroupRuleEntity;
28+
import io.apicurio.registry.utils.impexp.v3.ArtifactEntity;
29+
import io.apicurio.registry.utils.impexp.v3.ArtifactRuleEntity;
30+
import io.apicurio.registry.utils.impexp.v3.ArtifactVersionEntity;
31+
import io.apicurio.registry.utils.impexp.v3.BranchEntity;
32+
import io.apicurio.registry.utils.impexp.v3.CommentEntity;
33+
import io.apicurio.registry.utils.impexp.v3.ContentEntity;
34+
import io.apicurio.registry.utils.impexp.v3.GlobalRuleEntity;
35+
import io.apicurio.registry.utils.impexp.v3.GroupEntity;
36+
import io.apicurio.registry.utils.impexp.v3.GroupRuleEntity;
3737
import org.apache.commons.lang3.tuple.Pair;
3838

3939
import java.util.List;
@@ -187,6 +187,12 @@ public void importData(EntityInputStream entities, boolean preserveGlobalId, boo
187187
delegate.importData(entities, preserveGlobalId, preserveContentId);
188188
}
189189

190+
@Override
191+
public void upgradeData(EntityInputStream entities, boolean preserveGlobalId, boolean preserveContentId)
192+
throws RegistryStorageException {
193+
delegate.upgradeData(entities, preserveGlobalId, preserveContentId);
194+
}
195+
190196
@Override
191197
public void createRoleMapping(String principalId, String role, String principalName)
192198
throws RegistryStorageException {

app/src/main/java/io/apicurio/registry/storage/impl/gitops/AbstractReadOnlyRegistryStorage.java

+15-9
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@
2121
import io.apicurio.registry.storage.error.RegistryStorageException;
2222
import io.apicurio.registry.storage.impexp.EntityInputStream;
2323
import io.apicurio.registry.types.RuleType;
24-
import io.apicurio.registry.utils.impexp.ArtifactEntity;
25-
import io.apicurio.registry.utils.impexp.ArtifactRuleEntity;
26-
import io.apicurio.registry.utils.impexp.ArtifactVersionEntity;
27-
import io.apicurio.registry.utils.impexp.BranchEntity;
28-
import io.apicurio.registry.utils.impexp.CommentEntity;
29-
import io.apicurio.registry.utils.impexp.ContentEntity;
30-
import io.apicurio.registry.utils.impexp.GlobalRuleEntity;
31-
import io.apicurio.registry.utils.impexp.GroupEntity;
32-
import io.apicurio.registry.utils.impexp.GroupRuleEntity;
24+
import io.apicurio.registry.utils.impexp.v3.ArtifactEntity;
25+
import io.apicurio.registry.utils.impexp.v3.ArtifactRuleEntity;
26+
import io.apicurio.registry.utils.impexp.v3.ArtifactVersionEntity;
27+
import io.apicurio.registry.utils.impexp.v3.BranchEntity;
28+
import io.apicurio.registry.utils.impexp.v3.CommentEntity;
29+
import io.apicurio.registry.utils.impexp.v3.ContentEntity;
30+
import io.apicurio.registry.utils.impexp.v3.GlobalRuleEntity;
31+
import io.apicurio.registry.utils.impexp.v3.GroupEntity;
32+
import io.apicurio.registry.utils.impexp.v3.GroupRuleEntity;
3333
import org.apache.commons.lang3.tuple.Pair;
3434

3535
import java.util.List;
@@ -179,6 +179,12 @@ public void importData(EntityInputStream entities, boolean preserveGlobalId, boo
179179
readOnlyViolation();
180180
}
181181

182+
@Override
183+
public void upgradeData(EntityInputStream entities, boolean preserveGlobalId, boolean preserveContentId)
184+
throws RegistryStorageException {
185+
readOnlyViolation();
186+
}
187+
182188
@Override
183189
public void createRoleMapping(String principalId, String role, String principalName)
184190
throws RegistryStorageException {

app/src/main/java/io/apicurio/registry/storage/impl/gitops/GitManager.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616
import io.apicurio.registry.types.ContentTypes;
1717
import io.apicurio.registry.types.RuleType;
1818
import io.apicurio.registry.types.VersionState;
19-
import io.apicurio.registry.utils.impexp.ArtifactEntity;
20-
import io.apicurio.registry.utils.impexp.ArtifactRuleEntity;
21-
import io.apicurio.registry.utils.impexp.ArtifactVersionEntity;
22-
import io.apicurio.registry.utils.impexp.ContentEntity;
23-
import io.apicurio.registry.utils.impexp.GlobalRuleEntity;
24-
import io.apicurio.registry.utils.impexp.GroupEntity;
19+
import io.apicurio.registry.utils.impexp.v3.ArtifactEntity;
20+
import io.apicurio.registry.utils.impexp.v3.ArtifactRuleEntity;
21+
import io.apicurio.registry.utils.impexp.v3.ArtifactVersionEntity;
22+
import io.apicurio.registry.utils.impexp.v3.ContentEntity;
23+
import io.apicurio.registry.utils.impexp.v3.GlobalRuleEntity;
24+
import io.apicurio.registry.utils.impexp.v3.GroupEntity;
2525
import jakarta.annotation.PreDestroy;
2626
import jakarta.enterprise.context.ApplicationScoped;
2727
import jakarta.inject.Inject;

app/src/main/java/io/apicurio/registry/storage/impl/kafkasql/KafkaSqlRegistryStorage.java

+41-16
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,19 @@
2727
import io.apicurio.registry.storage.impl.sql.RegistryStorageContentUtils;
2828
import io.apicurio.registry.storage.impl.sql.SqlRegistryStorage;
2929
import io.apicurio.registry.storage.importing.DataImporter;
30-
import io.apicurio.registry.storage.importing.SqlDataImporter;
30+
import io.apicurio.registry.storage.importing.v2.SqlDataUpgrader;
31+
import io.apicurio.registry.storage.importing.v3.SqlDataImporter;
3132
import io.apicurio.registry.types.RuleType;
3233
import io.apicurio.registry.utils.ConcurrentUtil;
33-
import io.apicurio.registry.utils.impexp.ArtifactEntity;
34-
import io.apicurio.registry.utils.impexp.ArtifactRuleEntity;
35-
import io.apicurio.registry.utils.impexp.ArtifactVersionEntity;
36-
import io.apicurio.registry.utils.impexp.BranchEntity;
37-
import io.apicurio.registry.utils.impexp.CommentEntity;
38-
import io.apicurio.registry.utils.impexp.ContentEntity;
39-
import io.apicurio.registry.utils.impexp.GlobalRuleEntity;
40-
import io.apicurio.registry.utils.impexp.GroupEntity;
41-
import io.apicurio.registry.utils.impexp.GroupRuleEntity;
34+
import io.apicurio.registry.utils.impexp.v3.ArtifactEntity;
35+
import io.apicurio.registry.utils.impexp.v3.ArtifactRuleEntity;
36+
import io.apicurio.registry.utils.impexp.v3.ArtifactVersionEntity;
37+
import io.apicurio.registry.utils.impexp.v3.BranchEntity;
38+
import io.apicurio.registry.utils.impexp.v3.CommentEntity;
39+
import io.apicurio.registry.utils.impexp.v3.ContentEntity;
40+
import io.apicurio.registry.utils.impexp.v3.GlobalRuleEntity;
41+
import io.apicurio.registry.utils.impexp.v3.GroupEntity;
42+
import io.apicurio.registry.utils.impexp.v3.GroupRuleEntity;
4243
import io.apicurio.registry.utils.kafka.KafkaUtil;
4344
import io.apicurio.registry.utils.kafka.ProducerActions;
4445
import jakarta.annotation.PreDestroy;
@@ -634,6 +635,30 @@ public void importData(EntityInputStream entities, boolean preserveGlobalId, boo
634635
});
635636
}
636637

638+
/**
639+
* @see io.apicurio.registry.storage.RegistryStorage#importData(io.apicurio.registry.storage.impexp.EntityInputStream,
640+
* boolean, boolean)
641+
*/
642+
@Override
643+
public void upgradeData(EntityInputStream entities, boolean preserveGlobalId, boolean preserveContentId)
644+
throws RegistryStorageException {
645+
DataImporter dataImporter = new SqlDataUpgrader(log, utils, this, preserveGlobalId,
646+
preserveContentId);
647+
dataImporter.importData(entities, () -> {
648+
// Because importing just pushes a bunch of Kafka messages, we may need to
649+
// wait for a few seconds before we send the reset messages. Due to partitioning,
650+
// we can't guarantee ordering of these next two messages, and we NEED them to
651+
// be consumed after all the import messages.
652+
// TODO We can wait until the last message is read (a specific one),
653+
// or create a new message type for this purpose (a sync message).
654+
try {
655+
Thread.sleep(2000);
656+
} catch (Exception e) {
657+
// Noop
658+
}
659+
});
660+
}
661+
637662
/**
638663
* @see io.apicurio.registry.storage.RegistryStorage#createRoleMapping(java.lang.String, java.lang.String,
639664
* java.lang.String)
@@ -804,7 +829,7 @@ public long nextCommentId() {
804829
}
805830

806831
/**
807-
* @see io.apicurio.registry.storage.RegistryStorage#importComment(io.apicurio.registry.utils.impexp.CommentEntity)
832+
* @see io.apicurio.registry.storage.RegistryStorage#importComment(CommentEntity)
808833
*/
809834
@Override
810835
public void importComment(CommentEntity entity) {
@@ -814,7 +839,7 @@ public void importComment(CommentEntity entity) {
814839
}
815840

816841
/**
817-
* @see io.apicurio.registry.storage.RegistryStorage#importGroup(io.apicurio.registry.utils.impexp.GroupEntity)
842+
* @see io.apicurio.registry.storage.RegistryStorage#importGroup(GroupEntity)
818843
*/
819844
@Override
820845
public void importGroup(GroupEntity entity) {
@@ -824,7 +849,7 @@ public void importGroup(GroupEntity entity) {
824849
}
825850

826851
/**
827-
* @see io.apicurio.registry.storage.RegistryStorage#importGlobalRule(io.apicurio.registry.utils.impexp.GlobalRuleEntity)
852+
* @see io.apicurio.registry.storage.RegistryStorage#importGlobalRule(GlobalRuleEntity)
828853
*/
829854
@Override
830855
public void importGlobalRule(GlobalRuleEntity entity) {
@@ -834,7 +859,7 @@ public void importGlobalRule(GlobalRuleEntity entity) {
834859
}
835860

836861
/**
837-
* @see io.apicurio.registry.storage.RegistryStorage#importContent(io.apicurio.registry.utils.impexp.ContentEntity)
862+
* @see io.apicurio.registry.storage.RegistryStorage#importContent(ContentEntity)
838863
*/
839864
@Override
840865
public void importContent(ContentEntity entity) {
@@ -845,7 +870,7 @@ public void importContent(ContentEntity entity) {
845870
}
846871

847872
/**
848-
* @see io.apicurio.registry.storage.RegistryStorage#importArtifactVersion(io.apicurio.registry.utils.impexp.ArtifactVersionEntity)
873+
* @see io.apicurio.registry.storage.RegistryStorage#importArtifactVersion(ArtifactVersionEntity)
849874
*/
850875
@Override
851876
public void importArtifactVersion(ArtifactVersionEntity entity) {
@@ -862,7 +887,7 @@ public void importArtifact(ArtifactEntity entity) {
862887
}
863888

864889
/**
865-
* @see io.apicurio.registry.storage.RegistryStorage#importArtifactRule(io.apicurio.registry.utils.impexp.ArtifactRuleEntity)
890+
* @see io.apicurio.registry.storage.RegistryStorage#importArtifactRule(ArtifactRuleEntity)
866891
*/
867892
@Override
868893
public void importArtifactRule(ArtifactRuleEntity entity) {

0 commit comments

Comments
 (0)