This is an automated email from the ASF dual-hosted git repository.
ddanielr 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 756e17c5f3 Adds support for starting multiple managers per host (#6228)
756e17c5f3 is described below
commit 756e17c5f31e703cb29726071f6cb895a8e950d5
Author: Daniel Roberts <[email protected]>
AuthorDate: Fri Mar 20 21:17:20 2026 -0400
Adds support for starting multiple managers per host (#6228)
* Adds support for multiple managers per host
Updates the cluster.yaml format to support running multiple managers on
the same host.
Updates the --manager flags to --managers
Also updates -manager to -managers in ZooZap
Moves stream into try-with-resources loop
---
assemble/bin/accumulo-cluster | 19 +++++-----
.../core/conf/cluster/ClusterConfigParser.java | 34 +++++++++++++-----
.../core/conf/cluster/ClusterConfigParserTest.java | 42 ++++++++++++++++++++--
.../accumulo/core/conf/cluster/bad-group-name.yaml | 4 ++-
.../core/conf/cluster/bad-group-suffix.yaml | 4 ++-
...ad-group-name.yaml => bad-manager-section.yaml} | 9 +++--
.../core/conf/cluster/bad-server-name.yaml | 6 ++--
.../cluster/cluster-missing-compactor-group.yaml | 6 ++--
.../cluster/cluster-missing-tserver-group.yaml | 6 ++--
.../apache/accumulo/core/conf/cluster/cluster.yaml | 6 ++--
...up-suffix.yaml => missing-manager-section.yaml} | 7 ++--
.../core/conf/cluster/too-many-levels.yaml | 4 ++-
.../MiniAccumuloClusterControl.java | 2 +-
.../miniclusterImpl/MiniAccumuloClusterImpl.java | 2 +-
.../apache/accumulo/server/util/UpgradeUtil.java | 2 +-
.../org/apache/accumulo/server/util/ZooZap.java | 8 ++---
.../org/apache/accumulo/test/cluster.yaml | 6 ++--
17 files changed, 117 insertions(+), 50 deletions(-)
diff --git a/assemble/bin/accumulo-cluster b/assemble/bin/accumulo-cluster
index 8612613c92..c7e3c8e775 100755
--- a/assemble/bin/accumulo-cluster
+++ b/assemble/bin/accumulo-cluster
@@ -36,7 +36,7 @@ $(cyan Options):
$(green --local) Operates on matching local services only
(no SSH)
$(cyan 'Service type selection options (if none are used, all service types
are selected)'):
- $(green --manager) Selects the manager service (oversees
cluster operations)
+ $(green --managers) Selects the manager services (oversees
cluster operations)
$(green --gc) Selects the gc service (cleans up unused
files)
$(green --monitor) Selects the monitor web service (shows
cluster information)
$(green --tservers)[$(yellow '=group')] Selects the tablet server
services (read/write operations on tablets)
@@ -58,11 +58,11 @@ $(cyan Examples):
$(purple 'accumulo-cluster start')
$(blue '# start all servers')
$(purple 'accumulo-cluster start --dry-run')
$(blue '# print debug information and commands to be executed')
$(purple 'accumulo-cluster start --local')
$(blue '# start all local services')
- $(purple 'accumulo-cluster start --local --manager')
$(blue '# start local manager services')
+ $(purple 'accumulo-cluster start --local --managers')
$(blue '# start local manager services')
$(purple 'accumulo-cluster start --tservers')
$(blue '# start all tservers')
$(purple 'accumulo-cluster start --sservers=group1')
$(blue '# start all group1 sservers')
$(purple 'accumulo-cluster start --sservers="group1 group2"')
$(blue '# start all group1 and group2 sservers')
- $(purple 'accumulo-cluster start --local --manager --tservers')
$(blue '# Start the local manager and local tservers')
+ $(purple 'accumulo-cluster start --local --managers --tservers')
$(blue '# Start the local managers and local tservers')
$(purple 'accumulo-cluster prune --compactors')
$(blue '# prune all extra compactors across all groups')
$(purple 'accumulo-cluster prune --compactors="group1"')
$(blue '# prune extra compactors running in group1')
@@ -144,7 +144,7 @@ function parse_args() {
ARG_LOCAL=1
shift 1
;;
- --manager)
+ --managers)
ARG_ALL=0
ARG_MANAGER=1
shift 1
@@ -614,7 +614,7 @@ function control_services() {
if [[ $ARG_LOCAL == 0 && $ARG_ALL == 1 && ($operation == "stop" ||
$operation == "kill") ]]; then
debug "Cleaning all server entries in ZooKeeper"
- debugOrRunAsync "$accumulo_cmd" proc zoo-zap -verbose -manager -tservers
-compactors -sservers --gc --monitor
+ debugOrRunAsync "$accumulo_cmd" proc zoo-zap -verbose -managers -tservers
-compactors -sservers --gc --monitor
fi
wait
@@ -647,7 +647,7 @@ function prune_group() {
local lockTypeOpt
case $service_type in
manager)
- lockTypeOpt="-manager"
+ lockTypeOpt="-managers"
;;
compaction-coordinator)
lockTypeOpt="-compaction-coordinators"
@@ -728,7 +728,8 @@ function prune() {
local manager
if [[ $ARG_ALL == 1 || $ARG_MANAGER == 1 ]]; then
- prune_group "manager" "default" "1" "$MANAGER_HOSTS"
+ local expected=${MANAGERS_PER_HOST_default:-1}
+ prune_group "manager" "default" "$expected" "$MANAGER_HOSTS"
fi
if [[ $ARG_ALL == 1 || $ARG_GC == 1 ]]; then
@@ -826,7 +827,9 @@ function main() {
fi
cat <<EOF >"$conf"/cluster.yaml
manager:
- - localhost
+ servers_per_host: 1
+ hosts:
+ - localhost
monitor:
- localhost
diff --git
a/core/src/main/java/org/apache/accumulo/core/conf/cluster/ClusterConfigParser.java
b/core/src/main/java/org/apache/accumulo/core/conf/cluster/ClusterConfigParser.java
index 0adc56da29..0fa1c7cfc0 100644
---
a/core/src/main/java/org/apache/accumulo/core/conf/cluster/ClusterConfigParser.java
+++
b/core/src/main/java/org/apache/accumulo/core/conf/cluster/ClusterConfigParser.java
@@ -18,6 +18,8 @@
*/
package org.apache.accumulo.core.conf.cluster;
+import static org.apache.accumulo.core.Constants.DEFAULT_RESOURCE_GROUP_NAME;
+
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -47,7 +49,7 @@ public class ClusterConfigParser {
private static final String PROPERTY_FORMAT = "%s=\"%s\"%n";
private static final String COMPACTOR_PREFIX = "compactor.";
private static final String GC_KEY = "gc";
- private static final String MANAGER_KEY = "manager";
+ private static final String MANAGER_PREFIX = "manager";
private static final String MONITOR_KEY = "monitor";
private static final String SSERVER_PREFIX = "sserver.";
private static final String TSERVER_PREFIX = "tserver.";
@@ -55,13 +57,12 @@ public class ClusterConfigParser {
private static final String HOSTS_SUFFIX = ".hosts";
private static final String SERVERS_PER_HOST_SUFFIX = ".servers_per_host";
- private static final String[] UNGROUPED_SECTIONS =
- new String[] {MANAGER_KEY, MONITOR_KEY, GC_KEY};
+ private static final String[] UNGROUPED_SECTIONS = new String[]
{MONITOR_KEY, GC_KEY};
- private static final Set<String> VALID_CONFIG_KEYS = Set.of(MANAGER_KEY,
MONITOR_KEY, GC_KEY);
+ private static final Set<String> VALID_CONFIG_KEYS = Set.of(MONITOR_KEY,
GC_KEY);
private static final Set<String> VALID_CONFIG_PREFIXES =
- Set.of(COMPACTOR_PREFIX, SSERVER_PREFIX, TSERVER_PREFIX);
+ Set.of(MANAGER_PREFIX, COMPACTOR_PREFIX, SSERVER_PREFIX, TSERVER_PREFIX);
private static final Predicate<String> VALID_CONFIG_SECTIONS =
section -> VALID_CONFIG_KEYS.contains(section)
@@ -143,11 +144,26 @@ public class ClusterConfigParser {
for (String section : UNGROUPED_SECTIONS) {
if (config.containsKey(section)) {
out.printf(PROPERTY_FORMAT, section.toUpperCase() + "_HOSTS",
config.get(section));
+ }
+ }
+
+ // Manager doesn't use resource groups so it's handled separately
+ var managerSection = config.keySet().stream().filter(k ->
k.startsWith(MANAGER_PREFIX))
+ .collect(Collectors.toSet());
+ if (managerSection.isEmpty()) {
+ throw new IllegalStateException("Manager is required in the
configuration");
+ }
+
+ for (String k : managerSection) {
+ if (k.equals(MANAGER_PREFIX + HOSTS_SUFFIX)) {
+ out.printf(PROPERTY_FORMAT, "MANAGER_HOSTS", config.get(k));
+ } else if (k.equals(MANAGER_PREFIX + SERVERS_PER_HOST_SUFFIX)) {
+ out.printf(PROPERTY_FORMAT, "MANAGERS_PER_HOST_" +
DEFAULT_RESOURCE_GROUP_NAME,
+ config.getOrDefault(k, "1"));
} else {
- if (section.equals(MANAGER_KEY)) {
- throw new IllegalStateException("Manager is required in the
configuration");
- }
- System.err.println("WARN: " + section + " is missing");
+ throw new IllegalArgumentException("Unknown manager entry for: " + k +
". Only "
+ + MANAGER_PREFIX + HOSTS_SUFFIX + " or " + MANAGER_PREFIX +
SERVERS_PER_HOST_SUFFIX
+ + " are allowed. Check the format of your cluster.yaml file.");
}
}
diff --git
a/core/src/test/java/org/apache/accumulo/core/conf/cluster/ClusterConfigParserTest.java
b/core/src/test/java/org/apache/accumulo/core/conf/cluster/ClusterConfigParserTest.java
index 6c45f5d8cd..fac6a50a3a 100644
---
a/core/src/test/java/org/apache/accumulo/core/conf/cluster/ClusterConfigParserTest.java
+++
b/core/src/test/java/org/apache/accumulo/core/conf/cluster/ClusterConfigParserTest.java
@@ -58,9 +58,11 @@ public class ClusterConfigParserTest extends WithTestNames {
Map<String,String> contents =
ClusterConfigParser.parseConfiguration(Path.of(configFile.toURI()));
- assertEquals(14, contents.size());
- assertTrue(contents.containsKey("manager"));
- assertEquals("localhost1 localhost2", contents.get("manager"));
+ assertEquals(15, contents.size());
+ assertTrue(contents.containsKey("manager.hosts"));
+ assertEquals("localhost1 localhost2", contents.get("manager.hosts"));
+ assertTrue(contents.containsKey("manager.servers_per_host"));
+ assertEquals("2", contents.get("manager.servers_per_host"));
assertTrue(contents.containsKey("monitor"));
assertEquals("localhost1 localhost2", contents.get("monitor"));
assertTrue(contents.containsKey("gc"));
@@ -156,6 +158,7 @@ public class ClusterConfigParserTest extends WithTestNames {
final Path f = outputConfigFunction.apply(configFile);
Map<String,String> expected = new TreeMap<>();
+ expected.put("MANAGERS_PER_HOST_default", "2");
expected.put("MANAGER_HOSTS", "localhost1 localhost2");
expected.put("MONITOR_HOSTS", "localhost1 localhost2");
expected.put("GC_HOSTS", "localhost");
@@ -303,4 +306,37 @@ public class ClusterConfigParserTest extends WithTestNames
{
}
}
+ @Test
+ public void testFileMissingManagerSection() throws Exception {
+ URL configFile = ClusterConfigParserTest.class
+
.getResource("/org/apache/accumulo/core/conf/cluster/missing-manager-section.yaml");
+ assertNotNull(configFile);
+
+ Map<String,String> contents =
+ ClusterConfigParser.parseConfiguration(Path.of(configFile.toURI()));
+
+ try (var baos = new ByteArrayOutputStream(); var ps = new
PrintStream(baos)) {
+ var exception = assertThrows(IllegalStateException.class,
+ () -> ClusterConfigParser.outputShellVariables(contents, ps));
+ assertTrue(exception.getMessage().contains("Manager is required in the
configuration"));
+ }
+ }
+
+ @Test
+ public void testFileBadManagerSection() throws Exception {
+ URL configFile = ClusterConfigParserTest.class
+
.getResource("/org/apache/accumulo/core/conf/cluster/bad-manager-section.yaml");
+ assertNotNull(configFile);
+
+ Map<String,String> contents =
+ ClusterConfigParser.parseConfiguration(Path.of(configFile.toURI()));
+
+ try (var baos = new ByteArrayOutputStream(); var ps = new
PrintStream(baos)) {
+ var exception = assertThrows(IllegalArgumentException.class,
+ () -> ClusterConfigParser.outputShellVariables(contents, ps));
+ assertTrue(
+ exception.getMessage().contains("Unknown manager entry for:
manager.extra_broken"));
+ }
+ }
+
}
diff --git
a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-group-name.yaml
b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-group-name.yaml
index 3fb979d040..2ced2b50b1 100644
---
a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-group-name.yaml
+++
b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-group-name.yaml
@@ -18,7 +18,9 @@
#
manager:
- - localhost
+ servers_per_host: 1
+ hosts:
+ - localhost
monitor:
- localhost
diff --git
a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-group-suffix.yaml
b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-group-suffix.yaml
index 20bd98d65f..5464c93f1a 100644
---
a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-group-suffix.yaml
+++
b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-group-suffix.yaml
@@ -18,7 +18,9 @@
#
manager:
- - localhost
+ servers_per_host: 1
+ hosts:
+ - localhost
monitor:
- localhost
diff --git
a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-group-name.yaml
b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-manager-section.yaml
similarity index 92%
copy from
core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-group-name.yaml
copy to
core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-manager-section.yaml
index 3fb979d040..8b3545fdee 100644
---
a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-group-name.yaml
+++
b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-manager-section.yaml
@@ -18,7 +18,10 @@
#
manager:
- - localhost
+ servers_per_host: 1
+ extra_broken: 2
+ hosts:
+ - localhost
monitor:
- localhost
@@ -37,10 +40,6 @@ sserver:
servers_per_host: 1
hosts:
- localhost
- bad-group-name:
- servers_per_host: 1
- hosts:
- - localhost
tserver:
default:
diff --git
a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-server-name.yaml
b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-server-name.yaml
index c805df7393..f55a8f372c 100644
---
a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-server-name.yaml
+++
b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-server-name.yaml
@@ -18,8 +18,10 @@
#
manager:
- - localhost1
- - localhost2
+ servers_per_host: 1
+ hosts:
+ - localhost1
+ - localhost2
monitor:
- localhost1
diff --git
a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/cluster-missing-compactor-group.yaml
b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/cluster-missing-compactor-group.yaml
index a64c6a517c..55e8ed471e 100644
---
a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/cluster-missing-compactor-group.yaml
+++
b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/cluster-missing-compactor-group.yaml
@@ -18,8 +18,10 @@
#
manager:
- - localhost1
- - localhost2
+ servers_per_host: 2
+ hosts:
+ - localhost1
+ - localhost2
monitor:
- localhost1
diff --git
a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/cluster-missing-tserver-group.yaml
b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/cluster-missing-tserver-group.yaml
index 12e5bce913..74c0d72c18 100644
---
a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/cluster-missing-tserver-group.yaml
+++
b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/cluster-missing-tserver-group.yaml
@@ -18,8 +18,10 @@
#
manager:
- - localhost1
- - localhost2
+ servers_per_host: 2
+ hosts:
+ - localhost1
+ - localhost2
monitor:
- localhost1
diff --git
a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/cluster.yaml
b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/cluster.yaml
index 21eafe7627..d452a26163 100644
--- a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/cluster.yaml
+++ b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/cluster.yaml
@@ -18,8 +18,10 @@
#
manager:
- - localhost1
- - localhost2
+ servers_per_host: 2
+ hosts:
+ - localhost1
+ - localhost2
monitor:
- localhost1
diff --git
a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-group-suffix.yaml
b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/missing-manager-section.yaml
similarity index 93%
copy from
core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-group-suffix.yaml
copy to
core/src/test/resources/org/apache/accumulo/core/conf/cluster/missing-manager-section.yaml
index 20bd98d65f..e57e47c729 100644
---
a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/bad-group-suffix.yaml
+++
b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/missing-manager-section.yaml
@@ -17,9 +17,6 @@
# under the License.
#
-manager:
- - localhost
-
monitor:
- localhost
@@ -34,7 +31,7 @@ compactor:
sserver:
default:
- servers_per_hosts: 1
+ servers_per_host: 1
hosts:
- localhost
@@ -42,4 +39,4 @@ tserver:
default:
servers_per_host: 1
hosts:
- - localhost
+ - localhost
\ No newline at end of file
diff --git
a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/too-many-levels.yaml
b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/too-many-levels.yaml
index 30270e1011..a655a2e4c8 100644
---
a/core/src/test/resources/org/apache/accumulo/core/conf/cluster/too-many-levels.yaml
+++
b/core/src/test/resources/org/apache/accumulo/core/conf/cluster/too-many-levels.yaml
@@ -18,7 +18,9 @@
#
manager:
- - localhost
+ servers_per_host: 2
+ hosts:
+ - localhost1
monitor:
- localhost
diff --git
a/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloClusterControl.java
b/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloClusterControl.java
index b075dba7ae..f45c4fcb87 100644
---
a/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloClusterControl.java
+++
b/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloClusterControl.java
@@ -317,7 +317,7 @@ public class MiniAccumuloClusterControl implements
ClusterControl {
cluster.stopProcessesWithTimeout(ServerType.MANAGER,
managerProcesses, 30,
TimeUnit.SECONDS);
try {
- new ZooZap().execute(new String[] {"-manager"});
+ new ZooZap().execute(new String[] {"-managers"});
} catch (Exception e) {
log.error("Error zapping Manager zookeeper lock", e);
}
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 3d9103985e..77f7571fba 100644
---
a/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloClusterImpl.java
+++
b/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloClusterImpl.java
@@ -1031,7 +1031,7 @@ public class MiniAccumuloClusterImpl implements
AccumuloCluster {
// and not wait for the old locks to be cleaned up.
try {
new ZooZap()
- .execute(new String[] {"-manager", "-tservers", "-compactors",
"-sservers", "--gc"});
+ .execute(new String[] {"-managers", "-tservers", "-compactors",
"-sservers", "--gc"});
} catch (Exception e) {
if (!e.getMessage().startsWith("Accumulo not initialized")) {
log.error("Error zapping zookeeper locks", e);
diff --git
a/server/base/src/main/java/org/apache/accumulo/server/util/UpgradeUtil.java
b/server/base/src/main/java/org/apache/accumulo/server/util/UpgradeUtil.java
index 6154a42409..515a5fa7cb 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/util/UpgradeUtil.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/util/UpgradeUtil.java
@@ -202,7 +202,7 @@ public class UpgradeUtil implements KeywordExecutable {
try {
LOG.info("Forcing removal of all server locks");
new ZooZap().execute(
- new String[] {"-manager", "-tservers", "-compactors", "-sservers",
"--monitor", "--gc"});
+ new String[] {"-managers", "-tservers", "-compactors", "-sservers",
"--monitor", "--gc"});
} catch (Exception e) {
throw new IllegalStateException("Error deleting server locks", e);
}
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 b6e36ae692..fb0ad2210d 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
@@ -79,7 +79,7 @@ public class ZooZap extends ServerKeywordExecutable<ZapOpts> {
}
static class ZapOpts extends ServerOpts {
- @Parameter(names = "-manager", description = "remove manager locks")
+ @Parameter(names = "-managers", description = "remove manager locks")
boolean zapManager = false;
@Parameter(names = "-tservers", description = "remove tablet server locks")
boolean zapTservers = false;
@@ -109,9 +109,9 @@ public class ZooZap extends
ServerKeywordExecutable<ZapOpts> {
final AddressSelector addressSelector;
if (opts.hostPortExcludeFile != null) {
- try {
- var hostPorts =
Files.lines(java.nio.file.Path.of(opts.hostPortExcludeFile))
-
.map(String::trim).map(HostAndPort::fromString).collect(Collectors.toSet());
+ try (var exclusions =
Files.lines(java.nio.file.Path.of(opts.hostPortExcludeFile))) {
+ var hostPorts =
+
exclusions.map(String::trim).map(HostAndPort::fromString).collect(Collectors.toSet());
addressSelector =
AddressSelector.matching(hp ->
!hostPorts.contains(HostAndPort.fromString(hp)));
} catch (IOException e) {
diff --git a/test/src/main/resources/org/apache/accumulo/test/cluster.yaml
b/test/src/main/resources/org/apache/accumulo/test/cluster.yaml
index 21eafe7627..cb36cf484d 100644
--- a/test/src/main/resources/org/apache/accumulo/test/cluster.yaml
+++ b/test/src/main/resources/org/apache/accumulo/test/cluster.yaml
@@ -18,8 +18,10 @@
#
manager:
- - localhost1
- - localhost2
+ servers_per_host: 1
+ hosts:
+ - localhost1
+ - localhost2
monitor:
- localhost1