{"record":{"id":"32e460fdea0a25f7","repo":"apache/dolphinscheduler","slug":"failed-to-delete-registry-key","errorCode":null,"errorMessage":"Failed to delete registry key: ","messagePattern":"Failed to delete registry key: ","errorType":"exception","errorClass":"RegistryException","httpStatus":null,"severity":"error","filePath":"dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-zookeeper/src/main/java/org/apache/dolphinscheduler/plugin/registry/zookeeper/ZookeeperRegistry.java","lineNumber":206,"sourceCode":"        try {\n            List<String> result = client.getChildren().forPath(key);\n            result.sort(Comparator.reverseOrder());\n            return result;\n        } catch (Exception e) {\n            throw new RegistryException(\"zookeeper get children error\", e);\n        }\n    }\n\n    @Override\n    public void delete(String nodePath) {\n        try {\n            client.delete()\n                    .deletingChildrenIfNeeded()\n                    .forPath(nodePath);\n        } catch (KeeperException.NoNodeException ignored) {\n            // Is already deleted or does not exist\n        } catch (Exception e) {\n            throw new RegistryException(\"Failed to delete registry key: \" + nodePath, e);\n        }\n    }\n\n    @Override\n    public boolean acquireLock(String key) {\n        Map<String, InterProcessMutex> processMutexMap = threadLocalLockMap.get();\n        if (null == processMutexMap) {\n            processMutexMap = new HashMap<>();\n            threadLocalLockMap.set(processMutexMap);\n        }\n        InterProcessMutex interProcessMutex = null;\n        try {\n            interProcessMutex =\n                    Optional.ofNullable(processMutexMap.get(key)).orElse(new InterProcessMutex(client, key));\n            interProcessMutex.acquire();\n            processMutexMap.put(key, interProcessMutex);\n            return true;\n        } catch (Exception e) {","sourceCodeStart":188,"sourceCodeEnd":224,"githubUrl":"https://github.com/apache/dolphinscheduler/blob/02eac45a1b6676e639fcbfb4be2243de5771b05d/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-zookeeper/src/main/java/org/apache/dolphinscheduler/plugin/registry/zookeeper/ZookeeperRegistry.java#L188-L224","documentation":"Wrapper thrown in ZookeeperRegistry.delete: when Curator's deletingChildrenIfNeeded fails on nodePath for a reason other than NoNode (which is ignored as already-deleted) — e.g. connection loss, session expiry, or ACL denial — it is rethrown as a RegistryException identifying the node path.","triggerScenarios":"Thrown at dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-zookeeper/src/main/java/org/apache/dolphinscheduler/plugin/registry/zookeeper/ZookeeperRegistry.java:206 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check ZooKeeper connectivity and session validity in the cause chain (ConnectionLoss, SessionExpired)","Verify ACLs allow delete on the path","Retry the delete; NoNode cases are already treated as success","Inspect the ZK server logs for the corresponding error"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"02eac45a1b6676e639fcbfb4be2243de5771b05d","analyzedAt":"2026-09-06T17:43:00.555Z","contentChangedAt":"2026-09-06T17:43:00.555Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}