{"record":{"id":"f5205aad7a416df2","repo":"pinpoint-apm/pinpoint","slug":"service-map-is-not-enabled","errorCode":null,"errorMessage":"Service map is not enabled","messagePattern":"Service map is not enabled","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"warning","filePath":"web/src/main/java/com/navercorp/pinpoint/web/applicationmap/controller/MapController.java","lineNumber":155,"sourceCode":"        LinkRender linkRender = LinkRender.forServerMap();\n        ApplicationMapView applicationMapView = new ApplicationMapViewV3(map, timeWindow, nodeRender, linkRender);\n\n        return new MapWrap<>(applicationMapView);\n    }\n\n    @GetMapping(value = \"/serviceMap\")\n    public MapWrap<ServiceMapView> getServiceMapData(\n            @ServiceParam ServiceName serviceName,\n            @ModelAttribute\n            ApplicationForm appForm,\n            @Valid @ModelAttribute\n            RangeForm rangeForm,\n            @RequestParam(value = \"useStatisticsAgentState\", defaultValue = \"false\", required = false)\n            boolean useStatisticsAgentState\n    ) {\n        if (!mapProperties.isEnableServiceMap()) {\n            logger.warn(\"Service map is not enabled\");\n            throw new UnsupportedOperationException(\"Service map is not enabled\");\n        }\n        final TimeWindow timeWindow = newTimeWindow(rangeForm);\n        final SearchOption searchOption = searchOptionBuilder().build(SearchOptionForm.DEFAULT_SEARCH_DEPTH, SearchOptionForm.DEFAULT_SEARCH_DEPTH, false, false);\n        final Service service = serviceModelResolver.getService(serviceName.getName());\n        final List<Application> sourceApplications = getSourceApplications(service, appForm);\n        final ApplicationMap map = selectServiceMap(service, sourceApplications, timeWindow, searchOption, useStatisticsAgentState);\n\n        NodeRender nodeRender = NodeRender.forServiceMap();\n        LinkRender linkRender = LinkRender.forServiceMap();\n        final Set<String> expandedServiceNames = Set.of(serviceName.getName());\n        ServiceMapViewBuilder builder = new ServiceMapViewBuilder(map, timeWindow, nodeRender, linkRender, expandedServiceNames);\n        return new MapWrap<>(builder.build());\n    }\n\n    private ApplicationMap selectServiceMap(Service service, List<Application> sourceApplications, TimeWindow timeWindow, SearchOption searchOption, boolean useStatisticsAgentState) {\n        if (sourceApplications.isEmpty()) {\n            logger.info(\"Select serviceMap. no applications found. service={}\", service);\n            return new SimpleApplicationMap(NodeList.EMPTY, LinkList.EMPTY, timeWindow.getWindowRange());","sourceCodeStart":137,"sourceCodeEnd":173,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/controller/MapController.java#L137-L173","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","solutions":["Set config.enable.service.map=true in pinpoint-web.properties and restart the web module","If the map should stay disabled, stop calling the service map endpoints and use alternatives","Confirm the deployed profile actually loads the properties file you edited"],"exampleFix":"// before (pinpoint-web.properties)\nconfig.enable.service.map=false\n// after\nconfig.enable.service.map=true","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n    ServiceMapView view = mapController.getServiceMapData(...);\n} catch (UnsupportedOperationException e) {\n    if (e.getMessage().contains(\"Service map is not enabled\")) {\n        // render 'feature disabled' UI state\n    } else throw e;\n}","preventionTips":["Check mapProperties.isEnableServiceMap() (or the corresponding config property) before exposing map UI/links","Document the enable/disable flag for your deployment","Use a consistent profile so the flag isn't accidentally off in production"],"tags":["feature-flag","unsupported-operation","config"],"backgroundTag":"feature-not-enabled","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}