pinpoint-apm/pinpoint · error · IllegalArgumentException
Unexpected schema change log check sum for :
Error message
Unexpected schema change log check sum for :
What it means
ChangeSetManager.verifyChangeLog recomputes the CheckSum of the ChangeSet's value and compares it to the checksum recorded in the persisted SchemaChangeLog. A mismatch throws IllegalArgumentException, meaning an already-applied change set's content was modified after execution.
Source
Thrown at hbase/hbase-schema/src/main/java/com/navercorp/pinpoint/hbase/schema/core/ChangeSetManager.java:107
}
private List<SchemaChangeLog> sortSchemaChangeLogs(List<SchemaChangeLog> schemaChangeLogs) {
List<SchemaChangeLog> sortedSchemaChangeLogs = new ArrayList<>(schemaChangeLogs);
sortedSchemaChangeLogs.sort(Comparator.comparingInt(SchemaChangeLog::getExecOrder));
return sortedSchemaChangeLogs;
}
private void verifyChangeLog(SchemaChangeLog schemaChangeLog, ChangeSet changeSet, int expectedOrder) {
String changeSetId = changeSet.getId();
String schemaChangeLogId = schemaChangeLog.getId();
if (!changeSetId.equals(schemaChangeLogId)) {
throw new IllegalArgumentException("Unexpected schema change log id, expected : " + changeSetId + " , was : " + schemaChangeLogId);
}
CheckSum actualCheckSum = schemaChangeLog.getCheckSum();
CheckSum expectedCheckSum = CheckSum.compute(actualCheckSum.getVersion(), changeSet.getValue());
if (!expectedCheckSum.equals(actualCheckSum)) {
throw new IllegalArgumentException("Unexpected schema change log check sum for : " + schemaChangeLogId);
}
int actualOrder = schemaChangeLog.getExecOrder();
if (expectedOrder != actualOrder) {
throw new IllegalArgumentException("Unexpected schema change log execution order for " + schemaChangeLogId + ", expected : " + expectedOrder + ", was : " + actualOrder);
}
}
}
View on GitHub (pinned to 744c3d3075)
Solutions
- Revert the change set value to its originally applied content so the checksum matches.
- Create a NEW change set with a fresh id for the additional schema change instead of editing the old one.
- If the historical edit is intentional and safe, regenerate/update the stored change log checksum to match the new content.
Example fix
// before
// edited already-applied changeset
String value = "CREATE TABLE AgentInfo (... modified option ...)";
// after
// restore original applied value; put modification in a new change set
String value = "CREATE TABLE AgentInfo (... original ...)";
// new ChangeSet("hbase-change-3-v1", modifiedDdl) Defensive patterns
Strategy: validation
Validate before calling
// Detect edited applied change sets before startup
for (ChangeSet cs : changeSets) {
SchemaChangeLog log = logsById.get(cs.getId());
if (log != null) {
CheckSum expected = CheckSum.compute(log.getCheckSum().getVersion(), cs.getValue());
if (!expected.equals(log.getCheckSum())) {
throw new IllegalStateException("ChangeSet " + cs.getId() + " was modified after apply");
}
}
} Try / catch
try {
manager.updateExistingSchemas(changeSets);
} catch (IllegalArgumentException e) {
logger.error("Checksum verification failed: {}", e.getMessage());
} Prevention
- Never edit a change set body once it has been applied; always add a new one.
- Version-control change sets and review checksum-affecting diffs.
- Run checksum verification in CI against a snapshot of the change log table.
When it happens
Trigger: Calling getExecutedChangeSets or filterExecutedChangeSets when the ChangeSet body (its value) differs from what was stored when the change log was written — i.e. the change set was edited after being applied.
Common situations: Editing a previously-applied change set script (adding a column family, changing options) instead of appending a new change set; merging branches where two developers edited the same applied change set.
Understand the failure class
Background: Checksum mismatch errors: "checksum verification failed", "digest mismatch", "expected vs actual checksum" — what they mean and how to fix them — this error's family across 41 libraries.
Related errors
- Unexpected schema change log id, expected :
- Unexpected schema change log execution order for
- Error applying changeSet :
- Cannot create an existing table :
- Cannot modify a non-existent table :
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/30eca2f3ee3610fd.
Report an issue: GitHub.