public UpdateSchemaResponse update()

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());
    }