{"record":{"id":"3190d83b1283e2db","repo":"pinpoint-apm/pinpoint","slug":"failed-to-parse-application-row-key-rowkey-me","errorCode":null,"errorMessage":"Failed to parse application row key. rowKey={}, message={}","messagePattern":"Failed to parse application row key\\. rowKey=(.+?), message=(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"web/src/main/java/com/navercorp/pinpoint/web/mapper/ApplicationMapper.java","lineNumber":38,"sourceCode":"    private final ApplicationFactory applicationFactory;\n\n    public ApplicationMapper(ApplicationFactory applicationFactory) {\n        this.applicationFactory = Objects.requireNonNull(applicationFactory, \"applicationFactory\");\n    }\n\n    @Override\n    public List<Application> mapRow(Result result, int rowNum) throws Exception {\n        if (result.isEmpty()) {\n            return Collections.emptyList();\n        }\n        byte[] row = result.getRow();\n        try {\n            int serviceUid = ApplicationRowKeyUtils.extractServiceUid(row);\n            String applicationName = ApplicationRowKeyUtils.extractApplicationName(row);\n            int serviceTypeCode = ApplicationRowKeyUtils.extractServiceTypeCode(row);\n            return List.of(applicationFactory.createApplication(serviceUid, applicationName, serviceTypeCode));\n        } catch (Exception e) {\n            logger.warn(\"Failed to parse application row key. rowKey={}, message={}\", Bytes.toStringBinary(row), e.getMessage());\n            return Collections.emptyList();\n        }\n    }\n}\n","sourceCodeStart":20,"sourceCodeEnd":43,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/web/src/main/java/com/navercorp/pinpoint/web/mapper/ApplicationMapper.java#L20-L43","documentation":"ApplicationMapper.mapRow converts an HBase application row (ApplicationRow) into Application objects by extracting serviceUid, applicationName, and serviceTypeCode from the row key. If parsing fails, it logs this warning including the binary-safe row key and returns an empty list instead of throwing, so malformed rows are silently skipped.","triggerScenarios":"A row key in the ApplicationUid table does not match the expected ApplicationRowKeyUtils layout — wrong column layout, data written by an incompatible Pinpoint version, or corrupted rows.","commonSituations":"Upgrading Pinpoint with a changed row-key schema while old rows remain; manual HBase writes/imports; collector bug writing malformed rows; empty or truncated row keys.","solutions":["Identify and inspect the offending row key from the logged Bytes.toStringBinary output","Rebuild or re-sync the ApplicationUid table after version upgrades","Verify collector and web use the same ApplicationRowKeyUtils schema version","Confirm ApplicationFactory can handle the parsed name/serviceType (secondary failure source)"],"exampleFix":"// before\n} catch (Exception e) {\n    logger.warn(\"Failed to parse application row key. rowKey={}, message={}\", Bytes.toStringBinary(row), e.getMessage());\n    return Collections.emptyList();\n}\n// after\n} catch (Exception e) {\n    logger.warn(\"Failed to parse application row key. rowKey={}\", Bytes.toStringBinary(row), e);\n    return Collections.emptyList();\n}","handlingStrategy":"fallback","validationCode":"// check row length/layout before parsing (adjust to ApplicationRowKeyUtils layout)\nif (row == null || row.length < MIN_ROW_KEY_LENGTH) {\n    logger.warn(\"skipping malformed application row: {}\", Bytes.toStringBinary(row));\n}","typeGuard":null,"tryCatchPattern":"try {\n    List<Application> apps = mapper.mapRow(results, rowNum);\n} catch (RuntimeException e) {\n    logger.warn(\"bad application row skipped: {}\", e.getMessage());\n    apps = Collections.emptyList();\n}","preventionTips":["Rebuild the ApplicationUid table after Pinpoint version upgrades","Never hand-write application row keys into HBase","Alert on this warning — it silently drops rows and shrinks result sets"],"tags":["pinpoint","hbase","row-key"],"backgroundTag":"invalid-identifier-format","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}