@Override
    public HbaseSchemaStatus getSchemaStatus(String namespace, List<ChangeSet> changeSets) {
        Assert.notEmpty(changeSets, "changeSets");

        if (!schemaChangeLogService.isAvailable(namespace)) {
            return HbaseSchemaStatus.NONE;
        }
        List<SchemaChangeLog> schemaChangeLogs = schemaChangeLogService.getSchemaChangeLogs(namespace);
        if (CollectionUtils.isEmpty(schemaChangeLogs)) {
            return HbaseSchemaStatus.NONE;
        }

        List<ChangeSet> unexecutedChangeSets;
        ChangeSetManager changeSetManager = new ChangeSetManager(changeSets);
        try {
            unexecutedChangeSets = changeSetManager.filterExecutedChangeSets(schemaChangeLogs);
        } catch (IllegalArgumentException e) {
            logger.error("[{}] Invalid hbase schema, cause : {}", namespace, e.getMessage());
            return HbaseSchemaStatus.INVALID;
        }
        if (CollectionUtils.isEmpty(unexecutedChangeSets)) {
            return HbaseSchemaStatus.VALID;
        }
        return HbaseSchemaStatus.VALID_OUT_OF_DATE;
    }
This implementation uses the executed schema change logs to compare against the specified {@code changeSets} to
check the current schema status, regardless of how the actual schema looks like.
hbase/hbase-schema/src/main/java/com/navercorp/pinpoint/hbase/schema/service/HbaseSchemaServiceImpl.java