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