public synchronized boolean deleteTrieNode()

in mqtt-common/src/main/java/org/apache/rocketmq/mqtt/common/model/Trie.java [95:124]


    public synchronized boolean deleteTrieNode(String key, K valueKey) {
        try {
            if (!nodePath.contains(key)) {
                return false;
            }
            String[] keyArray = key.split(Constants.MQTT_TOPIC_DELIMITER);
            TrieNode<K, V> currentNode = rootNode;
            int level = 0;
            while (level < keyArray.length) {
                TrieNode trieNode = currentNode.children.get(keyArray[level]);
                if (trieNode == null) {
                    break;
                }
                level++;
                currentNode = trieNode;
            }
            V oldValue = currentNode.valueSet.remove(valueKey);
            currentNode.end = false;
            //clean the empty node
            while (currentNode.children.isEmpty() && currentNode.valueSet.isEmpty() && currentNode.parentNode != null) {
                currentNode.parentNode.children.remove(keyArray[--level]);
                currentNode = currentNode.parentNode;
            }
            this.nodePath.remove(key);

            return true;
        } catch (Throwable e) {
            throw new TrieException(e);
        }
    }