pinpoint-apm/pinpoint · error · InvalidHbaseSchemaException

Table name must not be empty

Error message

Table name must not be empty

What it means

Thrown by TableChangeMapper.map(ChangeSet.ModifyTable) when a <modifyTable> changeSet has an empty or missing name attribute. A table name is mandatory to locate the table to alter in HBase. This is XML schema validation performed before any HBase call is made.

Source

Thrown at hbase/hbase-schema/src/main/java/com/navercorp/pinpoint/hbase/schema/reader/xml/mapper/TableChangeMapper.java:48

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * @author HyunGil Jeong
 */
public class TableChangeMapper {

    ColumnFamilyChangeMapper columnFamilyChangeMapper = new ColumnFamilyChangeMapper();
    TableConfigurationMapper tableConfigurationMapper = new TableConfigurationMapper();
    SplitOptionMapper splitOptionMapper = new SplitOptionMapper();

    public TableChange map(ChangeSet.ModifyTable modifyTable) {
        String tableName = modifyTable.getName();
        if (StringUtils.isEmpty(tableName)) {
            throw new InvalidHbaseSchemaException("Table name must not be empty");
        }

        List<ColumnFamilyChange> columnFamilyChanges = mapColumnFamilies(modifyTable.getCreateColumnFamily());

        return new ModifyTableChange(tableName, TableConfiguration.EMPTY_CONFIGURATION, columnFamilyChanges);
    }

    public TableChange map(ChangeSet.CreateTable createTable) {
        String tableName = createTable.getName();
        if (StringUtils.isEmpty(tableName)) {
            throw new InvalidHbaseSchemaException("Table name must not be empty");
        }

        TableConfiguration tableConfiguration = tableConfigurationMapper.mapConfiguration(createTable.getConfiguration());
        List<ColumnFamilyChange> columnFamilyChanges = mapColumnFamilies(createTable.getCreateColumnFamily());
        CreateTableChange.SplitOption splitOption = splitOptionMapper.mapSplitOption(createTable.getSplit());

        return new CreateTableChange(tableName, tableConfiguration, columnFamilyChanges, splitOption);

View on GitHub (pinned to 744c3d3075)

Solutions

  1. Set the name attribute on the <modifyTable> element to the exact HBase table name.
  2. Check for unfilled placeholders in generated schema XML (e.g. ${table.name}).
  3. Confirm the attribute is spelled name, matching the ChangeSet.ModifyTable binding.

Example fix

<!-- before -->
<modifyTable>
  <createColumnFamily name="AgentInfo"/>
</modifyTable>
<!-- after -->
<modifyTable name="AgentInfo">
  <createColumnFamily name="AgentInfo"/>
</modifyTable>
Defensive patterns

Strategy: validation

Validate before calling

if (modifyTable.getName() == null || modifyTable.getName().isBlank()) {
    throw new IllegalArgumentException("modifyTable requires a name attribute");
}

Try / catch

try { tableChangeMapper.map(modifyTable); } catch (InvalidHbaseSchemaException e) { log.error("Invalid <modifyTable>: {}", e.getMessage()); }

Prevention

When it happens

Trigger: Mapping a changeSet containing <modifyTable> with name="" or no name attribute.

Common situations: Hand-editing schema XML and deleting the name attribute; a templating/build step that fails to substitute a table-name placeholder; typo in the attribute name (e.g. tableName instead of name).

Understand the failure class

Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.

Related errors


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