From dfb4829637bb9c949a499e163d0a95f150fb895b Mon Sep 17 00:00:00 2001 From: Oleksandra Matviienko Date: Mon, 27 Apr 2026 11:37:35 +0200 Subject: [PATCH] Create ZK nodes container before starting CuratorCache PathChildrenCache invoked EnsureContainers internally during start(), so the parent znode existed when publishCurrentServer ran. CuratorCache does not, so on a fresh ZK creatingParentsIfNeeded reaches ZKPaths.mkdirs with the trailing-slash forPath argument and fails with "Path must not end with / character", aborting Spring startup. --- .../thingsboard/server/queue/discovery/ZkDiscoveryService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/discovery/ZkDiscoveryService.java b/common/queue/src/main/java/org/thingsboard/server/queue/discovery/ZkDiscoveryService.java index a1cbe6332e..47c2761020 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/discovery/ZkDiscoveryService.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/discovery/ZkDiscoveryService.java @@ -241,6 +241,7 @@ public class ZkDiscoveryService implements DiscoveryService { client = CuratorFrameworkFactory.newClient(zkUrl, zkSessionTimeout, zkConnectionTimeout, new RetryForever(zkRetryInterval)); client.start(); client.blockUntilConnected(); + client.createContainers(zkNodesDir); cache = CuratorCache.builder(client, zkNodesDir).build(); cache.start(); stopped = false;