public List<ChangeSet> filterExecutedChangeSets(List<SchemaChangeLog> schemaChangeLogs) {
        if (CollectionUtils.isEmpty(schemaChangeLogs)) {
            return new ArrayList<>(changeSets);
        }
        List<SchemaChangeLog> sortedSchemaChangeLogs = sortSchemaChangeLogs(schemaChangeLogs);
        int i = 0;
        while (i < changeSets.size() && i < sortedSchemaChangeLogs.size()) {
            ChangeSet changeSet = changeSets.get(i);
            SchemaChangeLog executedSchemaChangeLog = sortedSchemaChangeLogs.get(i);
            int expectedOrder = i + 1;
            verifyChangeLog(executedSchemaChangeLog, changeSet, expectedOrder);
            i++;
        }
        if (i >= changeSets.size()) {
            return Collections.emptyList();
        }
        return new ArrayList<>(changeSets.subList(i, changeSets.size()));
    }
Returns a new list of {@link ChangeSet} that has not been executed as specified by {@code schemaChangeLogs}.

@param schemaChangeLogs logs of change sets already executed
@return a list of change sets not yet executed
@throws IllegalArgumentException if the current change sets are not valid for the specified{@code schemaChangeLogs}
hbase/hbase-schema/src/main/java/com/navercorp/pinpoint/hbase/schema/core/ChangeSetManager.java