pinpoint-apm/pinpoint · warning
Failed to parse application row key. rowKey=
Error message
Failed to parse application row key. rowKey={}, message={} What it means
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.
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)
Example fix
// before
} catch (Exception e) {
logger.warn("Failed to parse application row key. rowKey={}, message={}", Bytes.toStringBinary(row), e.getMessage());
return Collections.emptyList();
}
// after
} catch (Exception e) {
logger.warn("Failed to parse application row key. rowKey={}", Bytes.toStringBinary(row), e);
return Collections.emptyList();
} Defensive patterns
Strategy: fallback
Validate before calling
// check row length/layout before parsing (adjust to ApplicationRowKeyUtils layout)
if (row == null || row.length < MIN_ROW_KEY_LENGTH) {
logger.warn("skipping malformed application row: {}", Bytes.toStringBinary(row));
} Try / catch
try {
List<Application> apps = mapper.mapRow(results, rowNum);
} catch (RuntimeException e) {
logger.warn("bad application row skipped: {}", e.getMessage());
apps = Collections.emptyList();
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: "invalid id" errors: invalid identifier format — why libraries reject IDs before lookup, and how to fix them — this error's family across 37 libraries.
- Parsing and encoding errors: unexpected token, malformed input — why parsers reject input and how to find the real culprit.
Related errors
- Already closed
- AnnotationKey code of
- application is not WAS. application
- application serviceType not found. code
- application serviceType not found. code
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/3190d83b1283e2db.
Report an issue: GitHub.
Appendix: source
Thrown at web/src/main/java/com/navercorp/pinpoint/web/mapper/ApplicationMapper.java:38
private final ApplicationFactory applicationFactory;
public ApplicationMapper(ApplicationFactory applicationFactory) {
this.applicationFactory = Objects.requireNonNull(applicationFactory, "applicationFactory");
}
@Override
public List<Application> mapRow(Result result, int rowNum) throws Exception {
if (result.isEmpty()) {
return Collections.emptyList();
}
byte[] row = result.getRow();
try {
int serviceUid = ApplicationRowKeyUtils.extractServiceUid(row);
String applicationName = ApplicationRowKeyUtils.extractApplicationName(row);
int serviceTypeCode = ApplicationRowKeyUtils.extractServiceTypeCode(row);
return List.of(applicationFactory.createApplication(serviceUid, applicationName, serviceTypeCode));
} catch (Exception e) {
logger.warn("Failed to parse application row key. rowKey={}, message={}", Bytes.toStringBinary(row), e.getMessage());
return Collections.emptyList();
}
}
}
View on GitHub (pinned to 744c3d3075)