pinpoint-apm/pinpoint · error · InvalidHbaseSchemaException
createTable :
Error message
createTable :
What it means
Same wrapping pattern as modifyTable but for <createTable> elements: any InvalidHbaseSchemaException from TableChangeMapper while mapping a createTable is rethrown with "createTable : <name>, " plus the original message and cause, pinpointing which table definition is invalid.
Source
Thrown at hbase/hbase-schema/src/main/java/com/navercorp/pinpoint/hbase/schema/reader/xml/mapper/ChangeSetMapper.java:91
private List<TableChange> mapTableChanges(List<com.navercorp.pinpoint.hbase.schema.definition.xml.ChangeSet.ModifyTable> modifyTables,
List<com.navercorp.pinpoint.hbase.schema.definition.xml.ChangeSet.CreateTable> createTables) {
if (modifyTables.isEmpty() && createTables.isEmpty()) {
return Collections.emptyList();
}
List<TableChange> tableChanges = new ArrayList<>(modifyTables.size() + createTables.size());
for (com.navercorp.pinpoint.hbase.schema.definition.xml.ChangeSet.ModifyTable modifyTable : modifyTables) {
try {
tableChanges.add(tableChangeMapper.map(modifyTable));
} catch (InvalidHbaseSchemaException e) {
throw new InvalidHbaseSchemaException("modifyTable : " + modifyTable.getName() + ", " + e.getMessage(), e.getCause());
}
}
for (com.navercorp.pinpoint.hbase.schema.definition.xml.ChangeSet.CreateTable createTable : createTables) {
try {
tableChanges.add(tableChangeMapper.map(createTable));
} catch (InvalidHbaseSchemaException e) {
throw new InvalidHbaseSchemaException("createTable : " + createTable.getName() + ", " + e.getMessage(), e.getCause());
}
}
return tableChanges;
}
}
View on GitHub (pinned to 744c3d3075)
Solutions
- Read the nested cause message for the exact invalid field in the createTable named in the message
- Supply the missing/invalid attribute (e.g. table name or a valid split option)
- Validate the XML against the XSD before running the schema tool
- Fix nested column family elements so names and configurations are valid
Example fix
// before <createTable name=""></createTable> // after <createTable name="AgentStat"><createColumnFamily name="CF"></createColumnFamily></createTable>
Defensive patterns
Strategy: try-catch
Validate before calling
// pre-check createTable elements for required fields before loading
for (Element ct : createTableElements) {
if (ct.getAttribute("name").isEmpty()) throw new IllegalArgumentException("createTable missing name");
} Try / catch
try {
changeSets = schemaReader.loadChangeSets(resource);
} catch (InvalidHbaseSchemaException e) {
if (e.getMessage().startsWith("createTable : ")) {
String table = e.getMessage().split(",")[0].substring("createTable : ".length());
logger.error("Invalid createTable for {}", table, e.getCause());
} else {
throw e;
}
} Prevention
- Verify table name and split options are present and valid in every createTable
- Validate nested createColumnFamily names before loading
- Run XSD validation as a build step
When it happens
Trigger: A <createTable> element in a change set fails TableChangeMapper validation — e.g. missing table name, invalid split option, or invalid nested column family definitions.
Common situations: New table definitions copied from templates with placeholder names left empty; invalid splitOption values (empty Manual keys, Auto(1)); nested createColumnFamily without a name.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- modifyTable :
- ColumnFamily name must not be empty
- Error loading change sets from
- Cyclic include detected for :
- Duplicate changeSet found. Id:
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/39b277ee28536ec0.
Report an issue: GitHub.