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
- Set the name attribute on the <modifyTable> element to the exact HBase table name.
- Check for unfilled placeholders in generated schema XML (e.g. ${table.name}).
- 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
- Always set name on modifyTable elements
- Check generated XML for unresolved placeholders
- Validate schema XML in CI
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
- modifyTable :
- createTable :
- ColumnFamily name must not be empty
- Duplicate include file :
- Duplicate changeSet id :
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/aa4de559f0ca88f6.
Report an issue: GitHub.