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

  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.