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

  1. Identify and inspect the offending row key from the logged Bytes.toStringBinary output
  2. Rebuild or re-sync the ApplicationUid table after version upgrades
  3. Verify collector and web use the same ApplicationRowKeyUtils schema version
  4. 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

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.

Related errors


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)