{"record":{"id":"376156448c7cb206","repo":"pinpoint-apm/pinpoint","slug":"modifytable","errorCode":null,"errorMessage":"modifyTable : ","messagePattern":"modifyTable : ","errorType":"validation","errorClass":"InvalidHbaseSchemaException","httpStatus":null,"severity":"error","filePath":"hbase/hbase-schema/src/main/java/com/navercorp/pinpoint/hbase/schema/reader/xml/mapper/ChangeSetMapper.java","lineNumber":84,"sourceCode":"    private Marshaller createMarshaller() throws JAXBException {\n        Marshaller marshaller = jaxbContext.createMarshaller();\n        marshaller.setSchema(schema);\n        marshaller.setProperty(Marshaller.JAXB_ENCODING, \"UTF-8\");\n        marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);\n        return marshaller;\n    }\n\n    private List<TableChange> mapTableChanges(List<com.navercorp.pinpoint.hbase.schema.definition.xml.ChangeSet.ModifyTable> modifyTables,\n                                              List<com.navercorp.pinpoint.hbase.schema.definition.xml.ChangeSet.CreateTable> createTables) {\n        if (modifyTables.isEmpty() && createTables.isEmpty()) {\n            return Collections.emptyList();\n        }\n        List<TableChange> tableChanges = new ArrayList<>(modifyTables.size() + createTables.size());\n        for (com.navercorp.pinpoint.hbase.schema.definition.xml.ChangeSet.ModifyTable modifyTable : modifyTables) {\n            try {\n                tableChanges.add(tableChangeMapper.map(modifyTable));\n            } catch (InvalidHbaseSchemaException e) {\n                throw new InvalidHbaseSchemaException(\"modifyTable : \" + modifyTable.getName() + \", \" + e.getMessage(), e.getCause());\n            }\n        }\n        for (com.navercorp.pinpoint.hbase.schema.definition.xml.ChangeSet.CreateTable createTable : createTables) {\n            try {\n                tableChanges.add(tableChangeMapper.map(createTable));\n            } catch (InvalidHbaseSchemaException e) {\n                throw new InvalidHbaseSchemaException(\"createTable : \" + createTable.getName() + \", \" + e.getMessage(), e.getCause());\n            }\n        }\n        return tableChanges;\n    }\n}\n","sourceCodeStart":66,"sourceCodeEnd":97,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/hbase/hbase-schema/src/main/java/com/navercorp/pinpoint/hbase/schema/reader/xml/mapper/ChangeSetMapper.java#L66-L97","documentation":"ChangeSetMapper.mapTableChanges maps each <modifyTable> element via TableChangeMapper; if the mapper raises InvalidHbaseSchemaException, it is rethrown with the modifyTable's table name prepended so the failing table is identifiable. The original cause is preserved.","triggerScenarios":"A <modifyTable> element in a change set contains an invalid definition (per TableChangeMapper's validation) — e.g. invalid column family change, unsupported element, or missing required fields.","commonSituations":"Typo or invalid attribute inside modifyTable/columnFamily elements; using a definition element not supported by the mapper version; copy-pasted modifyTable from another table with stale references.","solutions":["Read the nested cause message — it names the exact invalid element inside the modifyTable","Fix or remove the invalid modifyTable definition for the table named in the message","Validate the XML against the schema definition XSD","Check that all nested elements (e.g. createColumnFamily) are supported and non-empty"],"exampleFix":"// before\n<modifyTable name=\"AgentStat\"><unknownElement/></modifyTable>\n// after\n<modifyTable name=\"AgentStat\"><createColumnFamily name=\"CF\"></createColumnFamily></modifyTable>","handlingStrategy":"try-catch","validationCode":"// pre-check modifyTable elements for required fields before loading\nfor (Element mt : modifyTableElements) {\n    if (mt.getAttribute(\"name\").isEmpty()) throw new IllegalArgumentException(\"modifyTable missing name\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    changeSets = schemaReader.loadChangeSets(resource);\n} catch (InvalidHbaseSchemaException e) {\n    if (e.getMessage().startsWith(\"modifyTable : \")) {\n        String table = e.getMessage().split(\",\")[0].substring(\"modifyTable : \".length());\n        logger.error(\"Invalid modifyTable for {}\", table, e.getCause());\n    } else {\n        throw e;\n    }\n}","preventionTips":["Read the cause message for the exact invalid nested element","XSD-validate schema XML in CI","Keep modifyTable definitions minimal and copy only supported elements"],"tags":["hbase","xml","schema-validation","modify-table"],"backgroundTag":"schema-validation-failed","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}