pinpoint-apm/pinpoint · warning · UnsupportedOperationException

Service map is not enabled

Error message

Service map is not enabled

What it means

MapController.getServiceMapData checks mapProperties.isEnableServiceMap() before building the service map. When the feature flag is disabled it logs a warning and throws UnsupportedOperationException. This is an intentional kill-switch for deployments that disable the server map feature.

Solutions

  1. Set config.enable.service.map=true in pinpoint-web.properties and restart the web module
  2. If the map should stay disabled, stop calling the service map endpoints and use alternatives
  3. Confirm the deployed profile actually loads the properties file you edited

Example fix

// before (pinpoint-web.properties)
config.enable.service.map=false
// after
config.enable.service.map=true
Defensive patterns

Strategy: try-catch

Try / catch

try {
    ServiceMapView view = mapController.getServiceMapData(...);
} catch (UnsupportedOperationException e) {
    if (e.getMessage().contains("Service map is not enabled")) {
        // render 'feature disabled' UI state
    } else throw e;
}

Prevention

When it happens

Trigger: Calling the server map endpoint (e.g. /getServiceMapData) while the configuration property enableServiceMap is false in Pinpoint web configuration (pinpoint-web.properties: config.enable.service.map=false).

Common situations: Deployments that disabled the service map for performance or security reasons; users hitting the UI/API after an upgrade where the default changed; docker/k8s env vars setting the flag off.

Related errors


AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07). Data as JSON: /api/errors/f5205aad7a416df2. Report an issue: GitHub.

Appendix: source

Thrown at web/src/main/java/com/navercorp/pinpoint/web/applicationmap/controller/MapController.java:155

        LinkRender linkRender = LinkRender.forServerMap();
        ApplicationMapView applicationMapView = new ApplicationMapViewV3(map, timeWindow, nodeRender, linkRender);

        return new MapWrap<>(applicationMapView);
    }

    @GetMapping(value = "/serviceMap")
    public MapWrap<ServiceMapView> getServiceMapData(
            @ServiceParam ServiceName serviceName,
            @ModelAttribute
            ApplicationForm appForm,
            @Valid @ModelAttribute
            RangeForm rangeForm,
            @RequestParam(value = "useStatisticsAgentState", defaultValue = "false", required = false)
            boolean useStatisticsAgentState
    ) {
        if (!mapProperties.isEnableServiceMap()) {
            logger.warn("Service map is not enabled");
            throw new UnsupportedOperationException("Service map is not enabled");
        }
        final TimeWindow timeWindow = newTimeWindow(rangeForm);
        final SearchOption searchOption = searchOptionBuilder().build(SearchOptionForm.DEFAULT_SEARCH_DEPTH, SearchOptionForm.DEFAULT_SEARCH_DEPTH, false, false);
        final Service service = serviceModelResolver.getService(serviceName.getName());
        final List<Application> sourceApplications = getSourceApplications(service, appForm);
        final ApplicationMap map = selectServiceMap(service, sourceApplications, timeWindow, searchOption, useStatisticsAgentState);

        NodeRender nodeRender = NodeRender.forServiceMap();
        LinkRender linkRender = LinkRender.forServiceMap();
        final Set<String> expandedServiceNames = Set.of(serviceName.getName());
        ServiceMapViewBuilder builder = new ServiceMapViewBuilder(map, timeWindow, nodeRender, linkRender, expandedServiceNames);
        return new MapWrap<>(builder.build());
    }

    private ApplicationMap selectServiceMap(Service service, List<Application> sourceApplications, TimeWindow timeWindow, SearchOption searchOption, boolean useStatisticsAgentState) {
        if (sourceApplications.isEmpty()) {
            logger.info("Select serviceMap. no applications found. service={}", service);
            return new SimpleApplicationMap(NodeList.EMPTY, LinkList.EMPTY, timeWindow.getWindowRange());

View on GitHub (pinned to 744c3d3075)