This is an automated email from the ASF dual-hosted git repository. ctubbsii pushed a commit to branch 3.1 in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/3.1 by this push: new dd2d40ff41 Use util code to identify root ZooKeeper path (#5120) dd2d40ff41 is described below commit dd2d40ff4171221daf540e0f78bd6e56f878fc06 Author: Christopher Tubbs <ctubb...@apache.org> AuthorDate: Wed Nov 27 22:57:21 2024 -0500 Use util code to identify root ZooKeeper path (#5120) Avoid direct use of `Constants.ZROOT + "/" + instanceId` and use the existing `ZooUtil.getRoot(instanceId)` that was made for this purpose instead wherever possible. If a ServerContext is available, use `context.getZooKeeperRoot()` instead. * Use ZooUtil.getRoot() or ServerContext.getZooKeeperRoot() * Use Constants where not currently being used * Remove redundant ZKSecurityTool.getInstancePath * Remove redundant Manager methods that passthrough to ServerContext * Update related tests * Fix use of EasyMock in modified tests: RootTabletLocatorTest and ZookeeperLockCheckerTest * Avoid hard-coded "/accumulo/" in hdfs paths in some ITs that were false-positive potential uses of Constants.ZROOT when I was looking for possibility of replacing literals with constants. For these false-positives, retrieve the actual path from the MiniAccumuloConfig's "instance.volumes" property value, rather than make assumptions about the layout of MiniAccumuloCluster's setup. --- .../accumulo/core/clientImpl/ClientContext.java | 3 +- .../core/clientImpl/RootTabletLocatorTest.java | 29 ++++++++++--- .../core/clientImpl/ZookeeperLockCheckerTest.java | 29 ++++++++++--- .../MiniAccumuloClusterExistingZooKeepersTest.java | 7 +++- .../org/apache/accumulo/server/ServerContext.java | 3 +- .../org/apache/accumulo/server/ServerInfo.java | 3 +- .../accumulo/server/init/ZooKeeperInitializer.java | 4 +- .../server/security/handler/ZKPermHandler.java | 7 ++-- .../server/security/handler/ZKSecurityTool.java | 5 --- .../accumulo/server/tables/TableManager.java | 11 ++--- .../server/tablets/UniqueNameAllocator.java | 2 +- .../apache/accumulo/server/util/ChangeSecret.java | 5 ++- .../apache/accumulo/server/util/ListInstances.java | 4 +- .../apache/accumulo/server/util/ZooKeeperMain.java | 2 +- .../org/apache/accumulo/server/util/ZooZap.java | 11 ++--- .../apache/accumulo/server/MockServerContext.java | 8 ++-- .../conf/ServerConfigurationFactoryTest.java | 3 +- .../server/conf/store/PropStoreKeyTest.java | 46 ++++++++++----------- .../server/conf/store/impl/PropStoreEventTest.java | 3 +- .../server/conf/store/impl/ZooPropStoreTest.java | 3 +- .../ZooAuthenticationKeyWatcherTest.java | 3 +- .../security/handler/ZKAuthenticatorTest.java | 13 +++--- .../org/apache/accumulo/server/util/AdminTest.java | 47 +++++++++++++--------- .../accumulo/server/util/ServiceStatusCmdTest.java | 3 +- .../org/apache/accumulo/compactor/Compactor.java | 4 +- .../java/org/apache/accumulo/manager/Manager.java | 38 +++++++---------- .../manager/ManagerClientServiceHandler.java | 4 +- .../org/apache/accumulo/manager/ManagerTime.java | 2 +- .../accumulo/manager/recovery/RecoveryManager.java | 12 +++--- .../apache/accumulo/manager/state/MergeStats.java | 5 +-- .../manager/tableOps/compact/CompactRange.java | 8 ++-- .../manager/tableOps/compact/CompactionDriver.java | 8 ++-- .../tableOps/compact/cancel/CancelCompactions.java | 6 +-- .../manager/tableOps/delete/PreDeleteTable.java | 6 ++- .../create/PopulateZookeeperWithNamespace.java | 4 +- .../tableOps/namespace/rename/RenameNamespace.java | 4 +- .../manager/tableOps/rename/RenameTable.java | 4 +- .../manager/tserverOps/ShutdownTServer.java | 7 ++-- .../accumulo/manager/upgrade/Upgrader11to12.java | 2 +- .../tableOps/compact/CompactionDriverTest.java | 43 +++++++++++--------- .../manager/upgrade/Upgrader11to12Test.java | 47 ++++++++++------------ .../org/apache/accumulo/tserver/tablet/Tablet.java | 12 +++--- .../org/apache/accumulo/test/ExistingMacIT.java | 4 +- .../org/apache/accumulo/test/ImportExportIT.java | 7 +++- .../ThriftServerBindsBeforeZooKeeperLockIT.java | 7 +--- .../org/apache/accumulo/test/VolumeManagerIT.java | 16 ++++++-- .../accumulo/test/fate/zookeeper/FateIT.java | 5 ++- .../accumulo/test/fate/zookeeper/ZooMutatorIT.java | 4 +- .../accumulo/test/functional/BackupManagerIT.java | 2 +- .../accumulo/test/functional/CloneTestIT.java | 11 +++-- .../test/functional/GarbageCollectorIT.java | 4 +- .../apache/accumulo/test/functional/TableIT.java | 10 +++-- .../apache/accumulo/test/lock/ServiceLockIT.java | 3 +- 53 files changed, 306 insertions(+), 237 deletions(-) diff --git a/core/src/main/java/org/apache/accumulo/core/clientImpl/ClientContext.java b/core/src/main/java/org/apache/accumulo/core/clientImpl/ClientContext.java index 298a14329d..67fec0bfbc 100644 --- a/core/src/main/java/org/apache/accumulo/core/clientImpl/ClientContext.java +++ b/core/src/main/java/org/apache/accumulo/core/clientImpl/ClientContext.java @@ -510,8 +510,7 @@ public class ClientContext implements AccumuloClient { */ public List<String> getManagerLocations() { ensureOpen(); - var zLockManagerPath = - ServiceLock.path(Constants.ZROOT + "/" + getInstanceID() + Constants.ZMANAGER_LOCK); + var zLockManagerPath = ServiceLock.path(getZooKeeperRoot() + Constants.ZMANAGER_LOCK); Timer timer = null; diff --git a/core/src/test/java/org/apache/accumulo/core/clientImpl/RootTabletLocatorTest.java b/core/src/test/java/org/apache/accumulo/core/clientImpl/RootTabletLocatorTest.java index 64f497d030..0fa52ec2c0 100644 --- a/core/src/test/java/org/apache/accumulo/core/clientImpl/RootTabletLocatorTest.java +++ b/core/src/test/java/org/apache/accumulo/core/clientImpl/RootTabletLocatorTest.java @@ -20,37 +20,54 @@ package org.apache.accumulo.core.clientImpl; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.expectLastCall; import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.reset; import static org.easymock.EasyMock.verify; +import java.util.UUID; + import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.clientImpl.TabletLocatorImpl.TabletServerLockChecker; +import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.fate.zookeeper.ZooCache; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class RootTabletLocatorTest { + private ClientContext context; private TabletServerLockChecker lockChecker; private ZooCache zc; - private RootTabletLocator rtl; @BeforeEach public void setUp() { - context = createMock(ClientContext.class); - expect(context.getZooKeeperRoot()).andReturn("/accumulo/iid").anyTimes(); + var instanceId = InstanceId.of(UUID.randomUUID()); zc = createMock(ZooCache.class); + context = createMock(ClientContext.class); + expect(context.getZooKeeperRoot()).andReturn(ZooUtil.getRoot(instanceId)).anyTimes(); expect(context.getZooCache()).andReturn(zc).anyTimes(); - replay(context); lockChecker = createMock(TabletServerLockChecker.class); - rtl = new RootTabletLocator(lockChecker); + replay(context, zc, lockChecker); + } + + @AfterEach + public void tearDown() { + verify(context, zc, lockChecker); } @Test public void testInvalidateCache_Server() { + var rtl = new RootTabletLocator(lockChecker); + + verify(zc); + reset(zc); zc.clear(context.getZooKeeperRoot() + Constants.ZTSERVERS + "/server"); + expectLastCall().once(); replay(zc); + rtl.invalidateCache(context, "server"); - verify(zc); } } diff --git a/core/src/test/java/org/apache/accumulo/core/clientImpl/ZookeeperLockCheckerTest.java b/core/src/test/java/org/apache/accumulo/core/clientImpl/ZookeeperLockCheckerTest.java index 7776a55aa1..991e4d2dba 100644 --- a/core/src/test/java/org/apache/accumulo/core/clientImpl/ZookeeperLockCheckerTest.java +++ b/core/src/test/java/org/apache/accumulo/core/clientImpl/ZookeeperLockCheckerTest.java @@ -20,34 +20,51 @@ package org.apache.accumulo.core.clientImpl; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.expectLastCall; import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.reset; import static org.easymock.EasyMock.verify; +import java.util.UUID; + import org.apache.accumulo.core.Constants; +import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.fate.zookeeper.ZooCache; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class ZookeeperLockCheckerTest { + private ClientContext context; private ZooCache zc; - private ZookeeperLockChecker zklc; @BeforeEach public void setUp() { - context = createMock(ClientContext.class); - expect(context.getZooKeeperRoot()).andReturn("/accumulo/iid").anyTimes(); + var instanceId = InstanceId.of(UUID.randomUUID()); zc = createMock(ZooCache.class); + context = createMock(ClientContext.class); + expect(context.getZooKeeperRoot()).andReturn(ZooUtil.getRoot(instanceId)).anyTimes(); expect(context.getZooCache()).andReturn(zc).anyTimes(); - replay(context); - zklc = new ZookeeperLockChecker(context); + replay(context, zc); + } + + @AfterEach + public void tearDown() { + verify(context, zc); } @Test public void testInvalidateCache() { + var zklc = new ZookeeperLockChecker(context); + + verify(zc); + reset(zc); zc.clear(context.getZooKeeperRoot() + Constants.ZTSERVERS + "/server"); + expectLastCall().once(); replay(zc); + zklc.invalidateCache("server"); - verify(zc); } } diff --git a/minicluster/src/test/java/org/apache/accumulo/minicluster/MiniAccumuloClusterExistingZooKeepersTest.java b/minicluster/src/test/java/org/apache/accumulo/minicluster/MiniAccumuloClusterExistingZooKeepersTest.java index c428127b58..575588993f 100644 --- a/minicluster/src/test/java/org/apache/accumulo/minicluster/MiniAccumuloClusterExistingZooKeepersTest.java +++ b/minicluster/src/test/java/org/apache/accumulo/minicluster/MiniAccumuloClusterExistingZooKeepersTest.java @@ -26,8 +26,10 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.File; import java.util.Map; +import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.client.Accumulo; import org.apache.accumulo.core.client.AccumuloClient; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.commons.io.FileUtils; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; @@ -74,8 +76,9 @@ public class MiniAccumuloClusterExistingZooKeepersTest extends WithTestNames { Map<String,String> tableIds = client.tableOperations().tableIdMap(); assertTrue(tableIds.containsKey(tableName)); - String zkTablePath = String.format("/accumulo/%s/tables/%s/name", - client.instanceOperations().getInstanceId().canonical(), tableIds.get(tableName)); + String zkTablePath = String.format("%s%s/%s/name", + ZooUtil.getRoot(client.instanceOperations().getInstanceId()), Constants.ZTABLES, + tableIds.get(tableName)); try (CuratorFramework curatorClient = CuratorFrameworkFactory.newClient(zooKeeper.getConnectString(), new RetryOneTime(1))) { curatorClient.start(); diff --git a/server/base/src/main/java/org/apache/accumulo/server/ServerContext.java b/server/base/src/main/java/org/apache/accumulo/server/ServerContext.java index bf75821828..a20b5c62bb 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/ServerContext.java +++ b/server/base/src/main/java/org/apache/accumulo/server/ServerContext.java @@ -52,6 +52,7 @@ import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.zookeeper.ZooReader; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.core.metadata.schema.Ample; import org.apache.accumulo.core.metrics.MetricsInfo; import org.apache.accumulo.core.rpc.SslConnectionParams; @@ -118,7 +119,7 @@ public class ServerContext extends ClientContext { serverDirs = info.getServerDirs(); propStore = memoize(() -> ZooPropStore.initialize(getInstanceID(), getZooReaderWriter())); - zkUserPath = memoize(() -> Constants.ZROOT + "/" + getInstanceID() + Constants.ZUSERS); + zkUserPath = memoize(() -> ZooUtil.getRoot(getInstanceID()) + Constants.ZUSERS); tableManager = memoize(() -> new TableManager(this)); nameAllocator = memoize(() -> new UniqueNameAllocator(this)); diff --git a/server/base/src/main/java/org/apache/accumulo/server/ServerInfo.java b/server/base/src/main/java/org/apache/accumulo/server/ServerInfo.java index f0fd0c8394..aa7d2149dd 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/ServerInfo.java +++ b/server/base/src/main/java/org/apache/accumulo/server/ServerInfo.java @@ -36,6 +36,7 @@ import org.apache.accumulo.core.conf.SiteConfiguration; import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.fate.zookeeper.ZooCache; import org.apache.accumulo.core.fate.zookeeper.ZooCacheFactory; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.core.singletons.SingletonManager; import org.apache.accumulo.core.singletons.SingletonManager.Mode; import org.apache.accumulo.server.fs.VolumeManager; @@ -79,7 +80,7 @@ public class ServerInfo implements ClientInfo { + "Run \"accumulo org.apache.accumulo.server.util.ListInstances\" to see a list."); } instanceID = InstanceId.of(new String(iidb, UTF_8)); - if (zooCache.get(Constants.ZROOT + "/" + instanceID) == null) { + if (zooCache.get(ZooUtil.getRoot(instanceID)) == null) { if (instanceName == null) { throw new IllegalStateException( "Instance id " + instanceID + " does not exist in zookeeper"); diff --git a/server/base/src/main/java/org/apache/accumulo/server/init/ZooKeeperInitializer.java b/server/base/src/main/java/org/apache/accumulo/server/init/ZooKeeperInitializer.java index 1fc771dc09..8a78f6c254 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/init/ZooKeeperInitializer.java +++ b/server/base/src/main/java/org/apache/accumulo/server/init/ZooKeeperInitializer.java @@ -71,7 +71,7 @@ public class ZooKeeperInitializer { zoo.putPersistentData(Constants.ZROOT, new byte[0], ZooUtil.NodeExistsPolicy.SKIP, ZooDefs.Ids.OPEN_ACL_UNSAFE); - String zkInstanceRoot = Constants.ZROOT + "/" + instanceId; + String zkInstanceRoot = ZooUtil.getRoot(instanceId); zoo.putPersistentData(zkInstanceRoot, EMPTY_BYTE_ARRAY, ZooUtil.NodeExistsPolicy.SKIP); var sysPropPath = SystemPropKey.of(instanceId).getPath(); VersionedProperties vProps = new VersionedProperties(); @@ -109,7 +109,7 @@ public class ZooKeeperInitializer { ZooUtil.NodeExistsPolicy.FAIL); // setup the instance - String zkInstanceRoot = Constants.ZROOT + "/" + instanceId; + String zkInstanceRoot = context.getZooKeeperRoot(); zoo.putPersistentData(zkInstanceRoot + Constants.ZTABLES, Constants.ZTABLES_INITIAL_ID, ZooUtil.NodeExistsPolicy.FAIL); zoo.putPersistentData(zkInstanceRoot + Constants.ZNAMESPACES, diff --git a/server/base/src/main/java/org/apache/accumulo/server/security/handler/ZKPermHandler.java b/server/base/src/main/java/org/apache/accumulo/server/security/handler/ZKPermHandler.java index 750c7d15f9..f5b3768a85 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/security/handler/ZKPermHandler.java +++ b/server/base/src/main/java/org/apache/accumulo/server/security/handler/ZKPermHandler.java @@ -27,12 +27,12 @@ import java.util.Map.Entry; import java.util.Set; import java.util.TreeSet; +import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.client.AccumuloSecurityException; import org.apache.accumulo.core.client.NamespaceNotFoundException; import org.apache.accumulo.core.client.TableNotFoundException; import org.apache.accumulo.core.clientImpl.Namespace; import org.apache.accumulo.core.clientImpl.thrift.SecurityErrorCode; -import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.zookeeper.ZooCache; @@ -66,10 +66,9 @@ public class ZKPermHandler implements PermissionHandler { public void initialize(ServerContext context) { zooCache = new ZooCache(context.getZooReader(), null); zoo = context.getZooReaderWriter(); - InstanceId instanceId = context.getInstanceID(); zkUserPath = context.zkUserPath(); - ZKTablePath = ZKSecurityTool.getInstancePath(instanceId) + "/tables"; - ZKNamespacePath = ZKSecurityTool.getInstancePath(instanceId) + "/namespaces"; + ZKTablePath = context.getZooKeeperRoot() + Constants.ZTABLES; + ZKNamespacePath = context.getZooKeeperRoot() + Constants.ZNAMESPACES; } @Override diff --git a/server/base/src/main/java/org/apache/accumulo/server/security/handler/ZKSecurityTool.java b/server/base/src/main/java/org/apache/accumulo/server/security/handler/ZKSecurityTool.java index af554f06f2..ecbb1cd31b 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/security/handler/ZKSecurityTool.java +++ b/server/base/src/main/java/org/apache/accumulo/server/security/handler/ZKSecurityTool.java @@ -31,9 +31,7 @@ import java.time.Duration; import java.util.HashSet; import java.util.Set; -import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.client.AccumuloException; -import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.security.Authorizations; import org.apache.accumulo.core.security.NamespacePermission; import org.apache.accumulo.core.security.SystemPermission; @@ -191,7 +189,4 @@ class ZKSecurityTool { return toReturn; } - public static String getInstancePath(InstanceId instanceId) { - return Constants.ZROOT + "/" + instanceId; - } } diff --git a/server/base/src/main/java/org/apache/accumulo/server/tables/TableManager.java b/server/base/src/main/java/org/apache/accumulo/server/tables/TableManager.java index 15ce8d5941..bd8f74e6f0 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/tables/TableManager.java +++ b/server/base/src/main/java/org/apache/accumulo/server/tables/TableManager.java @@ -37,6 +37,7 @@ import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.zookeeper.ZooCache; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.core.fate.zookeeper.ZooUtil.NodeExistsPolicy; import org.apache.accumulo.core.fate.zookeeper.ZooUtil.NodeMissingPolicy; import org.apache.accumulo.core.manager.state.tables.TableState; @@ -77,7 +78,7 @@ public class TableManager { final InstanceId instanceId = context.getInstanceID(); log.debug("Creating ZooKeeper entries for new namespace {} (ID: {})", namespace, namespaceId); context.getZooReaderWriter().putPersistentData( - Constants.ZROOT + "/" + instanceId + Constants.ZNAMESPACES + "/" + namespaceId, new byte[0], + context.getZooKeeperRoot() + Constants.ZNAMESPACES + "/" + namespaceId, new byte[0], existsPolicy); var propKey = NamespacePropKey.of(instanceId, namespaceId); if (!propStore.exists(propKey)) { @@ -94,7 +95,7 @@ public class TableManager { tableName, tableId, namespaceId); Pair<String,String> qualifiedTableName = TableNameUtil.qualify(tableName); tableName = qualifiedTableName.getSecond(); - String zTablePath = Constants.ZROOT + "/" + instanceId + Constants.ZTABLES + "/" + tableId; + String zTablePath = ZooUtil.getRoot(instanceId) + Constants.ZTABLES + "/" + tableId; zoo.putPersistentData(zTablePath, new byte[0], existsPolicy); zoo.putPersistentData(zTablePath + Constants.ZTABLE_NAMESPACE, namespaceId.canonical().getBytes(UTF_8), existsPolicy); @@ -220,10 +221,10 @@ public class TableManager { prepareNewTableState(zoo, context.getPropStore(), instanceID, tableId, namespaceId, tableName, TableState.NEW, NodeExistsPolicy.OVERWRITE); - String srcTablePath = Constants.ZROOT + "/" + instanceID + Constants.ZTABLES + "/" + srcTableId - + Constants.ZCONFIG; + String srcTablePath = + context.getZooKeeperRoot() + Constants.ZTABLES + "/" + srcTableId + Constants.ZCONFIG; String newTablePath = - Constants.ZROOT + "/" + instanceID + Constants.ZTABLES + "/" + tableId + Constants.ZCONFIG; + context.getZooKeeperRoot() + Constants.ZTABLES + "/" + tableId + Constants.ZCONFIG; zoo.recursiveCopyPersistentOverwrite(srcTablePath, newTablePath); PropUtil.setProperties(context, TablePropKey.of(context, tableId), propertiesToSet); diff --git a/server/base/src/main/java/org/apache/accumulo/server/tablets/UniqueNameAllocator.java b/server/base/src/main/java/org/apache/accumulo/server/tablets/UniqueNameAllocator.java index 14026124df..7aead5026e 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/tablets/UniqueNameAllocator.java +++ b/server/base/src/main/java/org/apache/accumulo/server/tablets/UniqueNameAllocator.java @@ -50,7 +50,7 @@ public class UniqueNameAllocator { public UniqueNameAllocator(ServerContext context) { this.context = context; - nextNamePath = Constants.ZROOT + "/" + context.getInstanceID() + Constants.ZNEXT_FILE; + nextNamePath = context.getZooKeeperRoot() + Constants.ZNEXT_FILE; } public synchronized String getNextName() { diff --git a/server/base/src/main/java/org/apache/accumulo/server/util/ChangeSecret.java b/server/base/src/main/java/org/apache/accumulo/server/util/ChangeSecret.java index 094167e0ce..5a794c3eeb 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/util/ChangeSecret.java +++ b/server/base/src/main/java/org/apache/accumulo/server/util/ChangeSecret.java @@ -26,6 +26,7 @@ import java.util.Arrays; import java.util.List; import java.util.UUID; +import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.conf.AccumuloConfiguration; import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.fate.zookeeper.ZooReader; @@ -145,7 +146,7 @@ public class ChangeSecret { } } }); - String path = "/accumulo/instances/" + context.getInstanceName(); + String path = Constants.ZROOT + Constants.ZINSTANCES + "/" + context.getInstanceName(); orig.recursiveDelete(path, NodeMissingPolicy.SKIP); new_.putPersistentData(path, newInstanceId.canonical().getBytes(UTF_8), NodeExistsPolicy.OVERWRITE); @@ -201,6 +202,6 @@ public class ChangeSecret { private static void deleteInstance(ServerContext context, String oldPass) throws Exception { ZooReaderWriter orig = context.getZooReader().asWriter(oldPass); - orig.recursiveDelete("/accumulo/" + context.getInstanceID(), NodeMissingPolicy.SKIP); + orig.recursiveDelete(context.getZooKeeperRoot(), NodeMissingPolicy.SKIP); } } diff --git a/server/base/src/main/java/org/apache/accumulo/server/util/ListInstances.java b/server/base/src/main/java/org/apache/accumulo/server/util/ListInstances.java index 275e11e5a0..24e7b218b7 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/util/ListInstances.java +++ b/server/base/src/main/java/org/apache/accumulo/server/util/ListInstances.java @@ -35,6 +35,7 @@ import org.apache.accumulo.core.conf.SiteConfiguration; import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.fate.zookeeper.ZooCache; import org.apache.accumulo.core.fate.zookeeper.ZooReader; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.core.lock.ServiceLock; import org.apache.accumulo.core.lock.ServiceLockData; import org.apache.accumulo.core.lock.ServiceLockData.ThriftService; @@ -165,8 +166,7 @@ public class ListInstances { } try { - var zLockManagerPath = - ServiceLock.path(Constants.ZROOT + "/" + iid + Constants.ZMANAGER_LOCK); + var zLockManagerPath = ServiceLock.path(ZooUtil.getRoot(iid) + Constants.ZMANAGER_LOCK); Optional<ServiceLockData> sld = ServiceLock.getLockData(cache, zLockManagerPath, null); if (sld.isEmpty()) { return null; diff --git a/server/base/src/main/java/org/apache/accumulo/server/util/ZooKeeperMain.java b/server/base/src/main/java/org/apache/accumulo/server/util/ZooKeeperMain.java index b98ef90b34..b7cb4d5732 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/util/ZooKeeperMain.java +++ b/server/base/src/main/java/org/apache/accumulo/server/util/ZooKeeperMain.java @@ -69,7 +69,7 @@ public class ZooKeeperMain implements KeywordExecutable { } System.out.println("The accumulo instance id is " + context.getInstanceID()); if (!opts.servers.contains("/")) { - opts.servers += "/accumulo/" + context.getInstanceID(); + opts.servers += context.getZooKeeperRoot(); } org.apache.zookeeper.ZooKeeperMain .main(new String[] {"-server", opts.servers, "-timeout", "" + (opts.timeout * 1000)}); diff --git a/server/base/src/main/java/org/apache/accumulo/server/util/ZooZap.java b/server/base/src/main/java/org/apache/accumulo/server/util/ZooZap.java index 3a2b617984..87c1eacf0e 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/util/ZooZap.java +++ b/server/base/src/main/java/org/apache/accumulo/server/util/ZooZap.java @@ -26,6 +26,7 @@ import org.apache.accumulo.core.conf.Property; import org.apache.accumulo.core.conf.SiteConfiguration; import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.core.fate.zookeeper.ZooUtil.NodeMissingPolicy; import org.apache.accumulo.core.lock.ServiceLock; import org.apache.accumulo.core.singletons.SingletonManager; @@ -107,7 +108,7 @@ public class ZooZap implements KeywordExecutable { ZooReaderWriter zoo = new ZooReaderWriter(siteConf); if (opts.zapManager) { - String managerLockPath = Constants.ZROOT + "/" + iid + Constants.ZMANAGER_LOCK; + String managerLockPath = ZooUtil.getRoot(iid) + Constants.ZMANAGER_LOCK; try { zapDirectory(zoo, managerLockPath, opts); @@ -117,7 +118,7 @@ public class ZooZap implements KeywordExecutable { } if (opts.zapTservers) { - String tserversPath = Constants.ZROOT + "/" + iid + Constants.ZTSERVERS; + String tserversPath = ZooUtil.getRoot(iid) + Constants.ZTSERVERS; try { List<String> children = zoo.getChildren(tserversPath); for (String child : children) { @@ -140,7 +141,7 @@ public class ZooZap implements KeywordExecutable { } if (opts.zapCoordinators) { - final String coordinatorPath = Constants.ZROOT + "/" + iid + Constants.ZCOORDINATOR_LOCK; + final String coordinatorPath = ZooUtil.getRoot(iid) + Constants.ZCOORDINATOR_LOCK; try { if (zoo.exists(coordinatorPath)) { zapDirectory(zoo, coordinatorPath, opts); @@ -151,7 +152,7 @@ public class ZooZap implements KeywordExecutable { } if (opts.zapCompactors) { - String compactorsBasepath = Constants.ZROOT + "/" + iid + Constants.ZCOMPACTORS; + String compactorsBasepath = ZooUtil.getRoot(iid) + Constants.ZCOMPACTORS; try { if (zoo.exists(compactorsBasepath)) { List<String> queues = zoo.getChildren(compactorsBasepath); @@ -167,7 +168,7 @@ public class ZooZap implements KeywordExecutable { } if (opts.zapScanServers) { - String sserversPath = Constants.ZROOT + "/" + iid + Constants.ZSSERVERS; + String sserversPath = ZooUtil.getRoot(iid) + Constants.ZSSERVERS; try { if (zoo.exists(sserversPath)) { List<String> children = zoo.getChildren(sserversPath); diff --git a/server/base/src/test/java/org/apache/accumulo/server/MockServerContext.java b/server/base/src/test/java/org/apache/accumulo/server/MockServerContext.java index 801e0c301c..338acf9486 100644 --- a/server/base/src/test/java/org/apache/accumulo/server/MockServerContext.java +++ b/server/base/src/test/java/org/apache/accumulo/server/MockServerContext.java @@ -23,11 +23,13 @@ import static org.easymock.EasyMock.expect; import java.util.Properties; +import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.conf.ConfigurationCopy; import org.apache.accumulo.core.conf.DefaultConfiguration; import org.apache.accumulo.core.conf.Property; import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.server.conf.store.PropStore; import org.easymock.EasyMock; @@ -47,9 +49,9 @@ public class MockServerContext { public static ServerContext getWithZK(InstanceId instanceID, String zk, int zkTimeout) { var sc = get(); - expect(sc.getZooKeeperRoot()).andReturn("/accumulo/" + instanceID).anyTimes(); + expect(sc.getZooKeeperRoot()).andReturn(ZooUtil.getRoot(instanceID)).anyTimes(); expect(sc.getInstanceID()).andReturn(instanceID).anyTimes(); - expect(sc.zkUserPath()).andReturn("/accumulo/" + instanceID + "/users").anyTimes(); + expect(sc.zkUserPath()).andReturn(ZooUtil.getRoot(instanceID) + Constants.ZUSERS).anyTimes(); expect(sc.getZooKeepers()).andReturn(zk).anyTimes(); expect(sc.getZooKeepersSessionTimeOut()).andReturn(zkTimeout).anyTimes(); return sc; @@ -61,7 +63,7 @@ public class MockServerContext { ServerContext sc = createMock(ServerContext.class); expect(sc.getInstanceID()).andReturn(instanceID).anyTimes(); expect(sc.getZooReaderWriter()).andReturn(zrw).anyTimes(); - expect(sc.getZooKeeperRoot()).andReturn("/accumulo/" + instanceID).anyTimes(); + expect(sc.getZooKeeperRoot()).andReturn(ZooUtil.getRoot(instanceID)).anyTimes(); expect(sc.getPropStore()).andReturn(propStore).anyTimes(); return sc; } diff --git a/server/base/src/test/java/org/apache/accumulo/server/conf/ServerConfigurationFactoryTest.java b/server/base/src/test/java/org/apache/accumulo/server/conf/ServerConfigurationFactoryTest.java index 71e13cda8a..2743b2a7f2 100644 --- a/server/base/src/test/java/org/apache/accumulo/server/conf/ServerConfigurationFactoryTest.java +++ b/server/base/src/test/java/org/apache/accumulo/server/conf/ServerConfigurationFactoryTest.java @@ -37,6 +37,7 @@ import org.apache.accumulo.core.conf.SiteConfiguration; import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.server.ServerContext; import org.apache.accumulo.server.conf.codec.VersionedProperties; import org.apache.accumulo.server.conf.store.NamespacePropKey; @@ -79,7 +80,7 @@ public class ServerConfigurationFactoryTest { expectLastCall().anyTimes(); context = createMock(ServerContext.class); - expect(context.getZooKeeperRoot()).andReturn("/accumulo/" + IID).anyTimes(); + expect(context.getZooKeeperRoot()).andReturn(ZooUtil.getRoot(IID)).anyTimes(); expect(context.getInstanceID()).andReturn(IID).anyTimes(); expect(context.getZooKeepers()).andReturn(ZK_HOST).anyTimes(); expect(context.getZooKeepersSessionTimeOut()).andReturn(ZK_TIMEOUT).anyTimes(); diff --git a/server/base/src/test/java/org/apache/accumulo/server/conf/store/PropStoreKeyTest.java b/server/base/src/test/java/org/apache/accumulo/server/conf/store/PropStoreKeyTest.java index f3d040275d..80abef3aa7 100644 --- a/server/base/src/test/java/org/apache/accumulo/server/conf/store/PropStoreKeyTest.java +++ b/server/base/src/test/java/org/apache/accumulo/server/conf/store/PropStoreKeyTest.java @@ -20,6 +20,7 @@ package org.apache.accumulo.server.conf.store; import static org.apache.accumulo.core.Constants.ZCONFIG; import static org.apache.accumulo.core.Constants.ZNAMESPACES; +import static org.apache.accumulo.core.Constants.ZROOT; import static org.apache.accumulo.core.Constants.ZTABLES; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; @@ -35,6 +36,7 @@ import java.util.UUID; import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.server.ServerContext; import org.junit.jupiter.api.Test; import org.slf4j.Logger; @@ -93,48 +95,46 @@ public class PropStoreKeyTest { @Test public void fromPathTest() { - - var iid = "3f9976c6-3bf1-41ab-9751-1b0a9be3551d"; - - PropStoreKey<?> t1 = PropStoreKey.fromPath("/accumulo/" + iid + "/tables/t1" + ZCONFIG); + var t1 = PropStoreKey.fromPath(ZooUtil.getRoot(instanceId) + ZTABLES + "/t1" + ZCONFIG); assertNotNull(t1); assertEquals(TableId.of("t1"), t1.getId()); - PropStoreKey<?> n1 = PropStoreKey.fromPath("/accumulo/" + iid + "/namespaces/n1" + ZCONFIG); + var n1 = PropStoreKey.fromPath(ZooUtil.getRoot(instanceId) + ZNAMESPACES + "/n1" + ZCONFIG); assertNotNull(n1); assertEquals(NamespaceId.of("n1"), n1.getId()); assertNotNull(n1.getId()); - PropStoreKey<?> s1 = PropStoreKey.fromPath("/accumulo/" + iid + ZCONFIG); + var s1 = PropStoreKey.fromPath(ZooUtil.getRoot(instanceId) + ZCONFIG); assertNotNull(s1); // system config returns instance id as id placeholder - assertEquals(iid, s1.getId().canonical()); + assertEquals(instanceId, s1.getId()); } @Test public void invalidKeysTest() { - var iid = "3f9976c6-3bf1-41ab-9751-1b0a9be3551d"; - // too short - assertNull(PropStoreKey.fromPath("/accumulo")); + assertNull(PropStoreKey.fromPath(ZROOT)); // not a system config - assertTrue(PropStoreKey.fromPath("/accumulo/" + iid + ZCONFIG) instanceof SystemPropKey); + assertTrue( + PropStoreKey.fromPath(ZooUtil.getRoot(instanceId) + ZCONFIG) instanceof SystemPropKey); assertNull(PropStoreKey.fromPath("/foo")); - assertNull(PropStoreKey.fromPath("/accumulo/" + iid + "/foo")); - assertNull(PropStoreKey.fromPath("/accumulo/" + iid + ZCONFIG + "/foo")); - - assertTrue(PropStoreKey - .fromPath("/accumulo/" + iid + ZTABLES + "/a" + ZCONFIG) instanceof TablePropKey); - assertNull(PropStoreKey.fromPath("/accumulo/" + iid + ZTABLES + ZCONFIG)); - assertNull(PropStoreKey.fromPath("/accumulo/" + iid + "/invalid/a" + ZCONFIG)); - assertNull(PropStoreKey.fromPath("/accumulo/" + iid + ZTABLES + "/a" + ZCONFIG + "/foo")); + assertNull(PropStoreKey.fromPath(ZooUtil.getRoot(instanceId) + "/foo")); + assertNull(PropStoreKey.fromPath(ZooUtil.getRoot(instanceId) + ZCONFIG + "/foo")); assertTrue(PropStoreKey - .fromPath("/accumulo/" + iid + ZNAMESPACES + "/a" + ZCONFIG) instanceof NamespacePropKey); - assertNull(PropStoreKey.fromPath("/accumulo/" + iid + ZNAMESPACES + ZCONFIG)); - assertNull(PropStoreKey.fromPath("/accumulo/" + iid + "/invalid/a" + ZCONFIG)); - assertNull(PropStoreKey.fromPath("/accumulo/" + iid + ZNAMESPACES + "/a" + ZCONFIG + "/foo")); + .fromPath(ZooUtil.getRoot(instanceId) + ZTABLES + "/a" + ZCONFIG) instanceof TablePropKey); + assertNull(PropStoreKey.fromPath(ZooUtil.getRoot(instanceId) + ZTABLES + ZCONFIG)); + assertNull(PropStoreKey.fromPath(ZooUtil.getRoot(instanceId) + "/invalid/a" + ZCONFIG)); + assertNull( + PropStoreKey.fromPath(ZooUtil.getRoot(instanceId) + ZTABLES + "/a" + ZCONFIG + "/foo")); + + assertTrue(PropStoreKey.fromPath( + ZooUtil.getRoot(instanceId) + ZNAMESPACES + "/a" + ZCONFIG) instanceof NamespacePropKey); + assertNull(PropStoreKey.fromPath(ZooUtil.getRoot(instanceId) + ZNAMESPACES + ZCONFIG)); + assertNull(PropStoreKey.fromPath(ZooUtil.getRoot(instanceId) + "/invalid/a" + ZCONFIG)); + assertNull( + PropStoreKey.fromPath(ZooUtil.getRoot(instanceId) + ZNAMESPACES + "/a" + ZCONFIG + "/foo")); } @Test diff --git a/server/base/src/test/java/org/apache/accumulo/server/conf/store/impl/PropStoreEventTest.java b/server/base/src/test/java/org/apache/accumulo/server/conf/store/impl/PropStoreEventTest.java index 71247b4d3b..ca67be50fb 100644 --- a/server/base/src/test/java/org/apache/accumulo/server/conf/store/impl/PropStoreEventTest.java +++ b/server/base/src/test/java/org/apache/accumulo/server/conf/store/impl/PropStoreEventTest.java @@ -39,6 +39,7 @@ import java.util.UUID; import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.server.ServerContext; import org.apache.accumulo.server.conf.codec.VersionedPropCodec; import org.apache.accumulo.server.conf.codec.VersionedProperties; @@ -72,7 +73,7 @@ public class PropStoreEventTest { expect(context.getZooKeepersSessionTimeOut()).andReturn(500).anyTimes(); expect(context.getInstanceID()).andReturn(instanceId).anyTimes(); - expect(zrw.exists(eq("/accumulo/" + instanceId), anyObject())).andReturn(true).anyTimes(); + expect(zrw.exists(eq(ZooUtil.getRoot(instanceId)), anyObject())).andReturn(true).anyTimes(); readyMonitor = createMock(ReadyMonitor.class); } diff --git a/server/base/src/test/java/org/apache/accumulo/server/conf/store/impl/ZooPropStoreTest.java b/server/base/src/test/java/org/apache/accumulo/server/conf/store/impl/ZooPropStoreTest.java index 11d9f9e471..a09f2bef8b 100644 --- a/server/base/src/test/java/org/apache/accumulo/server/conf/store/impl/ZooPropStoreTest.java +++ b/server/base/src/test/java/org/apache/accumulo/server/conf/store/impl/ZooPropStoreTest.java @@ -45,6 +45,7 @@ import org.apache.accumulo.core.conf.Property; import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.server.ServerContext; import org.apache.accumulo.server.conf.codec.VersionedPropCodec; import org.apache.accumulo.server.conf.codec.VersionedProperties; @@ -75,7 +76,7 @@ public class ZooPropStoreTest { expect(zrw.getSessionTimeout()).andReturn(2_000).anyTimes(); expect(context.getInstanceID()).andReturn(instanceId).anyTimes(); - expect(zrw.exists(eq("/accumulo/" + instanceId), anyObject())).andReturn(true).anyTimes(); + expect(zrw.exists(eq(ZooUtil.getRoot(instanceId)), anyObject())).andReturn(true).anyTimes(); } @AfterEach diff --git a/server/base/src/test/java/org/apache/accumulo/server/security/delegation/ZooAuthenticationKeyWatcherTest.java b/server/base/src/test/java/org/apache/accumulo/server/security/delegation/ZooAuthenticationKeyWatcherTest.java index 01bc04b3a8..df71d4fe8c 100644 --- a/server/base/src/test/java/org/apache/accumulo/server/security/delegation/ZooAuthenticationKeyWatcherTest.java +++ b/server/base/src/test/java/org/apache/accumulo/server/security/delegation/ZooAuthenticationKeyWatcherTest.java @@ -42,6 +42,7 @@ import javax.crypto.KeyGenerator; import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.fate.zookeeper.ZooReader; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.zookeeper.KeeperException.NoNodeException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher.Event.EventType; @@ -75,7 +76,7 @@ public class ZooAuthenticationKeyWatcherTest { public void setupMocks() { zk = createMock(ZooReader.class); instanceId = InstanceId.of(UUID.randomUUID()); - baseNode = "/accumulo/" + instanceId + Constants.ZDELEGATION_TOKEN_KEYS; + baseNode = ZooUtil.getRoot(instanceId) + Constants.ZDELEGATION_TOKEN_KEYS; secretManager = new AuthenticationTokenSecretManager(instanceId, tokenLifetime); keyWatcher = new ZooAuthenticationKeyWatcher(secretManager, zk, baseNode); } diff --git a/server/base/src/test/java/org/apache/accumulo/server/security/handler/ZKAuthenticatorTest.java b/server/base/src/test/java/org/apache/accumulo/server/security/handler/ZKAuthenticatorTest.java index 6616b05250..6621feb93f 100644 --- a/server/base/src/test/java/org/apache/accumulo/server/security/handler/ZKAuthenticatorTest.java +++ b/server/base/src/test/java/org/apache/accumulo/server/security/handler/ZKAuthenticatorTest.java @@ -35,10 +35,12 @@ import java.util.Collections; import java.util.Set; import java.util.TreeSet; +import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.client.AccumuloException; import org.apache.accumulo.core.client.security.tokens.PasswordToken; import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.core.security.Authorizations; import org.apache.accumulo.core.security.SystemPermission; import org.apache.accumulo.core.security.TablePermission; @@ -140,16 +142,17 @@ public class ZKAuthenticatorTest { byte[] newHash = ZKSecurityTool.createPass(rawPass.clone()); // mocking zk interaction - ServerContext context = MockServerContext.getWithZK(InstanceId.of("example"), "", 30_000); + var instanceId = InstanceId.of("example"); + ServerContext context = MockServerContext.getWithZK(instanceId, "", 30_000); ZooReaderWriter zr = createMock(ZooReaderWriter.class); expect(context.getZooReader()).andReturn(zr).anyTimes(); ZooKeeper zk = createMock(ZooKeeper.class); expect(zk.getChildren(anyObject(), anyObject())).andReturn(Arrays.asList(principal)).anyTimes(); - expect(zk.exists(matches("/accumulo/example/users/" + principal), anyObject(Watcher.class))) - .andReturn(new Stat()).anyTimes(); + expect(zk.exists(matches(ZooUtil.getRoot(instanceId) + Constants.ZUSERS + "/" + principal), + anyObject(Watcher.class))).andReturn(new Stat()).anyTimes(); expect(zr.getZooKeeper()).andReturn(zk).anyTimes(); - expect(zk.getData(matches("/accumulo/example/users/" + principal), anyObject(), anyObject())) - .andReturn(newHash).once(); + expect(zk.getData(matches(ZooUtil.getRoot(instanceId) + Constants.ZUSERS + "/" + principal), + anyObject(), anyObject())).andReturn(newHash).once(); replay(context, zr, zk); // creating authenticator diff --git a/server/base/src/test/java/org/apache/accumulo/server/util/AdminTest.java b/server/base/src/test/java/org/apache/accumulo/server/util/AdminTest.java index 2e6754176e..18a9045402 100644 --- a/server/base/src/test/java/org/apache/accumulo/server/util/AdminTest.java +++ b/server/base/src/test/java/org/apache/accumulo/server/util/AdminTest.java @@ -18,6 +18,13 @@ */ package org.apache.accumulo.server.util; +import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.createMock; +import static org.easymock.EasyMock.eq; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.getCurrentArguments; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.verify; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Collections; @@ -28,69 +35,71 @@ import org.apache.accumulo.core.clientImpl.ClientContext; import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.fate.zookeeper.ZooCache; import org.apache.accumulo.core.fate.zookeeper.ZooCache.ZcStat; -import org.easymock.EasyMock; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.junit.jupiter.api.Test; public class AdminTest { @Test public void testZooKeeperTserverPath() { - ClientContext context = EasyMock.createMock(ClientContext.class); + ClientContext context = createMock(ClientContext.class); InstanceId instanceId = InstanceId.of(UUID.randomUUID()); - EasyMock.expect(context.getZooKeeperRoot()).andReturn(Constants.ZROOT + "/" + instanceId); + expect(context.getZooKeeperRoot()).andReturn(ZooUtil.getRoot(instanceId)); - EasyMock.replay(context); + replay(context); - assertEquals(Constants.ZROOT + "/" + instanceId + Constants.ZTSERVERS, + assertEquals(ZooUtil.getRoot(instanceId) + Constants.ZTSERVERS, Admin.getTServersZkPath(context)); - EasyMock.verify(context); + verify(context); } @Test public void testQualifySessionId() { - ZooCache zc = EasyMock.createMock(ZooCache.class); + ZooCache zc = createMock(ZooCache.class); + InstanceId instanceId = InstanceId.of(UUID.randomUUID()); - String root = "/accumulo/id/tservers"; + String root = ZooUtil.getRoot(instanceId) + Constants.ZTSERVERS; String server = "localhost:12345"; final long session = 123456789L; String serverPath = root + "/" + server; String validZLockEphemeralNode = "zlock#" + UUID.randomUUID() + "#0000000000"; - EasyMock.expect(zc.getChildren(serverPath)) + expect(zc.getChildren(serverPath)) .andReturn(Collections.singletonList(validZLockEphemeralNode)); - EasyMock.expect(zc.get(EasyMock.eq(serverPath + "/" + validZLockEphemeralNode), - EasyMock.anyObject(ZcStat.class))).andAnswer(() -> { - ZcStat stat = (ZcStat) EasyMock.getCurrentArguments()[1]; + expect(zc.get(eq(serverPath + "/" + validZLockEphemeralNode), anyObject(ZcStat.class))) + .andAnswer(() -> { + ZcStat stat = (ZcStat) getCurrentArguments()[1]; stat.setEphemeralOwner(session); return new byte[0]; }); - EasyMock.replay(zc); + replay(zc); assertEquals(server + "[" + Long.toHexString(session) + "]", Admin.qualifyWithZooKeeperSessionId(root, zc, server)); - EasyMock.verify(zc); + verify(zc); } @Test public void testCannotQualifySessionId() { - ZooCache zc = EasyMock.createMock(ZooCache.class); + ZooCache zc = createMock(ZooCache.class); + InstanceId instanceId = InstanceId.of(UUID.randomUUID()); - String root = "/accumulo/id/tservers"; + String root = ZooUtil.getRoot(instanceId) + Constants.ZTSERVERS; String server = "localhost:12345"; String serverPath = root + "/" + server; - EasyMock.expect(zc.getChildren(serverPath)).andReturn(Collections.emptyList()); + expect(zc.getChildren(serverPath)).andReturn(Collections.emptyList()); - EasyMock.replay(zc); + replay(zc); // A server that isn't in ZooKeeper. Can't qualify it, should return the original assertEquals(server, Admin.qualifyWithZooKeeperSessionId(root, zc, server)); - EasyMock.verify(zc); + verify(zc); } } diff --git a/server/base/src/test/java/org/apache/accumulo/server/util/ServiceStatusCmdTest.java b/server/base/src/test/java/org/apache/accumulo/server/util/ServiceStatusCmdTest.java index b48440b666..5a8bb11b77 100644 --- a/server/base/src/test/java/org/apache/accumulo/server/util/ServiceStatusCmdTest.java +++ b/server/base/src/test/java/org/apache/accumulo/server/util/ServiceStatusCmdTest.java @@ -38,6 +38,7 @@ import java.util.UUID; import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.fate.zookeeper.ZooReader; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.server.ServerContext; import org.apache.accumulo.server.util.serviceStatus.ServiceStatusReport; import org.apache.accumulo.server.util.serviceStatus.StatusSummary; @@ -59,7 +60,7 @@ public class ServiceStatusCmdTest { @BeforeEach public void populateContext() { InstanceId iid = InstanceId.of(UUID.randomUUID()); - zRoot = "/accumulo/" + iid.canonical(); + zRoot = ZooUtil.getRoot(iid); context = createMock(ServerContext.class); expect(context.getInstanceID()).andReturn(iid).anyTimes(); expect(context.getZooKeeperRoot()).andReturn(zRoot).anyTimes(); diff --git a/server/compactor/src/main/java/org/apache/accumulo/compactor/Compactor.java b/server/compactor/src/main/java/org/apache/accumulo/compactor/Compactor.java index c93a8cb8ca..c8908900b9 100644 --- a/server/compactor/src/main/java/org/apache/accumulo/compactor/Compactor.java +++ b/server/compactor/src/main/java/org/apache/accumulo/compactor/Compactor.java @@ -217,8 +217,8 @@ public class Compactor extends AbstractServer implements MetricsProducer, Compac } if (job.getKind() == TCompactionKind.USER) { - String zTablePath = Constants.ZROOT + "/" + getContext().getInstanceID() - + Constants.ZTABLES + "/" + extent.tableId() + Constants.ZTABLE_COMPACT_CANCEL_ID; + String zTablePath = getContext().getZooKeeperRoot() + Constants.ZTABLES + "/" + + extent.tableId() + Constants.ZTABLE_COMPACT_CANCEL_ID; byte[] id = getContext().getZooCache().get(zTablePath); if (id == null) { // table probably deleted diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java b/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java index 0a598712ad..ea5bb097dc 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java @@ -63,7 +63,6 @@ import org.apache.accumulo.core.clientImpl.thrift.TableOperationExceptionType; import org.apache.accumulo.core.clientImpl.thrift.ThriftTableOperationException; import org.apache.accumulo.core.conf.AccumuloConfiguration; import org.apache.accumulo.core.conf.Property; -import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.dataImpl.KeyExtent; import org.apache.accumulo.core.fate.AgeOffStore; @@ -431,7 +430,7 @@ public class Manager extends AbstractServer AccumuloConfiguration aconf = context.getConfiguration(); log.info("Version {}", Constants.VERSION); - log.info("Instance {}", getInstanceID()); + log.info("Instance {}", context.getInstanceID()); timeKeeper = new ManagerTime(this, aconf); tserverSet = new LiveTServerSet(context, this); initializeBalancer(); @@ -449,7 +448,7 @@ public class Manager extends AbstractServer final long tokenUpdateInterval = aconf.getTimeInMillis(Property.GENERAL_DELEGATION_TOKEN_UPDATE_INTERVAL); keyDistributor = new ZooAuthenticationKeyDistributor(context.getZooReaderWriter(), - getZooKeeperRoot() + Constants.ZDELEGATION_TOKEN_KEYS); + context.getZooKeeperRoot() + Constants.ZDELEGATION_TOKEN_KEYS); authenticationTokenKeyManager = new AuthenticationTokenKeyManager(context.getSecretManager(), keyDistributor, tokenUpdateInterval, tokenLifetime); delegationTokensAvailable = true; @@ -461,14 +460,6 @@ public class Manager extends AbstractServer aconf.getTimeInMillis(Property.MANAGER_RECOVERY_WAL_EXISTENCE_CACHE_TIME); } - public InstanceId getInstanceID() { - return getContext().getInstanceID(); - } - - public String getZooKeeperRoot() { - return getContext().getZooKeeperRoot(); - } - public TServerConnection getConnection(TServerInstance server) { return tserverSet.getConnection(server); } @@ -477,7 +468,7 @@ public class Manager extends AbstractServer ServerContext context = getContext(); synchronized (mergeLock) { try { - String path = getZooKeeperRoot() + Constants.ZTABLES + "/" + tableId + "/merge"; + String path = context.getZooKeeperRoot() + Constants.ZTABLES + "/" + tableId + "/merge"; if (!context.getZooReaderWriter().exists(path)) { return new MergeInfo(); } @@ -501,8 +492,8 @@ public class Manager extends AbstractServer throws KeeperException, InterruptedException { ServerContext context = getContext(); synchronized (mergeLock) { - String path = - getZooKeeperRoot() + Constants.ZTABLES + "/" + info.getExtent().tableId() + "/merge"; + String path = context.getZooKeeperRoot() + Constants.ZTABLES + "/" + + info.getExtent().tableId() + "/merge"; info.setState(state); if (state.equals(MergeState.NONE)) { context.getZooReaderWriter().recursiveDelete(path, NodeMissingPolicy.SKIP); @@ -524,7 +515,7 @@ public class Manager extends AbstractServer public void clearMergeState(TableId tableId) throws KeeperException, InterruptedException { synchronized (mergeLock) { - String path = getZooKeeperRoot() + Constants.ZTABLES + "/" + tableId + "/merge"; + String path = getContext().getZooKeeperRoot() + Constants.ZTABLES + "/" + tableId + "/merge"; getContext().getZooReaderWriter().recursiveDelete(path, NodeMissingPolicy.SKIP); mergeLock.notifyAll(); } @@ -534,8 +525,8 @@ public class Manager extends AbstractServer void setManagerGoalState(ManagerGoalState state) { try { getContext().getZooReaderWriter().putPersistentData( - getZooKeeperRoot() + Constants.ZMANAGER_GOAL_STATE, state.name().getBytes(UTF_8), - NodeExistsPolicy.OVERWRITE); + getContext().getZooKeeperRoot() + Constants.ZMANAGER_GOAL_STATE, + state.name().getBytes(UTF_8), NodeExistsPolicy.OVERWRITE); } catch (Exception ex) { log.error("Unable to set manager goal state in zookeeper"); } @@ -545,7 +536,7 @@ public class Manager extends AbstractServer while (true) { try { byte[] data = getContext().getZooReaderWriter() - .getData(getZooKeeperRoot() + Constants.ZMANAGER_GOAL_STATE); + .getData(getContext().getZooKeeperRoot() + Constants.ZMANAGER_GOAL_STATE); return ManagerGoalState.valueOf(new String(data, UTF_8)); } catch (Exception e) { log.error("Problem getting real goal state from zookeeper: ", e); @@ -1215,7 +1206,7 @@ public class Manager extends AbstractServer @Override public void run() { final ServerContext context = getContext(); - final String zroot = getZooKeeperRoot(); + final String zroot = context.getZooKeeperRoot(); // ACCUMULO-4424 Put up the Thrift servers before getting the lock as a sign of process health // when a hot-standby @@ -1347,10 +1338,11 @@ public class Manager extends AbstractServer throw new IllegalStateException("Upgrade coordinator is unexpectedly not complete"); } try { - final AgeOffStore<Manager> store = new AgeOffStore<>( - new org.apache.accumulo.core.fate.ZooStore<>(getZooKeeperRoot() + Constants.ZFATE, - context.getZooReaderWriter()), - HOURS.toMillis(8), System::currentTimeMillis); + final AgeOffStore<Manager> store = + new AgeOffStore<>( + new org.apache.accumulo.core.fate.ZooStore<>( + context.getZooKeeperRoot() + Constants.ZFATE, context.getZooReaderWriter()), + HOURS.toMillis(8), System::currentTimeMillis); Fate<Manager> f = initializeFateInstance(store, getConfiguration()); fateRef.set(f); diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/ManagerClientServiceHandler.java b/server/manager/src/main/java/org/apache/accumulo/manager/ManagerClientServiceHandler.java index ad00a842ea..02057c3b89 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/ManagerClientServiceHandler.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/ManagerClientServiceHandler.java @@ -106,8 +106,8 @@ public class ManagerClientServiceHandler implements ManagerClientService.Iface { throw new ThriftSecurityException(c.getPrincipal(), SecurityErrorCode.PERMISSION_DENIED); } - String zTablePath = Constants.ZROOT + "/" + manager.getInstanceID() + Constants.ZTABLES + "/" - + tableId + Constants.ZTABLE_FLUSH_ID; + String zTablePath = manager.getContext().getZooKeeperRoot() + Constants.ZTABLES + "/" + tableId + + Constants.ZTABLE_FLUSH_ID; ZooReaderWriter zoo = manager.getContext().getZooReaderWriter(); byte[] fid; diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/ManagerTime.java b/server/manager/src/main/java/org/apache/accumulo/manager/ManagerTime.java index fa7020a0ef..b7cb2bfcdc 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/ManagerTime.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/ManagerTime.java @@ -89,7 +89,7 @@ public class ManagerTime { private final AtomicReference<Duration> skewAmount; public ManagerTime(Manager manager, AccumuloConfiguration conf) throws IOException { - this.zPath = manager.getZooKeeperRoot() + Constants.ZMANAGER_TICK; + this.zPath = manager.getContext().getZooKeeperRoot() + Constants.ZMANAGER_TICK; this.zk = manager.getContext().getZooReaderWriter(); this.manager = manager; diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/recovery/RecoveryManager.java b/server/manager/src/main/java/org/apache/accumulo/manager/recovery/RecoveryManager.java index 5d48d839a0..7efd6f4511 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/recovery/RecoveryManager.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/recovery/RecoveryManager.java @@ -78,7 +78,7 @@ public class RecoveryManager { zooCache = new ZooCache(manager.getContext().getZooReader(), null); try { List<String> workIDs = - new DistributedWorkQueue(manager.getZooKeeperRoot() + Constants.ZRECOVERY, + new DistributedWorkQueue(manager.getContext().getZooKeeperRoot() + Constants.ZRECOVERY, manager.getConfiguration(), manager.getContext()).getWorkQueued(); sortsQueued.addAll(workIDs); } catch (Exception e) { @@ -131,14 +131,15 @@ public class RecoveryManager { private void initiateSort(String sortId, String source, final String destination) throws KeeperException, InterruptedException { String work = source + "|" + destination; - new DistributedWorkQueue(manager.getZooKeeperRoot() + Constants.ZRECOVERY, + new DistributedWorkQueue(manager.getContext().getZooKeeperRoot() + Constants.ZRECOVERY, manager.getConfiguration(), manager.getContext()).addWork(sortId, work.getBytes(UTF_8)); synchronized (this) { sortsQueued.add(sortId); } - final String path = manager.getZooKeeperRoot() + Constants.ZRECOVERY + "/" + sortId; + final String path = + manager.getContext().getZooKeeperRoot() + Constants.ZRECOVERY + "/" + sortId; log.info("Created zookeeper entry {} with data {}", path, work); } @@ -180,9 +181,8 @@ public class RecoveryManager { sortQueued = sortsQueued.contains(sortId); } - if (sortQueued - && zooCache.get(manager.getZooKeeperRoot() + Constants.ZRECOVERY + "/" + sortId) - == null) { + if (sortQueued && zooCache.get( + manager.getContext().getZooKeeperRoot() + Constants.ZRECOVERY + "/" + sortId) == null) { synchronized (this) { sortsQueued.remove(sortId); } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/state/MergeStats.java b/server/manager/src/main/java/org/apache/accumulo/manager/state/MergeStats.java index a60f8f46dc..c414cff441 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/state/MergeStats.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/state/MergeStats.java @@ -33,7 +33,6 @@ import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.data.Value; import org.apache.accumulo.core.dataImpl.KeyExtent; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; -import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.core.metadata.AccumuloTable; import org.apache.accumulo.core.metadata.TabletLocationState; import org.apache.accumulo.core.metadata.TabletLocationState.BadLocationStateException; @@ -238,8 +237,8 @@ public class MergeStats { ZooReaderWriter zooReaderWriter = opts.getServerContext().getZooReaderWriter(); for (Entry<String,String> entry : tableIdMap.entrySet()) { final String table = entry.getKey(), tableId = entry.getValue(); - String path = ZooUtil.getRoot(client.instanceOperations().getInstanceId()) - + Constants.ZTABLES + "/" + tableId + "/merge"; + String path = opts.getServerContext().getZooKeeperRoot() + Constants.ZTABLES + "/" + + tableId + "/merge"; MergeInfo info = new MergeInfo(); if (zooReaderWriter.exists(path)) { byte[] data = zooReaderWriter.getData(path); diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactRange.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactRange.java index 46e0ce12c5..4c2fcb0645 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactRange.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactRange.java @@ -97,8 +97,8 @@ public class CompactRange extends ManagerRepo { @Override public Repo<Manager> call(final long tid, Manager env) throws Exception { - String zTablePath = Constants.ZROOT + "/" + env.getInstanceID() + Constants.ZTABLES + "/" - + tableId + Constants.ZTABLE_COMPACT_ID; + String zTablePath = env.getContext().getZooKeeperRoot() + Constants.ZTABLES + "/" + tableId + + Constants.ZTABLE_COMPACT_ID; ZooReaderWriter zoo = env.getContext().getZooReaderWriter(); byte[] cid; @@ -147,8 +147,8 @@ public class CompactRange extends ManagerRepo { static void removeIterators(Manager environment, final long txid, TableId tableId) throws Exception { - String zTablePath = Constants.ZROOT + "/" + environment.getInstanceID() + Constants.ZTABLES - + "/" + tableId + Constants.ZTABLE_COMPACT_ID; + String zTablePath = environment.getContext().getZooKeeperRoot() + Constants.ZTABLES + "/" + + tableId + Constants.ZTABLE_COMPACT_ID; ZooReaderWriter zoo = environment.getContext().getZooReaderWriter(); diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriver.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriver.java index 6220bb163c..afcf127dce 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriver.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriver.java @@ -35,6 +35,7 @@ import org.apache.accumulo.core.dataImpl.KeyExtent; import org.apache.accumulo.core.fate.FateTxId; import org.apache.accumulo.core.fate.Repo; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.core.manager.state.tables.TableState; import org.apache.accumulo.core.metadata.AccumuloTable; import org.apache.accumulo.core.metadata.TServerInstance; @@ -54,7 +55,7 @@ import org.slf4j.LoggerFactory; class CompactionDriver extends ManagerRepo { public static String createCompactionCancellationPath(InstanceId instanceId, TableId tableId) { - return Constants.ZROOT + "/" + instanceId + Constants.ZTABLES + "/" + tableId.canonical() + return ZooUtil.getRoot(instanceId) + Constants.ZTABLES + "/" + tableId.canonical() + Constants.ZTABLE_COMPACT_CANCEL_ID; } @@ -85,7 +86,8 @@ class CompactionDriver extends ManagerRepo { return 0; } - String zCancelID = createCompactionCancellationPath(manager.getInstanceID(), tableId); + String zCancelID = + createCompactionCancellationPath(manager.getContext().getInstanceID(), tableId); ZooReaderWriter zoo = manager.getContext().getZooReaderWriter(); if (Long.parseLong(new String(zoo.getData(zCancelID), UTF_8)) >= compactId) { @@ -96,7 +98,7 @@ class CompactionDriver extends ManagerRepo { } String deleteMarkerPath = - PreDeleteTable.createDeleteMarkerPath(manager.getInstanceID(), tableId); + PreDeleteTable.createDeleteMarkerPath(manager.getContext().getInstanceID(), tableId); if (zoo.exists(deleteMarkerPath)) { // table is being deleted throw new AcceptableThriftTableOperationException(tableId.canonical(), null, diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/cancel/CancelCompactions.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/cancel/CancelCompactions.java index 6dad08986d..0901edf9ea 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/cancel/CancelCompactions.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/cancel/CancelCompactions.java @@ -68,9 +68,9 @@ public class CancelCompactions extends ManagerRepo { public static void mutateZooKeeper(long tid, TableId tableId, Manager environment) throws Exception { - String zCompactID = Constants.ZROOT + "/" + environment.getInstanceID() + Constants.ZTABLES - + "/" + tableId + Constants.ZTABLE_COMPACT_ID; - String zCancelID = Constants.ZROOT + "/" + environment.getInstanceID() + Constants.ZTABLES + "/" + String zCompactID = environment.getContext().getZooKeeperRoot() + Constants.ZTABLES + "/" + + tableId + Constants.ZTABLE_COMPACT_ID; + String zCancelID = environment.getContext().getZooKeeperRoot() + Constants.ZTABLES + "/" + tableId + Constants.ZTABLE_COMPACT_CANCEL_ID; ZooReaderWriter zoo = environment.getContext().getZooReaderWriter(); diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/PreDeleteTable.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/PreDeleteTable.java index 000d18ba67..77273d71d0 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/PreDeleteTable.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/PreDeleteTable.java @@ -26,6 +26,7 @@ import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.Repo; import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.core.fate.zookeeper.ZooUtil.NodeExistsPolicy; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; @@ -36,7 +37,7 @@ import org.apache.zookeeper.KeeperException; public class PreDeleteTable extends ManagerRepo { public static String createDeleteMarkerPath(InstanceId instanceId, TableId tableId) { - return Constants.ZROOT + "/" + instanceId + Constants.ZTABLES + "/" + tableId.canonical() + return ZooUtil.getRoot(instanceId) + Constants.ZTABLES + "/" + tableId.canonical() + Constants.ZTABLE_DELETE_MARKER; } @@ -58,7 +59,8 @@ public class PreDeleteTable extends ManagerRepo { private void preventFutureCompactions(Manager environment) throws KeeperException, InterruptedException { - String deleteMarkerPath = createDeleteMarkerPath(environment.getInstanceID(), tableId); + String deleteMarkerPath = + createDeleteMarkerPath(environment.getContext().getInstanceID(), tableId); ZooReaderWriter zoo = environment.getContext().getZooReaderWriter(); zoo.putPersistentData(deleteMarkerPath, new byte[] {}, NodeExistsPolicy.SKIP); } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/create/PopulateZookeeperWithNamespace.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/create/PopulateZookeeperWithNamespace.java index b47223f151..301f6e65e8 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/create/PopulateZookeeperWithNamespace.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/create/PopulateZookeeperWithNamespace.java @@ -54,8 +54,8 @@ class PopulateZookeeperWithNamespace extends ManagerRepo { try { var context = manager.getContext(); NamespaceMapping.put(context.getZooReaderWriter(), - Constants.ZROOT + "/" + context.getInstanceID() + Constants.ZNAMESPACES, - namespaceInfo.namespaceId, namespaceInfo.namespaceName); + context.getZooKeeperRoot() + Constants.ZNAMESPACES, namespaceInfo.namespaceId, + namespaceInfo.namespaceName); TableManager.prepareNewNamespaceState(context, namespaceInfo.namespaceId, namespaceInfo.namespaceName, NodeExistsPolicy.OVERWRITE); diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/rename/RenameNamespace.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/rename/RenameNamespace.java index b1fcb9f30b..ebcb2e73ce 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/rename/RenameNamespace.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/rename/RenameNamespace.java @@ -56,8 +56,8 @@ public class RenameNamespace extends ManagerRepo { Utils.getTableNameLock().lock(); try { - NamespaceMapping.rename(zoo, manager.getZooKeeperRoot() + Constants.ZNAMESPACES, namespaceId, - oldName, newName); + NamespaceMapping.rename(zoo, manager.getContext().getZooKeeperRoot() + Constants.ZNAMESPACES, + namespaceId, oldName, newName); manager.getContext().clearTableListCache(); } finally { diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/rename/RenameTable.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/rename/RenameTable.java index 3fbbd5184b..4d605f6df0 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/rename/RenameTable.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/rename/RenameTable.java @@ -83,8 +83,8 @@ public class RenameTable extends ManagerRepo { final String newName = qualifiedNewTableName.getSecond(); final String oldName = qualifiedOldTableName.getSecond(); - final String tap = - manager.getZooKeeperRoot() + Constants.ZTABLES + "/" + tableId + Constants.ZTABLE_NAME; + final String tap = manager.getContext().getZooKeeperRoot() + Constants.ZTABLES + "/" + tableId + + Constants.ZTABLE_NAME; zoo.mutateExisting(tap, current -> { final String currentName = new String(current, UTF_8); diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tserverOps/ShutdownTServer.java b/server/manager/src/main/java/org/apache/accumulo/manager/tserverOps/ShutdownTServer.java index eb7ab83904..4388ec6562 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tserverOps/ShutdownTServer.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tserverOps/ShutdownTServer.java @@ -96,11 +96,10 @@ public class ShutdownTServer extends ManagerRepo { // suppress assignment of tablets to the server if (force) { ZooReaderWriter zoo = manager.getContext().getZooReaderWriter(); - var path = - ServiceLock.path(manager.getZooKeeperRoot() + Constants.ZTSERVERS + "/" + hostAndPort); + var zRoot = manager.getContext().getZooKeeperRoot(); + var path = ServiceLock.path(zRoot + Constants.ZTSERVERS + "/" + hostAndPort); ServiceLock.deleteLock(zoo, path); - path = ServiceLock - .path(manager.getZooKeeperRoot() + Constants.ZDEADTSERVERS + "/" + hostAndPort); + path = ServiceLock.path(zRoot + Constants.ZDEADTSERVERS + "/" + hostAndPort); zoo.putPersistentData(path.toString(), "forced down".getBytes(UTF_8), NodeExistsPolicy.OVERWRITE); } 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 60d80aaa44..ffdd6ba506 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 @@ -124,7 +124,7 @@ public class Upgrader11to12 implements Upgrader { log.info("Root metadata in ZooKeeper after upgrade: {}", rtm.toJson()); } - String zPath = Constants.ZROOT + "/" + context.getInstanceID() + Constants.ZNAMESPACES; + String zPath = context.getZooKeeperRoot() + Constants.ZNAMESPACES; byte[] namespacesData = zrw.getData(zPath); if (namespacesData.length != 0) { throw new IllegalStateException( diff --git a/server/manager/src/test/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriverTest.java b/server/manager/src/test/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriverTest.java index 8840138c9a..8cfd2d0c63 100644 --- a/server/manager/src/test/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriverTest.java +++ b/server/manager/src/test/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriverTest.java @@ -19,6 +19,10 @@ package org.apache.accumulo.manager.tableOps.compact; import static java.nio.charset.StandardCharsets.UTF_8; +import static org.easymock.EasyMock.createMock; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.verify; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -35,7 +39,6 @@ import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.delete.PreDeleteTable; import org.apache.accumulo.server.ServerContext; -import org.easymock.EasyMock; import org.junit.jupiter.api.Test; public class CompactionDriverTest { @@ -51,17 +54,17 @@ public class CompactionDriverTest { final byte[] startRow = new byte[0]; final byte[] endRow = new byte[0]; - Manager manager = EasyMock.createNiceMock(Manager.class); - ServerContext ctx = EasyMock.createNiceMock(ServerContext.class); - ZooReaderWriter zrw = EasyMock.createNiceMock(ZooReaderWriter.class); - EasyMock.expect(manager.getInstanceID()).andReturn(instance).anyTimes(); - EasyMock.expect(manager.getContext()).andReturn(ctx); - EasyMock.expect(ctx.getZooReaderWriter()).andReturn(zrw); + Manager manager = createMock(Manager.class); + ServerContext ctx = createMock(ServerContext.class); + ZooReaderWriter zrw = createMock(ZooReaderWriter.class); + expect(ctx.getInstanceID()).andReturn(instance).anyTimes(); + expect(ctx.getZooReaderWriter()).andReturn(zrw).anyTimes(); + expect(manager.getContext()).andReturn(ctx).anyTimes(); final String zCancelID = CompactionDriver.createCompactionCancellationPath(instance, tableId); - EasyMock.expect(zrw.getData(zCancelID)).andReturn(Long.toString(cancelId).getBytes(UTF_8)); + expect(zrw.getData(zCancelID)).andReturn(Long.toString(cancelId).getBytes(UTF_8)); - EasyMock.replay(manager, ctx, zrw); + replay(manager, ctx, zrw); final CompactionDriver driver = new CompactionDriver(compactId, namespaceId, tableId, startRow, endRow); @@ -75,7 +78,7 @@ public class CompactionDriverTest { assertEquals(e.getType(), TableOperationExceptionType.OTHER); assertEquals(TableOperationsImpl.COMPACTION_CANCELED_MSG, e.getDescription()); - EasyMock.verify(manager, ctx, zrw); + verify(manager, ctx, zrw); } @Test @@ -89,20 +92,20 @@ public class CompactionDriverTest { final byte[] startRow = new byte[0]; final byte[] endRow = new byte[0]; - Manager manager = EasyMock.createNiceMock(Manager.class); - ServerContext ctx = EasyMock.createNiceMock(ServerContext.class); - ZooReaderWriter zrw = EasyMock.createNiceMock(ZooReaderWriter.class); - EasyMock.expect(manager.getInstanceID()).andReturn(instance).anyTimes(); - EasyMock.expect(manager.getContext()).andReturn(ctx); - EasyMock.expect(ctx.getZooReaderWriter()).andReturn(zrw); + Manager manager = createMock(Manager.class); + ServerContext ctx = createMock(ServerContext.class); + ZooReaderWriter zrw = createMock(ZooReaderWriter.class); + expect(ctx.getInstanceID()).andReturn(instance).anyTimes(); + expect(ctx.getZooReaderWriter()).andReturn(zrw).anyTimes(); + expect(manager.getContext()).andReturn(ctx).anyTimes(); final String zCancelID = CompactionDriver.createCompactionCancellationPath(instance, tableId); - EasyMock.expect(zrw.getData(zCancelID)).andReturn(Long.toString(cancelId).getBytes(UTF_8)); + expect(zrw.getData(zCancelID)).andReturn(Long.toString(cancelId).getBytes(UTF_8)); String deleteMarkerPath = PreDeleteTable.createDeleteMarkerPath(instance, tableId); - EasyMock.expect(zrw.exists(deleteMarkerPath)).andReturn(true); + expect(zrw.exists(deleteMarkerPath)).andReturn(true); - EasyMock.replay(manager, ctx, zrw); + replay(manager, ctx, zrw); final CompactionDriver driver = new CompactionDriver(compactId, namespaceId, tableId, startRow, endRow); @@ -116,7 +119,7 @@ public class CompactionDriverTest { assertEquals(e.getType(), TableOperationExceptionType.OTHER); assertEquals(TableOperationsImpl.TABLE_DELETED_MSG, e.getDescription()); - EasyMock.verify(manager, ctx, zrw); + verify(manager, ctx, zrw); } } diff --git a/server/manager/src/test/java/org/apache/accumulo/manager/upgrade/Upgrader11to12Test.java b/server/manager/src/test/java/org/apache/accumulo/manager/upgrade/Upgrader11to12Test.java index bb21b4efec..d0c1bbf1cf 100644 --- a/server/manager/src/test/java/org/apache/accumulo/manager/upgrade/Upgrader11to12Test.java +++ b/server/manager/src/test/java/org/apache/accumulo/manager/upgrade/Upgrader11to12Test.java @@ -353,49 +353,46 @@ public class Upgrader11to12Test { ServerContext context = createMock(ServerContext.class); ZooReaderWriter zrw = createStrictMock(ZooReaderWriter.class); + final var zkRoot = ZooUtil.getRoot(iid); expect(context.getInstanceID()).andReturn(iid).anyTimes(); expect(context.getZooReaderWriter()).andReturn(zrw).anyTimes(); + expect(context.getZooKeeperRoot()).andReturn(zkRoot).anyTimes(); - zrw.recursiveDelete(Constants.ZROOT + "/" + iid.canonical() + "/tracers", - ZooUtil.NodeMissingPolicy.SKIP); + zrw.recursiveDelete(zkRoot + "/tracers", ZooUtil.NodeMissingPolicy.SKIP); expectLastCall().once(); Capture<Stat> statCapture = newCapture(); - expect(zrw.getData(eq(Constants.ZROOT + "/" + iid.canonical() + "/root_tablet"), - capture(statCapture))).andAnswer(() -> { - Stat stat = statCapture.getValue(); - stat.setCtime(System.currentTimeMillis()); - stat.setMtime(System.currentTimeMillis()); - stat.setVersion(123); // default version - stat.setDataLength(zKRootV1.length); - statCapture.setValue(stat); - return zKRootV1; - }).once(); + expect(zrw.getData(eq(zkRoot + "/root_tablet"), capture(statCapture))).andAnswer(() -> { + Stat stat = statCapture.getValue(); + stat.setCtime(System.currentTimeMillis()); + stat.setMtime(System.currentTimeMillis()); + stat.setVersion(123); // default version + stat.setDataLength(zKRootV1.length); + statCapture.setValue(stat); + return zKRootV1; + }).once(); Capture<byte[]> byteCapture = newCapture(); - expect(zrw.overwritePersistentData(eq(Constants.ZROOT + "/" + iid.canonical() + "/root_tablet"), - capture(byteCapture), eq(123))).andReturn(true).once(); + expect(zrw.overwritePersistentData(eq(zkRoot + "/root_tablet"), capture(byteCapture), eq(123))) + .andReturn(true).once(); - expect(zrw.getData(eq(Constants.ZROOT + "/" + iid.canonical() + Constants.ZNAMESPACES))) - .andReturn(new byte[0]).once(); + expect(zrw.getData(eq(zkRoot + Constants.ZNAMESPACES))).andReturn(new byte[0]).once(); Map<String,String> mockNamespaces = Map.of("ns1", "ns1name", "ns2", "ns2name"); - expect(zrw.getChildren(eq(Constants.ZROOT + "/" + iid.canonical() + Constants.ZNAMESPACES))) + expect(zrw.getChildren(eq(zkRoot + Constants.ZNAMESPACES))) .andReturn(List.copyOf(mockNamespaces.keySet())).once(); for (String ns : mockNamespaces.keySet()) { - Supplier<String> pathMatcher = () -> eq(Constants.ZROOT + "/" + iid.canonical() - + Constants.ZNAMESPACES + "/" + ns + ZNAMESPACE_NAME); + Supplier<String> pathMatcher = + () -> eq(zkRoot + Constants.ZNAMESPACES + "/" + ns + ZNAMESPACE_NAME); expect(zrw.getData(pathMatcher.get())).andReturn(mockNamespaces.get(ns).getBytes(UTF_8)) .once(); } byte[] mapping = NamespaceMapping.serialize(mockNamespaces); - expect( - zrw.putPersistentData(eq(Constants.ZROOT + "/" + iid.canonical() + Constants.ZNAMESPACES), - aryEq(mapping), eq(ZooUtil.NodeExistsPolicy.OVERWRITE))) - .andReturn(true).once(); + expect(zrw.putPersistentData(eq(zkRoot + Constants.ZNAMESPACES), aryEq(mapping), + eq(ZooUtil.NodeExistsPolicy.OVERWRITE))).andReturn(true).once(); for (String ns : mockNamespaces.keySet()) { - Supplier<String> pathMatcher = () -> eq(Constants.ZROOT + "/" + iid.canonical() - + Constants.ZNAMESPACES + "/" + ns + ZNAMESPACE_NAME); + Supplier<String> pathMatcher = + () -> eq(zkRoot + Constants.ZNAMESPACES + "/" + ns + ZNAMESPACE_NAME); zrw.delete(pathMatcher.get()); expectLastCall().once(); } diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java index 287bee16f3..53cba11d06 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java @@ -679,8 +679,8 @@ public class Tablet extends TabletBase { public long getFlushID() throws NoNodeException { try { - String zTablePath = Constants.ZROOT + "/" + tabletServer.getInstanceID() + Constants.ZTABLES - + "/" + extent.tableId() + Constants.ZTABLE_FLUSH_ID; + String zTablePath = tabletServer.getContext().getZooKeeperRoot() + Constants.ZTABLES + "/" + + extent.tableId() + Constants.ZTABLE_FLUSH_ID; String id = new String(context.getZooReaderWriter().getData(zTablePath), UTF_8); return Long.parseLong(id); } catch (InterruptedException | NumberFormatException e) { @@ -695,16 +695,16 @@ public class Tablet extends TabletBase { } long getCompactionCancelID() { - String zTablePath = Constants.ZROOT + "/" + tabletServer.getInstanceID() + Constants.ZTABLES - + "/" + extent.tableId() + Constants.ZTABLE_COMPACT_CANCEL_ID; + String zTablePath = tabletServer.getContext().getZooKeeperRoot() + Constants.ZTABLES + "/" + + extent.tableId() + Constants.ZTABLE_COMPACT_CANCEL_ID; String id = new String(context.getZooCache().get(zTablePath), UTF_8); return Long.parseLong(id); } public Pair<Long,CompactionConfig> getCompactionID() throws NoNodeException { try { - String zTablePath = Constants.ZROOT + "/" + tabletServer.getInstanceID() + Constants.ZTABLES - + "/" + extent.tableId() + Constants.ZTABLE_COMPACT_ID; + String zTablePath = tabletServer.getContext().getZooKeeperRoot() + Constants.ZTABLES + "/" + + extent.tableId() + Constants.ZTABLE_COMPACT_ID; String[] tokens = new String(context.getZooReaderWriter().getData(zTablePath), UTF_8).split(","); diff --git a/test/src/main/java/org/apache/accumulo/test/ExistingMacIT.java b/test/src/main/java/org/apache/accumulo/test/ExistingMacIT.java index 52827a4d69..289f71d504 100644 --- a/test/src/main/java/org/apache/accumulo/test/ExistingMacIT.java +++ b/test/src/main/java/org/apache/accumulo/test/ExistingMacIT.java @@ -31,7 +31,6 @@ import java.util.Collection; import java.util.Map.Entry; import java.util.Set; -import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.client.Accumulo; import org.apache.accumulo.core.client.AccumuloClient; import org.apache.accumulo.core.client.BatchWriter; @@ -117,8 +116,7 @@ public class ExistingMacIT extends ConfigurableMacBase { } ZooReaderWriter zrw = getCluster().getServerContext().getZooReaderWriter(); - final String zInstanceRoot = - Constants.ZROOT + "/" + client.instanceOperations().getInstanceId(); + final String zInstanceRoot = getCluster().getServerContext().getZooKeeperRoot(); while (!AccumuloStatus.isAccumuloOffline(zrw, zInstanceRoot)) { log.debug("Accumulo services still have their ZK locks held"); Thread.sleep(1000); diff --git a/test/src/main/java/org/apache/accumulo/test/ImportExportIT.java b/test/src/main/java/org/apache/accumulo/test/ImportExportIT.java index 8e5b076557..efb3bbbf31 100644 --- a/test/src/main/java/org/apache/accumulo/test/ImportExportIT.java +++ b/test/src/main/java/org/apache/accumulo/test/ImportExportIT.java @@ -47,6 +47,7 @@ import org.apache.accumulo.core.client.BatchWriter; import org.apache.accumulo.core.client.Scanner; import org.apache.accumulo.core.client.admin.CompactionConfig; import org.apache.accumulo.core.client.admin.ImportConfiguration; +import org.apache.accumulo.core.conf.Property; import org.apache.accumulo.core.data.Key; import org.apache.accumulo.core.data.Mutation; import org.apache.accumulo.core.data.Range; @@ -371,9 +372,11 @@ public class ImportExportIT extends AccumuloClusterHarness { AccumuloCluster cluster = getCluster(); assertTrue(cluster instanceof MiniAccumuloClusterImpl); MiniAccumuloClusterImpl mac = (MiniAccumuloClusterImpl) cluster; - String rootPath = mac.getConfig().getDir().getAbsolutePath(); FileSystem fs = getCluster().getFileSystem(); - FileStatus[] status = fs.listStatus(new Path(rootPath + "/accumulo/tables/" + destTableId)); + // the following path expects mini to be configured with a single volume + final Path tablePath = new Path(mac.getSiteConfiguration().get(Property.INSTANCE_VOLUMES) + "/" + + Constants.TABLE_DIR + "/" + destTableId); + FileStatus[] status = fs.listStatus(tablePath); for (FileStatus tabletDir : status) { var contents = fs.listStatus(tabletDir.getPath()); for (FileStatus file : contents) { diff --git a/test/src/main/java/org/apache/accumulo/test/ThriftServerBindsBeforeZooKeeperLockIT.java b/test/src/main/java/org/apache/accumulo/test/ThriftServerBindsBeforeZooKeeperLockIT.java index 33588a882b..41a3f76e63 100644 --- a/test/src/main/java/org/apache/accumulo/test/ThriftServerBindsBeforeZooKeeperLockIT.java +++ b/test/src/main/java/org/apache/accumulo/test/ThriftServerBindsBeforeZooKeeperLockIT.java @@ -32,7 +32,6 @@ import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.client.Accumulo; import org.apache.accumulo.core.client.AccumuloClient; import org.apache.accumulo.core.conf.Property; -import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.util.MonitorUtil; import org.apache.accumulo.gc.SimpleGarbageCollector; import org.apache.accumulo.harness.AccumuloClusterHarness; @@ -135,13 +134,12 @@ public class ThriftServerBindsBeforeZooKeeperLockIT extends AccumuloClusterHarne public void testManagerService() throws Exception { final MiniAccumuloClusterImpl cluster = (MiniAccumuloClusterImpl) getCluster(); try (AccumuloClient client = Accumulo.newClient().from(getClientProps()).build()) { - final InstanceId instanceID = client.instanceOperations().getInstanceId(); // Wait for the Manager to grab its lock while (true) { try { List<String> locks = cluster.getServerContext().getZooReader() - .getChildren(Constants.ZROOT + "/" + instanceID + Constants.ZMANAGER_LOCK); + .getChildren(cluster.getServerContext().getZooKeeperRoot() + Constants.ZMANAGER_LOCK); if (!locks.isEmpty()) { break; } @@ -194,13 +192,12 @@ public class ThriftServerBindsBeforeZooKeeperLockIT extends AccumuloClusterHarne public void testGarbageCollectorPorts() throws Exception { final MiniAccumuloClusterImpl cluster = (MiniAccumuloClusterImpl) getCluster(); try (AccumuloClient client = Accumulo.newClient().from(getClientProps()).build()) { - InstanceId instanceID = client.instanceOperations().getInstanceId(); // Wait for the Manager to grab its lock while (true) { try { List<String> locks = cluster.getServerContext().getZooReader() - .getChildren(Constants.ZROOT + "/" + instanceID + Constants.ZGC_LOCK); + .getChildren(cluster.getServerContext().getZooKeeperRoot() + Constants.ZGC_LOCK); if (!locks.isEmpty()) { break; } diff --git a/test/src/main/java/org/apache/accumulo/test/VolumeManagerIT.java b/test/src/main/java/org/apache/accumulo/test/VolumeManagerIT.java index 4a3002bd07..7e3e619936 100644 --- a/test/src/main/java/org/apache/accumulo/test/VolumeManagerIT.java +++ b/test/src/main/java/org/apache/accumulo/test/VolumeManagerIT.java @@ -24,6 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Map; +import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.client.Accumulo; import org.apache.accumulo.core.client.AccumuloClient; import org.apache.accumulo.core.client.admin.NewTableConfiguration; @@ -50,6 +51,7 @@ public class VolumeManagerIT extends ConfigurableMacBase { vol1 = config.getSiteConfig().get(Property.INSTANCE_VOLUMES.getKey()); assertTrue(vol1.contains("localhost")); vol2 = vol1.replace("localhost", "127.0.0.1"); + // order matters here, because this is parsed later to find the path to the table volumes config.setProperty(Property.INSTANCE_VOLUMES.getKey(), String.join(",", vol2, vol1)); // Set Volume specific HDFS overrides @@ -121,8 +123,11 @@ public class VolumeManagerIT extends ConfigurableMacBase { // Confirm that table 1 has a block size of 10485760 FileSystem fs = this.cluster.getMiniDfs().getFileSystem(); - RemoteIterator<LocatedFileStatus> iter1 = - fs.listFiles(new Path("/accumulo/tables/" + tid1), true); + // t1 is configured to use vol1, which is the second in the volumes list + final Path tablePath1 = + new Path(cluster.getSiteConfiguration().get(Property.INSTANCE_VOLUMES).split(",")[1] + "/" + + Constants.TABLE_DIR + "/" + tid1); + RemoteIterator<LocatedFileStatus> iter1 = fs.listFiles(tablePath1, true); while (iter1.hasNext()) { LocatedFileStatus stat = iter1.next(); if (stat.isFile()) { @@ -131,8 +136,11 @@ public class VolumeManagerIT extends ConfigurableMacBase { } // Confirm that table 1 has a block size of 51200000 - RemoteIterator<LocatedFileStatus> iter2 = - fs.listFiles(new Path("/accumulo/tables/" + tid2), true); + // t2 is configured to use vol2, which is the first in the volumes list + final Path tablePath2 = + new Path(cluster.getSiteConfiguration().get(Property.INSTANCE_VOLUMES).split(",")[0] + "/" + + Constants.TABLE_DIR + "/" + tid2); + RemoteIterator<LocatedFileStatus> iter2 = fs.listFiles(tablePath2, true); while (iter2.hasNext()) { LocatedFileStatus stat = iter2.next(); if (stat.isFile()) { diff --git a/test/src/main/java/org/apache/accumulo/test/fate/zookeeper/FateIT.java b/test/src/main/java/org/apache/accumulo/test/fate/zookeeper/FateIT.java index 540277d96d..3428349a2c 100644 --- a/test/src/main/java/org/apache/accumulo/test/fate/zookeeper/FateIT.java +++ b/test/src/main/java/org/apache/accumulo/test/fate/zookeeper/FateIT.java @@ -46,6 +46,7 @@ import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.clientImpl.thrift.TableOperation; import org.apache.accumulo.core.conf.ConfigurationCopy; import org.apache.accumulo.core.conf.Property; +import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.AgeOffStore; @@ -56,6 +57,7 @@ import org.apache.accumulo.core.fate.Repo; import org.apache.accumulo.core.fate.ZooStore; import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; import org.apache.accumulo.manager.tableOps.TraceRepo; @@ -179,7 +181,8 @@ public class FateIT { private static ZooKeeperTestingServer szk = null; private static ZooReaderWriter zk = null; - private static final String ZK_ROOT = "/accumulo/" + UUID.randomUUID(); + private static final InstanceId IID = InstanceId.of(UUID.randomUUID()); + private static final String ZK_ROOT = ZooUtil.getRoot(IID); private static final NamespaceId NS = NamespaceId.of("testNameSpace"); private static final TableId TID = TableId.of("testTable"); diff --git a/test/src/main/java/org/apache/accumulo/test/fate/zookeeper/ZooMutatorIT.java b/test/src/main/java/org/apache/accumulo/test/fate/zookeeper/ZooMutatorIT.java index 639c52e02c..bf86086466 100644 --- a/test/src/main/java/org/apache/accumulo/test/fate/zookeeper/ZooMutatorIT.java +++ b/test/src/main/java/org/apache/accumulo/test/fate/zookeeper/ZooMutatorIT.java @@ -33,6 +33,7 @@ import java.util.concurrent.Future; import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; +import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.harness.WithTestNames; import org.apache.accumulo.test.zookeeper.ZooKeeperTestingServer; import org.junit.jupiter.api.Tag; @@ -84,7 +85,8 @@ public class ZooMutatorIT extends WithTestNames { File newFolder = new File(tempDir, testName() + "/"); assertTrue(newFolder.isDirectory() || newFolder.mkdir(), "failed to create dir: " + newFolder); try (ZooKeeperTestingServer szk = new ZooKeeperTestingServer(newFolder)) { - szk.initPaths("/accumulo/" + InstanceId.of(UUID.randomUUID())); + final var iid = InstanceId.of(UUID.randomUUID()); + szk.initPaths(ZooUtil.getRoot(iid)); ZooReaderWriter zk = szk.getZooReaderWriter(); var executor = Executors.newFixedThreadPool(16); diff --git a/test/src/main/java/org/apache/accumulo/test/functional/BackupManagerIT.java b/test/src/main/java/org/apache/accumulo/test/functional/BackupManagerIT.java index fd9a908d86..5e4067f1bb 100644 --- a/test/src/main/java/org/apache/accumulo/test/functional/BackupManagerIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/BackupManagerIT.java @@ -46,7 +46,7 @@ public class BackupManagerIT extends ConfigurableMacBase { Process backup = exec(Manager.class); try (AccumuloClient client = Accumulo.newClient().from(getClientProperties()).build()) { ZooReaderWriter writer = getCluster().getServerContext().getZooReaderWriter(); - String root = "/accumulo/" + client.instanceOperations().getInstanceId(); + String root = getCluster().getServerContext().getZooKeeperRoot(); // wait for 2 lock entries var path = ServiceLock.path(root + Constants.ZMANAGER_LOCK); diff --git a/test/src/main/java/org/apache/accumulo/test/functional/CloneTestIT.java b/test/src/main/java/org/apache/accumulo/test/functional/CloneTestIT.java index 06b8adc2c1..b8fc981441 100644 --- a/test/src/main/java/org/apache/accumulo/test/functional/CloneTestIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/CloneTestIT.java @@ -39,6 +39,7 @@ import java.util.TreeSet; import java.util.regex.Pattern; import org.apache.accumulo.cluster.AccumuloCluster; +import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.client.Accumulo; import org.apache.accumulo.core.client.AccumuloClient; import org.apache.accumulo.core.client.AccumuloException; @@ -226,7 +227,6 @@ public class CloneTestIT extends AccumuloClusterHarness { AccumuloCluster cluster = getCluster(); assumeTrue(cluster instanceof MiniAccumuloClusterImpl); MiniAccumuloClusterImpl mac = (MiniAccumuloClusterImpl) cluster; - String rootPath = mac.getConfig().getDir().getAbsolutePath(); // verify that deleting a new table removes the files c.tableOperations().create(table3); @@ -234,8 +234,12 @@ public class CloneTestIT extends AccumuloClusterHarness { c.tableOperations().flush(table3, null, null, true); // check for files FileSystem fs = getCluster().getFileSystem(); - String id = c.tableOperations().tableIdMap().get(table3); - FileStatus[] status = fs.listStatus(new Path(rootPath + "/accumulo/tables/" + id)); + final String id = c.tableOperations().tableIdMap().get(table3); + + // the following path expects mini to be configured with a single volume + final Path tablePath = new Path(mac.getSiteConfiguration().get(Property.INSTANCE_VOLUMES) + + "/" + Constants.TABLE_DIR + "/" + id); + FileStatus[] status = fs.listStatus(tablePath); assertTrue(status.length > 0); // verify disk usage List<DiskUsage> diskUsage = c.tableOperations().getDiskUsage(Collections.singleton(table3)); @@ -244,7 +248,6 @@ public class CloneTestIT extends AccumuloClusterHarness { // delete the table c.tableOperations().delete(table3); // verify its gone from the file system - Path tablePath = new Path(rootPath + "/accumulo/tables/" + id); if (fs.exists(tablePath)) { status = fs.listStatus(tablePath); assertTrue(status == null || status.length == 0); diff --git a/test/src/main/java/org/apache/accumulo/test/functional/GarbageCollectorIT.java b/test/src/main/java/org/apache/accumulo/test/functional/GarbageCollectorIT.java index bf8233125c..1e6c36edef 100644 --- a/test/src/main/java/org/apache/accumulo/test/functional/GarbageCollectorIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/GarbageCollectorIT.java @@ -141,7 +141,9 @@ public class GarbageCollectorIT extends ConfigurableMacBase { TestIngest.ingest(c, cluster.getFileSystem(), params); log.info("Compacting the table {}", table); c.tableOperations().compact(table, null, null, true, true); - String pathString = cluster.getConfig().getDir() + "/accumulo/tables/1/*/*.rf"; + // the following path expects mini to be configured with a single volume + final String pathString = cluster.getSiteConfiguration().get(Property.INSTANCE_VOLUMES) + "/" + + Constants.TABLE_DIR + "/1/*/*.rf"; log.info("Counting files in path: {}", pathString); int before = countFiles(pathString); diff --git a/test/src/main/java/org/apache/accumulo/test/functional/TableIT.java b/test/src/main/java/org/apache/accumulo/test/functional/TableIT.java index 0f63b9f67d..5bfce9b87d 100644 --- a/test/src/main/java/org/apache/accumulo/test/functional/TableIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/TableIT.java @@ -28,10 +28,12 @@ import java.io.FileNotFoundException; import java.time.Duration; import org.apache.accumulo.cluster.AccumuloCluster; +import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.client.Accumulo; import org.apache.accumulo.core.client.AccumuloClient; import org.apache.accumulo.core.client.Scanner; import org.apache.accumulo.core.client.admin.TableOperations; +import org.apache.accumulo.core.conf.Property; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.dataImpl.KeyExtent; import org.apache.accumulo.core.metadata.AccumuloTable; @@ -61,7 +63,6 @@ public class TableIT extends AccumuloClusterHarness { AccumuloCluster cluster = getCluster(); MiniAccumuloClusterImpl mac = (MiniAccumuloClusterImpl) cluster; - String rootPath = mac.getConfig().getDir().getAbsolutePath(); try (AccumuloClient c = Accumulo.newClient().from(getClientProps()).build()) { TableOperations to = c.tableOperations(); @@ -79,12 +80,15 @@ public class TableIT extends AccumuloClusterHarness { assertTrue(s.stream().findAny().isPresent()); FileSystem fs = getCluster().getFileSystem(); - assertTrue(fs.listStatus(new Path(rootPath + "/accumulo/tables/" + id)).length > 0); + // the following path expects mini to be configured with a single volume + final Path tablePath = new Path(mac.getSiteConfiguration().get(Property.INSTANCE_VOLUMES) + + "/" + Constants.TABLE_DIR + "/" + id); + assertTrue(fs.listStatus(tablePath).length > 0); to.delete(tableName); assertTrue(s.stream().findAny().isEmpty()); try { - assertEquals(0, fs.listStatus(new Path(rootPath + "/accumulo/tables/" + id)).length); + assertEquals(0, fs.listStatus(tablePath).length); } catch (FileNotFoundException ex) { // that's fine, too } diff --git a/test/src/main/java/org/apache/accumulo/test/lock/ServiceLockIT.java b/test/src/main/java/org/apache/accumulo/test/lock/ServiceLockIT.java index 3255ae701e..abaa969827 100644 --- a/test/src/main/java/org/apache/accumulo/test/lock/ServiceLockIT.java +++ b/test/src/main/java/org/apache/accumulo/test/lock/ServiceLockIT.java @@ -81,7 +81,8 @@ public class ServiceLockIT { @BeforeAll public static void setup() throws Exception { szk = new ZooKeeperTestingServer(tempDir); - szk.initPaths("/accumulo/" + InstanceId.of(UUID.randomUUID())); + final var iid = InstanceId.of(UUID.randomUUID()); + szk.initPaths(ZooUtil.getRoot(iid)); } @AfterAll