From 85c4f0191d04c86c522b94a6c11998b1aacee5a6 Mon Sep 17 00:00:00 2001 From: Dave Marion Date: Fri, 21 Feb 2025 15:48:47 +0000 Subject: [PATCH] Modified Upgrader11to12.upgradeZookeeper to be idempotent The namespace modifications that happen in this method can only be run once. On the second invocation this method would throw an IllegalStateException. Closes #5347 --- .../manager/upgrade/Upgrader11to12.java | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/upgrade/Upgrader11to12.java b/server/manager/src/main/java/org/apache/accumulo/manager/upgrade/Upgrader11to12.java index a7a6eb07519..6be0d794184 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/upgrade/Upgrader11to12.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/upgrade/Upgrader11to12.java @@ -134,22 +134,20 @@ public void upgradeZookeeper(@NonNull ServerContext context) { String zPath = context.getZooKeeperRoot() + Constants.ZNAMESPACES; byte[] namespacesData = zrw.getData(zPath); - if (namespacesData.length != 0) { - throw new IllegalStateException( - "Unexpected data found under namespaces node: " + new String(namespacesData, UTF_8)); - } - List namespaceIdList = zrw.getChildren(zPath); - Map namespaceMap = new HashMap<>(); - for (String namespaceId : namespaceIdList) { - String namespaceNamePath = zPath + "/" + namespaceId + ZNAMESPACE_NAME; - namespaceMap.put(namespaceId, new String(zrw.getData(namespaceNamePath), UTF_8)); - } - byte[] mapping = NamespaceMapping.serialize(namespaceMap); - zrw.putPersistentData(zPath, mapping, ZooUtil.NodeExistsPolicy.OVERWRITE); + if (namespacesData.length == 0) { + List namespaceIdList = zrw.getChildren(zPath); + Map namespaceMap = new HashMap<>(); + for (String namespaceId : namespaceIdList) { + String namespaceNamePath = zPath + "/" + namespaceId + ZNAMESPACE_NAME; + namespaceMap.put(namespaceId, new String(zrw.getData(namespaceNamePath), UTF_8)); + } + byte[] mapping = NamespaceMapping.serialize(namespaceMap); + zrw.putPersistentData(zPath, mapping, ZooUtil.NodeExistsPolicy.OVERWRITE); - for (String namespaceId : namespaceIdList) { - String namespaceNamePath = zPath + "/" + namespaceId + ZNAMESPACE_NAME; - zrw.delete(namespaceNamePath); + for (String namespaceId : namespaceIdList) { + String namespaceNamePath = zPath + "/" + namespaceId + ZNAMESPACE_NAME; + zrw.delete(namespaceNamePath); + } } log.info("Removing problems reports from zookeeper");