From af373f782c0ce1e700cad6c6786d8c2dcc6532e6 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Fri, 20 Nov 2020 09:49:29 +0100 Subject: Create path first if necessary in set() Checking for existence and creating and setting data might fail if node was created after check. Use internal method to create, which handles node being created after checking for existence. --- zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java b/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java index 6cbfa274c56..50de02d1abd 100644 --- a/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java +++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java @@ -243,13 +243,14 @@ public class Curator implements AutoCloseable { * A convenience method which sets some content at a path. * If the path and any of its parents does not exists they are created. */ + // TODO: Use create().orSetData() in Curator 4 and later public void set(Path path, byte[] data) { + if ( ! exists(path)) + create(path); + String absolutePath = path.getAbsolute(); try { - if ( ! exists(path)) - framework().create().creatingParentsIfNeeded().forPath(absolutePath, data); - else - framework().setData().forPath(absolutePath, data); + framework().setData().forPath(absolutePath, data); } catch (Exception e) { throw new RuntimeException("Could not set data at " + absolutePath, e); } -- cgit v1.2.3