{"record":{"id":"267e4545d14cc003","repo":"pinpoint-apm/pinpoint","slug":"found-rpc-tonode","errorCode":null,"errorMessage":"found rpc toNode:{}","messagePattern":"found rpc toNode:(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"web/src/main/java/com/navercorp/pinpoint/web/applicationmap/nodes/NodeListFactory.java","lineNumber":74,"sourceCode":"            // 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;\n        }\n        return true;\n    }\n\n    private static boolean isToNode(final Application fromApplication, final Application toApplication) {\n        if (!toApplication.getServiceType().isRpcClient()) {\n            return true;\n        }\n        if (toApplication.getServiceType().isAlias()) {\n            return true;\n        }","sourceCodeStart":56,"sourceCodeEnd":92,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/nodes/NodeListFactory.java#L56-L92","documentation":"The symmetric counterpart of the fromNode warning: when the TO application of a link is not a node-eligible target (isToNode fails), createNode logs this warning and skips creating the destination node. The link data references a destination that cannot be represented as an application-map node.","triggerScenarios":"Link data whose toApplication has an RPC/unregistered service type that is not a valid node target — e.g. destination serviceType is RpcClient/unknown, or alias handling fails.","commonSituations":"Calls to unregistered backend technologies (custom service types not configured); destination applications deleted or renamed; RPC addresses used as destinations without alias registration.","solutions":["Register the destination's service type in the web/collector service-type configuration","Use an application alias so the RPC destination maps to a real node","Confirm the link's toApplication name/serviceType match the actual destination agent's config","Ignore if the destination is intentionally external"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// ensure the destination resolves to a real node\nif (!toApplication.getServiceType().isWas() && !isToNode(fromApplication, toApplication)) {\n    logger.warn(\"destination {} cannot be a node; consider an alias\", toApplication);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Register aliases for RPC destinations that should appear as nodes","Keep custom service-type config in sync between components","Avoid renaming/deleting destination applications without updating topology data"],"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"}