{"record":{"id":"f4d0d773039ef032","repo":"apache/shenyu","slug":"the-default-namespace-cannot-delete","errorCode":null,"errorMessage":"The default namespace cannot delete！","messagePattern":"The default namespace cannot delete！","errorType":"validation","errorClass":"ShenyuAdminException","httpStatus":null,"severity":"error","filePath":"shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/NamespaceServiceImpl.java","lineNumber":137,"sourceCode":"            List<NamespaceDO> allList = namespaceMapper.selectAll();\n            namespaceIds = allList.stream().map(NamespaceDO::getNamespaceId).toList();\n        } else {\n            namespaceIds = namespaceUserService.listNamespaceIdByUserId(SessionUtil.visitorId());\n        }\n        if (CollectionUtils.isEmpty(namespaceIds)) {\n            return new CommonPager<>();\n        }\n        namespaceQuery.setNamespaceIds(namespaceIds);\n        return PageResultUtils.result(namespaceQuery.getPageParameter(), () -> namespaceMapper.countByQuery(namespaceQuery), () -> namespaceMapper.selectByQuery(namespaceQuery)\n                .stream()\n                .map(NamespaceTransfer.INSTANCE::mapToVo)\n                .collect(Collectors.toList()));\n    }\n\n    @Override\n    public String delete(final List<String> ids) {\n        if (ids.contains(Constants.DEFAULT_NAMESPACE_PRIMARY_KEY)) {\n            throw new ShenyuAdminException(AdminConstants.SYS_DEFAULT_NAMESPACE_ID_DELETE);\n        }\n        List<String> namespaceIdList = namespaceMapper.selectByIds(ids).stream().map(NamespaceDO::getNamespaceId).collect(Collectors.toList());\n        if (CollectionUtils.isEmpty(namespaceIdList)) {\n            throw new ShenyuAdminException(AdminConstants.SYS_NAMESPACE_ID_NOT_EXIST);\n        }\n        List<RuleDO> ruleDOList = ruleMapper.selectAllByNamespaceIds(namespaceIdList);\n        if (CollectionUtils.isNotEmpty(ruleDOList)) {\n            throw new ShenyuAdminException(\"rule exist under those namespace!\");\n        }\n        List<SelectorDO> selectorDOS = selectorMapper.selectAllByNamespaceIds(namespaceIdList);\n        if (CollectionUtils.isNotEmpty(selectorDOS)) {\n            throw new ShenyuAdminException(\"selector exist under those namespace!\");\n        }\n        List<NamespacePluginVO> namespacePluginVOS = namespacePluginRelMapper.selectAllByNamespaceIds(namespaceIdList);\n        if (CollectionUtils.isNotEmpty(namespacePluginVOS)) {\n            throw new ShenyuAdminException(\"Plugins exist under those namespace!\");\n        }\n        List<MetaDataDO> metaDataDOList = metaDataMapper.findAllByNamespaceIds(namespaceIdList);","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/apache/shenyu/blob/567142e07261b3e615ae8850b30f4421f455cc5d/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/NamespaceServiceImpl.java#L119-L155","documentation":"Thrown by NamespaceServiceImpl.delete when the id list includes the built-in default namespace primary key (Constants.DEFAULT_NAMESPACE_PRIMARY_KEY). ShenYu protects the default namespace from deletion because the gateway and bootstrap config depend on it.","triggerScenarios":"Calling DELETE /namespace with ids containing the default namespace id ('1' by default); batch-selecting all rows in the dashboard including the default namespace and deleting; scripts that enumerate namespaces and pass every id.","commonSituations":"Bulk cleanup scripts that do not filter the default namespace; admins unfamiliar with the namespace model trying to remove the pre-provisioned namespace.","solutions":["Remove the default namespace id from the ids list before calling delete","Filter in UI/scripts: exclude Constants.DEFAULT_NAMESPACE_PRIMARY_KEY from batch deletion","Operate only on custom-created namespaces"],"exampleFix":"// before\nnamespaceService.delete(allIds);\n// after\nList<String> deletable = allIds.stream()\n    .filter(id -> !Constants.DEFAULT_NAMESPACE_PRIMARY_KEY.equals(id))\n    .collect(Collectors.toList());\nif (!deletable.isEmpty()) {\n    namespaceService.delete(deletable);\n}","handlingStrategy":"validation","validationCode":"if (ids.contains(Constants.DEFAULT_NAMESPACE_PRIMARY_KEY)) {\n    throw new IllegalArgumentException(\"default namespace cannot be deleted\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    namespaceService.delete(ids);\n} catch (ShenyuAdminException e) {\n    if (AdminConstants.SYS_DEFAULT_NAMESPACE_ID_DELETE.equals(e.getMessage())) {\n        LOG.warn(\"default namespace excluded from deletion\");\n    } else {\n        throw e;\n    }\n}","preventionTips":["Never include the default namespace id in batch deletes","Filter protected ids in UI selections and scripts","Document the protected default namespace for operators"],"tags":["shenyu","admin","namespace","protected-resource"],"backgroundTag":"unsupported-operation","analyzedSha":"567142e07261b3e615ae8850b30f4421f455cc5d","analyzedAt":"2026-09-12T10:08:21.293Z","contentChangedAt":"2026-09-12T10:08:21.293Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}