{"record":{"id":"5970efcd176284ac","repo":"apache/shenyu","slug":"metadata-exist-under-those-namespace","errorCode":null,"errorMessage":"metaData exist under those namespace!","messagePattern":"metaData exist under those namespace!","errorType":"exception","errorClass":"ShenyuAdminException","httpStatus":null,"severity":"error","filePath":"shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/NamespaceServiceImpl.java","lineNumber":157,"sourceCode":"        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);\n        if (CollectionUtils.isNotEmpty(metaDataDOList)) {\n            throw new ShenyuAdminException(\"metaData exist under those namespace!\");\n        }\n        List<AppAuthDO> appPathDOList = appAuthMapper.findByNamespaceIds(namespaceIdList);\n        if (CollectionUtils.isNotEmpty(appPathDOList)) {\n            throw new ShenyuAdminException(\"appPath exist under those namespace!\");\n        }\n        namespaceMapper.deleteByIds(ids);\n        return ShenyuResultMessage.DELETE_SUCCESS;\n    }\n\n    @Override\n    public NamespaceVO findById(final String id) {\n        return NamespaceTransfer.INSTANCE.mapToVo(namespaceMapper.selectById(id));\n    }\n\n    @Override\n    public NamespaceVO findByNamespaceId(final String namespaceId) {\n        return NamespaceTransfer.INSTANCE.mapToVo(namespaceMapper.selectByNamespaceId(namespaceId));\n    }","sourceCodeStart":139,"sourceCodeEnd":175,"githubUrl":"https://github.com/apache/shenyu/blob/567142e07261b3e615ae8850b30f4421f455cc5d/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/NamespaceServiceImpl.java#L139-L175","documentation":"ShenYu admin refuses to delete a namespace while metadata rows still reference it. Metadata (API metadata registered by backend clients) must be removed before the namespace can be deleted; otherwise the delete is aborted with this ShenyuAdminException.","triggerScenarios":"Calling NamespaceService.delete when metaDataMapper.findAllByNamespaceIds returns rows for the target namespaces. Rules, selectors and plugin relations must already be empty for the flow to reach this check.","commonSituations":"Deleting a namespace whose backend services are still registered (clients auto-register metadata via shenyu-register-center); decommissioning a namespace before unregistering/deregistering its API clients.","solutions":["Unregister the backend clients / delete metadata under the namespace first","Delete the metadata entries via the dashboard metadata page or metadata service API","Check the metadata table for the namespaceIds and remove those rows, then retry"],"exampleFix":"// before\nnamespaceService.delete(Arrays.asList(\"ns-prod\")); // throws: metaData exist under those namespace!\n// after\nmetaDataService.deleteByNamespace(\"ns-prod\"); // remove registered metadata first\nnamespaceService.delete(Arrays.asList(\"ns-prod\"));","handlingStrategy":"validation","validationCode":"if (metaDataMapper.findAllByNamespaceIds(namespaceIds).isEmpty()) {\n    namespaceService.delete(namespaceIds);\n}","typeGuard":null,"tryCatchPattern":"try {\n    namespaceService.delete(namespaceIds);\n} catch (ShenyuAdminException e) {\n    if (e.getMessage().contains(\"metaData exist\")) {\n        // deregister clients / delete metadata, then retry\n    } else {\n        throw e;\n    }\n}","preventionTips":["Deregister or stop all backend clients pointing at the namespace before deleting it","Purge metadata via the dashboard metadata page as part of namespace teardown","Remember registration is asynchronous (disruptor pipeline): wait for deregistration to complete before deleting"],"tags":["shenyu","admin","namespace","metadata","referential-integrity"],"backgroundTag":"invalid-state-transition","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"}