This is an automated email from the ASF dual-hosted git repository. ctubbsii pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/main by this push: new 3951427 Fix MiniAccumuloClusterImpl.verifyUp() (#2410) 3951427 is described below commit 39514270b1d8fad1b68b9e559467df9f5f81e4a5 Author: Christopher Tubbs <ctubb...@apache.org> AuthorDate: Fri Jan 7 00:30:47 2022 -0500 Fix MiniAccumuloClusterImpl.verifyUp() (#2410) Fix verifyUp method broken by #2408. The previous code attempted to use a client singleton resource (ZooSession, created inside ZooReaderWriter) without instantiating an AccumuloClient. This fix ensures that resource is created after MiniAccumuloClusterImpl's ServerContext has been created, so a client context is established before the client singleton resource is used. --- .../miniclusterImpl/MiniAccumuloClusterImpl.java | 60 +++++++--------------- 1 file changed, 18 insertions(+), 42 deletions(-) diff --git a/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloClusterImpl.java b/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloClusterImpl.java index 28b38f0..cf64861 100644 --- a/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloClusterImpl.java +++ b/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloClusterImpl.java @@ -19,6 +19,7 @@ package org.apache.accumulo.miniclusterImpl; import static java.nio.charset.StandardCharsets.UTF_8; +import static java.util.Objects.requireNonNull; import static org.apache.accumulo.fate.util.UtilWaitThread.sleepUninterruptibly; import java.io.File; @@ -41,7 +42,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Objects; import java.util.Properties; import java.util.Set; import java.util.concurrent.ExecutionException; @@ -608,66 +608,43 @@ public class MiniAccumuloClusterImpl implements AccumuloCluster { private void verifyUp() throws InterruptedException, IOException { - Objects.requireNonNull(getClusterControl().managerProcess, - "Error starting Manager - no process"); - Objects.requireNonNull(getClusterControl().managerProcess.info().startInstant().get(), + requireNonNull(getClusterControl().managerProcess, "Error starting Manager - no process"); + requireNonNull(getClusterControl().managerProcess.info().startInstant().get(), "Error starting Manager - instance not started"); - Objects.requireNonNull(getClusterControl().gcProcess, "Error starting GC - no process"); - Objects.requireNonNull(getClusterControl().gcProcess.info().startInstant().get(), + requireNonNull(getClusterControl().gcProcess, "Error starting GC - no process"); + requireNonNull(getClusterControl().gcProcess.info().startInstant().get(), "Error starting GC - instance not started"); int tsExpectedCount = 0; for (Process tsp : getClusterControl().tabletServerProcesses) { tsExpectedCount++; - Objects.requireNonNull(tsp, - "Error starting TabletServer " + tsExpectedCount + " - no process"); - Objects.requireNonNull(tsp.info().startInstant().get(), + requireNonNull(tsp, "Error starting TabletServer " + tsExpectedCount + " - no process"); + requireNonNull(tsp.info().startInstant().get(), "Error starting TabletServer " + tsExpectedCount + "- instance not started"); } - String zk = config.getExistingZooKeepers() != null ? config.getExistingZooKeepers() - : config.getZooKeepers(); - - ZooReaderWriter zrw = - new ZooReaderWriter(zk, 30000, Property.INSTANCE_SECRET.getDefaultValue()); - - String instanceId = null; - try { - for (String name : zrw.getChildren(Constants.ZROOT + Constants.ZINSTANCES)) { - if (name.equals(config.getInstanceName())) { - String instanceNamePath = Constants.ZROOT + Constants.ZINSTANCES + "/" + name; - byte[] bytes = zrw.getData(instanceNamePath); - instanceId = new String(bytes, UTF_8); - break; - } - } - } catch (KeeperException e) { - throw new RuntimeException("Unable to read instance name from zookeeper.", e); - } - if (instanceId == null) { - throw new RuntimeException(config.getInstanceName() + " instance name not found in ZK"); - } - String rootPath = ZooUtil.getRoot(instanceId); + var zrw = getServerContext().getZooReaderWriter(); + String rootPath = getServerContext().getZooKeeperRoot(); int tsActualCount = 0; int tryCount = 0; - while (tsActualCount != tsExpectedCount) { - tryCount++; - try { + try { + while (tsActualCount != tsExpectedCount) { + tryCount++; tsActualCount = 0; for (String child : zrw.getChildren(rootPath + Constants.ZTSERVERS)) { tsActualCount++; if (zrw.getChildren(rootPath + Constants.ZTSERVERS + "/" + child).isEmpty()) log.info("TServer " + tsActualCount + " not yet present in ZooKeeper"); } - } catch (KeeperException e) { - throw new RuntimeException("Unable to read TServer information from zookeeper.", e); - } - if (tryCount >= 10) { - throw new RuntimeException("Timed out waiting for TServer information in ZooKeeper"); + if (tryCount >= 10) { + throw new RuntimeException("Timed out waiting for TServer information in ZooKeeper"); + } + Thread.sleep(1000); } - Thread.sleep(1000); + } catch (KeeperException e) { + throw new RuntimeException("Unable to read TServer information from zookeeper.", e); } try { @@ -695,7 +672,6 @@ public class MiniAccumuloClusterImpl implements AccumuloCluster { } catch (KeeperException e) { throw new RuntimeException("Unable to read GC information from zookeeper.", e); } - } private List<String> buildRemoteDebugParams(int port) {