public void updateSchema()

in storage-jdbc/src/main/java/org/apache/rocketmq/schema/registry/storage/jdbc/handler/SchemaHandler.java [103:131]


    public void updateSchema(SchemaInfo update) {
        if (!schemas.containsKey(update.schemaFullName())) {
            log.warn(String.format("Schema %s does not exist, update failed", update.schemaFullName()));
            return;
        }
        // Get lock
        schemas.lock(update.schemaFullName());
        try {
            SchemaInfo current = schemas.get(update.schemaFullName());
            boolean hasVersionDeleted = current.getRecordCount() > update.getRecordCount();
            if (current.getLastModifiedTime() != null && update.getLastModifiedTime() != null &&
                    current.getLastModifiedTime().after(update.getLastModifiedTime())) {
                log.info("Current Schema is later version, no need to update.");
                return;
            }
            if (current.getLastRecordVersion() == update.getLastRecordVersion() && !hasVersionDeleted) {
                log.info("Schema version is the same, no need to update.");
                return;
            }
            if (current.getLastRecordVersion() > update.getLastRecordVersion() && !hasVersionDeleted) {
                throw new SchemaException("Schema version is invalid, update: "
                        + update.getLastRecordVersion() + ", but current: " + current.getLastRecordVersion());
            }
            schemas.put(update.schemaFullName(), update);
        } finally {
            // unlock
            schemas.unlock(update.schemaFullName());
        }
    }