pinpoint-apm/pinpoint · warning
from UserNode not found:{}
Error message
from UserNode not found:{} What it means
In DefaultNodeHistogramFactory.createUserNodeHistogram, a User node's histogram is derived from its single incoming (source) link. When linkList.findFromLink(userApplication) returns no links, the factory logs 'from UserNode not found' and returns an empty NodeHistogram instead of throwing. It signals the application map builder never created the user-to-application link this node depends on.
Source
Thrown at web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/DefaultNodeHistogramFactory.java:115
find.add(histogram.getHistogram());
}
nodeBuilder.setAgentHistogramMap(agentHistogramMap);
}
AgentTimeHistogramBuilder agentTimeBuilder = new AgentTimeHistogramBuilder(terminalApplication, range);
AgentTimeHistogram agentTimeHistogram = agentTimeBuilder.buildTarget(mergeSource);
nodeBuilder.setAgentTimeHistogram(agentTimeHistogram);
}
return nodeBuilder.build();
}
@Override
public NodeHistogram createUserNodeHistogram(Application userApplication, Range range, LinkList linkList) {
// for User nodes, find its source link and create the histogram
final List<Link> fromLink = linkList.findFromLink(userApplication);
if (fromLink.isEmpty()) {
logger.warn("from UserNode not found:{}", userApplication);
return createEmptyNodeHistogram(userApplication, range);
} else if (fromLink.size() > 1) {
// log and use first(0) link.
logger.warn("Invalid from UserNode:{}", linkList.getLinkList());
}
final Link sourceLink = fromLink.get(0);
final NodeHistogram.Builder builder = NodeHistogram.newBuilder(userApplication, range);
builder.setApplicationHistogram(sourceLink.getHistogram());
ApplicationTimeHistogram histogramData = sourceLink.getTargetApplicationTimeSeriesHistogramData();
builder.setApplicationTimeHistogram(histogramData);
return builder.build();
}
@Override
public NodeHistogram createQueueNodeHistogram(Application queueApplication, Range range, LinkList linkList) {
final List<Link> toLinkList = linkList.findToLink(queueApplication);View on GitHub (pinned to 744c3d3075)
Solutions
- Ensure the link-building phase includes user links (verify user-link creation in the map appender when User nodes are enabled).
- Confirm the same Range is used for both node and link creation so the user link is present in linkList.
- Check whether link building hit the maximum-link limit and dropped the user link; increase the limit or narrow the range.
- Accept the empty NodeHistogram fallback if user-node data is optional for your view.
Example fix
// before
NodeHistogram nh = factory.createUserNodeHistogram(userApp, range, linkList);
// after
List<Link> fromLink = linkList.findFromLink(userApp);
if (!fromLink.isEmpty()) {
NodeHistogram nh = factory.createUserNodeHistogram(userApp, range, linkList);
} else {
logger.debug("user link absent for {}; skipping user node histogram", userApp);
} Defensive patterns
Strategy: fallback
Validate before calling
// check before building the user node histogram
boolean hasUserLink = !linkList.findFromLink(userApplication).isEmpty();
if (!hasUserLink) {
logger.debug("user link missing for {} in range {}", userApplication, range);
} Prevention
- Enable user-link creation in the map builder whenever user nodes are enabled.
- Use identical Range objects for link and node construction phases.
- Watch link limits so the user link is not silently dropped.
- Treat the empty NodeHistogram return as a designed fallback and render the node without histogram data.
When it happens
Trigger: Calling createUserNodeHistogram(userApplication, range, linkList) where the LinkList contains no link whose to-service equals the user Application — i.e. the map builder skipped adding the USER->APP link while the USER node was still created.
Common situations: User nodes enabled (user scatter / virtual node 'user') but link data collection skipped the user link; link search range/time mismatch between node and link build phases; link limit reached so the user link was dropped; mixed node/link datasets from different map snapshots.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- from UserNode not found:{}
- Invalid from UserNode:{}
- Invalid from UserNode:{}
- Too many link data. Reduce the values of the Inbound/outboun
- agent list is empty for application:{}
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/ea8a431785bd60b2.
Report an issue: GitHub.