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.

Solutions

  1. Read the nested cause message for the exact invalid field in the createTable named in the message
  2. Supply the missing/invalid attribute (e.g. table name or a valid split option)
  3. Validate the XML against the XSD before running the schema tool
  4. 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

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


AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07). Data as JSON: /api/errors/39b277ee28536ec0. Report an issue: GitHub.

Appendix: 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)