{"record":{"id":"df6f4e5078c6b466","repo":"pinpoint-apm/pinpoint","slug":"found-rpc-fromnode-linkdata","errorCode":null,"errorMessage":"found rpc fromNode linkData:{}","messagePattern":"found rpc fromNode linkData:(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"web/src/main/java/com/navercorp/pinpoint/web/applicationmap/nodes/NodeListFactory.java","lineNumber":63,"sourceCode":"            logger.debug(\"allNode:{}\", nodeList.getNodeList());\n        }\n        return nodeList;\n    }\n\n    private static void createNode(NodeList.Builder nodeBuilder, LinkDataMap linkDataMap) {\n        for (LinkData linkData : linkDataMap.getLinkDataList()) {\n            final Application fromApplication = linkData.getFromApplication();\n            final Application toApplication = linkData.getToApplication();\n\n            // FROM is either a CLIENT or a node\n            // cannot be RPC. Already converted to unknown.\n            if (isFromNode(fromApplication, toApplication)) {\n                final boolean success = addNode(nodeBuilder, fromApplication);\n                if (success) {\n                    logger.debug(\"createSourceNode:{}\", fromApplication);\n                }\n            } else {\n                logger.warn(\"found rpc fromNode linkData:{}\", linkData);\n            }\n\n            // FROM -> TO : TO is either a CLIENT or a node\n            // create node when it's alias even if RPC\n            if (isToNode(fromApplication, toApplication)) {\n                final boolean success = addNode(nodeBuilder, toApplication);\n                if (success) {\n                    logger.debug(\"createTargetNode:{}\", toApplication);\n                }\n            } else {\n                logger.warn(\"found rpc toNode:{}\", linkData);\n            }\n        }\n    }\n\n    private static boolean isFromNode(final Application fromApplication, final Application toApplication) {\n        if (fromApplication.getServiceType().isRpcClient()) {\n            return false;","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/nodes/NodeListFactory.java#L45-L81","documentation":"createNode in NodeListFactory adds nodes to the application map from link data. If the FROM application is an RPC client but is not itself a node-eligible application (not a registered from-node), the link references an RPC entry point that cannot be materialized as a node, so this warning is logged and the node is skipped.","triggerScenarios":"A link whose source application has an RPC-client service type that fails isFromNode() (the source serviceType is not an RPC client or the destination is not a valid node), typically from unregistered RPC service types in link data.","commonSituations":"Users calling an uninstrumented RPC endpoint; serviceType not registered in types-of configuration so the RPC client classification fails; stale topology data referencing removed applications.","solutions":["Register the RPC client service type in the pinpoint service type configuration (types-yyyy.json / service-type.yml)","Verify the fromApplication's serviceTypeCode is correctly mapped on both collector and web","Check that the frontend's link query supplies the correct source application","Ignore if the RPC node is intentionally not displayed"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// check the source service type before creating map nodes\nif (!fromApplication.getServiceType().isRpcClient() || !isKnownServiceType(fromApplication.getServiceTypeCode())) {\n    logger.warn(\"source {} is not a valid from-node\", fromApplication);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Register all custom RPC service types in web/collector service-type config","Keep service type definitions identical across collector, web, and agents","Verify topology link data sources before rendering the map"],"tags":["pinpoint","application-map","service-type"],"backgroundTag":"unexpected-response-shape","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"}