in core/src/main/java/org/apache/rocketmq/schema/registry/core/service/SchemaServiceImpl.java [137:200]
public UpdateSchemaResponse update(QualifiedName qualifiedName, UpdateSchemaRequest updateSchemaRequest) {
final RequestContext requestContext = RequestContextManager.getContext();
log.info("update request context: " + requestContext);
this.accessController.checkPermission("", "", SchemaOperation.UPDATE);
SchemaInfo current = storageServiceProxy.get(qualifiedName);
if (current == null) {
throw new SchemaNotFoundException("Schema " + qualifiedName.toString() + " not exist, ignored update.");
}
final SchemaRecordInfo updateRecord = new SchemaRecordInfo();
updateRecord.setSchema(qualifiedName.schemaFullName());
updateRecord.setSchemaId(current.getUniqueId());
updateRecord.setType(current.getSchemaType());
updateRecord.setIdl(updateSchemaRequest.getSchemaIdl());
updateRecord.bindSubject(qualifiedName.subjectInfo());
updateRecord.setVersion(current.getLastRecordVersion() + 1);
final List<SchemaRecordInfo> updateRecords = new ArrayList<>(current.getDetails().getSchemaRecords());
updateRecords.add(updateRecord);
final SchemaInfo update = new SchemaInfo();
update.getDetails().setSchemaRecords(updateRecords);
if (current.getQualifiedName() != null) {
update.setQualifiedName(current.getQualifiedName());
}
if (current.getMeta() != null) {
update.setMeta(current.getMeta());
}
if (current.getStorage() != null) {
update.setStorage(current.getStorage());
}
if (current.getExtras() != null) {
update.setExtras(current.getExtras());
}
if (current.getAudit() != null) {
update.setAudit(current.getAudit());
update.getAudit().updateBy(updateSchemaRequest.getOwner(), updateSchemaRequest.getDesc());
}
// check compatibility
SchemaValidator validator = CompatibilityChecker.getValidator(update.getMeta().getType());
if (validator != null) {
validator.validate(update, current);
}
if (config.isUploadEnabled()) {
Dependency dependency = dependencyService.compile(update);
update.setLastRecordDependency(dependency);
}
log.info("Updating schema info {}: {}", qualifiedName, update);
storageServiceProxy.update(update);
long schemaRecordId = CommonUtil.getSchemaRecordId(
update.getUniqueId(), update.getLastRecordVersion());
return new UpdateSchemaResponse(schemaRecordId, update.getLastRecordVersion());
}