This is an automated email from the ASF dual-hosted git repository. ddanielr pushed a commit to branch 3.1 in repository https://gitbox.apache.org/repos/asf/accumulo.git
commit 359c745c1611c3b083bd8c40625de99767bffaf8 Merge: 4182fa84c0 65b3fe8276 Author: Daniel Roberts ddanielr <ddani...@gmail.com> AuthorDate: Tue Mar 11 21:44:08 2025 +0000 Merge branch '2.1' into 3.1 .../core/manager/balancer/BalanceParamsImpl.java | 19 +- .../accumulo/core/spi/balancer/GroupBalancer.java | 10 +- .../spi/balancer/HostRegexTableLoadBalancer.java | 11 +- .../core/spi/balancer/TableLoadBalancer.java | 4 +- .../accumulo/core/spi/balancer/TabletBalancer.java | 10 +- .../core/spi/balancer/GroupBalancerTest.java | 6 +- ...tRegexTableLoadBalancerReconfigurationTest.java | 6 +- .../balancer/HostRegexTableLoadBalancerTest.java | 16 +- .../core/spi/balancer/SimpleLoadBalancerTest.java | 4 +- .../core/spi/balancer/TableLoadBalancerTest.java | 4 +- .../server/manager/state/CurrentState.java | 3 +- .../server/manager/state/MetaDataStateStore.java | 15 +- .../server/manager/state/MetaDataTableScanner.java | 15 +- .../server/manager/state/RootTabletStateStore.java | 43 ---- .../server/manager/state/TabletStateStore.java | 7 +- .../accumulo/server/util/FindOfflineTablets.java | 15 +- .../java/org/apache/accumulo/manager/Manager.java | 64 ++---- .../manager/ManagerClientServiceHandler.java | 2 +- .../org/apache/accumulo/manager/Migrations.java | 138 +++++++++++++ .../accumulo/manager/TabletGroupWatcher.java | 8 +- .../apache/accumulo/manager/state/MergeStats.java | 3 +- .../accumulo/manager/tableOps/delete/CleanUp.java | 3 +- .../apache/accumulo/manager/MigrationsTest.java | 229 +++++++++++++++++++++ .../monitor/rest/tables/TablesResource.java | 5 +- .../test/functional/AssignLocationModeIT.java | 9 +- .../test/functional/CompactLocationModeIT.java | 10 +- .../test/functional/ManagerAssignmentIT.java | 9 +- .../functional/TabletStateChangeIteratorIT.java | 9 +- .../apache/accumulo/test/manager/MergeStateIT.java | 2 +- .../accumulo/test/manager/SuspendedTabletsIT.java | 24 +-- .../accumulo/test/performance/NullTserver.java | 4 +- .../accumulo/test/ChaoticLoadBalancerTest.java | 2 +- 32 files changed, 491 insertions(+), 218 deletions(-) diff --cc core/src/main/java/org/apache/accumulo/core/manager/balancer/BalanceParamsImpl.java index 1cdba42cf1,5e1899c73a..3f1c17653c --- a/core/src/main/java/org/apache/accumulo/core/manager/balancer/BalanceParamsImpl.java +++ b/core/src/main/java/org/apache/accumulo/core/manager/balancer/BalanceParamsImpl.java @@@ -29,9 -29,8 +29,8 @@@ import org.apache.accumulo.core.data.Ta import org.apache.accumulo.core.data.TabletId; import org.apache.accumulo.core.dataImpl.KeyExtent; import org.apache.accumulo.core.dataImpl.TabletIdImpl; -import org.apache.accumulo.core.master.thrift.TabletServerStatus; +import org.apache.accumulo.core.manager.thrift.TabletServerStatus; import org.apache.accumulo.core.metadata.TServerInstance; - import org.apache.accumulo.core.metadata.schema.Ample.DataLevel; import org.apache.accumulo.core.spi.balancer.TabletBalancer; import org.apache.accumulo.core.spi.balancer.data.TServerStatus; import org.apache.accumulo.core.spi.balancer.data.TabletMigration; diff --cc server/base/src/main/java/org/apache/accumulo/server/manager/state/MetaDataTableScanner.java index b340c19679,ad2745aec0..3af41626b5 --- a/server/base/src/main/java/org/apache/accumulo/server/manager/state/MetaDataTableScanner.java +++ b/server/base/src/main/java/org/apache/accumulo/server/manager/state/MetaDataTableScanner.java @@@ -44,6 -45,8 +44,7 @@@ import org.apache.accumulo.core.metadat import org.apache.accumulo.core.metadata.TServerInstance; import org.apache.accumulo.core.metadata.TabletLocationState; import org.apache.accumulo.core.metadata.TabletLocationState.BadLocationStateException; + import org.apache.accumulo.core.metadata.schema.Ample.DataLevel; -import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ChoppedColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.CurrentLocationColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.FutureLocationColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.LastLocationColumnFamily; diff --cc server/base/src/main/java/org/apache/accumulo/server/util/FindOfflineTablets.java index 0cfa61bf0d,685d5b6af9..90388ed06c --- a/server/base/src/main/java/org/apache/accumulo/server/util/FindOfflineTablets.java +++ b/server/base/src/main/java/org/apache/accumulo/server/util/FindOfflineTablets.java @@@ -88,31 -84,27 +87,31 @@@ public class FindOfflineTablets int offline = 0; - System.out.println("Scanning zookeeper"); - if ((offline = checkTablets(context, zooScanner, tservers)) > 0) { - return offline; + if (!skipZkScan) { + printInfoMethod.accept("Scanning zookeeper"); + if ((offline = checkTablets(context, zooScanner, tservers, printProblemMethod)) > 0) { + return offline; + } } - if (AccumuloTable.ROOT.tableName().equals(tableName)) { + if (DataLevel.METADATA.metaTable().equals(tableName)) { return 0; } - System.out.println("Scanning " + DataLevel.METADATA.metaTable()); - Iterator<TabletLocationState> rootScanner = - new MetaDataTableScanner(context, TabletsSection.getRange(), DataLevel.METADATA); - if ((offline = checkTablets(context, rootScanner, tservers)) > 0) { - return offline; + if (!skipRootScan) { - printInfoMethod.accept("Scanning " + AccumuloTable.ROOT.tableName()); - Iterator<TabletLocationState> rootScanner = new MetaDataTableScanner(context, - TabletsSection.getRange(), AccumuloTable.ROOT.tableName()); ++ printInfoMethod.accept("Scanning " + DataLevel.METADATA.metaTable()); ++ Iterator<TabletLocationState> rootScanner = ++ new MetaDataTableScanner(context, TabletsSection.getRange(), DataLevel.METADATA); + if ((offline = checkTablets(context, rootScanner, tservers, printProblemMethod)) > 0) { + return offline; + } } - if (AccumuloTable.METADATA.tableName().equals(tableName)) { + if (DataLevel.USER.metaTable().equals(tableName)) { return 0; } - printInfoMethod.accept("Scanning " + AccumuloTable.METADATA.tableName()); - System.out.println("Scanning " + DataLevel.USER.metaTable()); ++ printInfoMethod.accept("Scanning " + DataLevel.USER.metaTable()); Range range = TabletsSection.getRange(); if (tableName != null) { @@@ -121,8 -113,8 +120,8 @@@ } try (MetaDataTableScanner metaScanner = - new MetaDataTableScanner(context, range, AccumuloTable.METADATA.tableName())) { + new MetaDataTableScanner(context, range, DataLevel.USER)) { - return checkTablets(context, metaScanner, tservers); + return checkTablets(context, metaScanner, tservers, printProblemMethod); } } diff --cc server/manager/src/main/java/org/apache/accumulo/manager/Manager.java index b55d332ed4,616dc7dac4..a5466a2531 --- a/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java @@@ -190,10 -186,11 +189,9 @@@ public class Manager extends AbstractSe final Map<TServerInstance,AtomicInteger> badServers = Collections.synchronizedMap(new HashMap<>()); final Set<TServerInstance> serversToShutdown = Collections.synchronizedSet(new HashSet<>()); - final SortedMap<KeyExtent,TServerInstance> migrations = - Collections.synchronizedSortedMap(new TreeMap<>()); + final Migrations migrations = new Migrations(); final EventCoordinator nextEvent = new EventCoordinator(); private final Object mergeLock = new Object(); - private Thread replicationWorkThread; - private Thread replicationAssignerThread; RecoveryManager recoveryManager = null; private final ManagerTime timeKeeper; diff --cc server/manager/src/main/java/org/apache/accumulo/manager/state/MergeStats.java index 1f989ae781,c6ef3e7c46..d30a96f1db --- 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 @@@ -147,10 -210,9 +148,10 @@@ public class MergeStats MergeStats verify = new MergeStats(info); KeyExtent extent = info.getExtent(); - Scanner scanner = accumuloClient - .createScanner(extent.isMeta() ? RootTable.NAME : MetadataTable.NAME, Authorizations.EMPTY); + Scanner scanner = accumuloClient.createScanner( + extent.isMeta() ? AccumuloTable.ROOT.tableName() : AccumuloTable.METADATA.tableName(), + Authorizations.EMPTY); - MetaDataTableScanner.configureScanner(scanner, manager); + MetaDataTableScanner.configureScanner(scanner, manager, DataLevel.of(extent.tableId())); Text start = extent.prevEndRow(); if (start == null) { start = new Text(); diff --cc server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/CleanUp.java index c45fa1e54e,71dea7b703..8d2d77c5c8 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/CleanUp.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/CleanUp.java @@@ -35,11 -35,11 +35,12 @@@ import org.apache.accumulo.core.data.Ta import org.apache.accumulo.core.data.Value; import org.apache.accumulo.core.dataImpl.KeyExtent; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.iterators.user.GrepIterator; -import org.apache.accumulo.core.metadata.MetadataTable; +import org.apache.accumulo.core.metadata.AccumuloTable; import org.apache.accumulo.core.metadata.TabletLocationState; import org.apache.accumulo.core.metadata.TabletState; + import org.apache.accumulo.core.metadata.schema.Ample.DataLevel; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.DataFileColumnFamily; import org.apache.accumulo.core.security.Authorizations; @@@ -90,9 -91,8 +91,9 @@@ class CleanUp extends ManagerRepo boolean done = true; Range tableRange = new KeyExtent(tableId, null, null).toMetaRange(); - Scanner scanner = manager.getContext().createScanner(MetadataTable.NAME, Authorizations.EMPTY); + Scanner scanner = manager.getContext().createScanner(AccumuloTable.METADATA.tableName(), + Authorizations.EMPTY); - MetaDataTableScanner.configureScanner(scanner, manager); + MetaDataTableScanner.configureScanner(scanner, manager, DataLevel.of(tableId)); scanner.setRange(tableRange); for (Entry<Key,Value> entry : scanner) { diff --cc server/manager/src/test/java/org/apache/accumulo/manager/MigrationsTest.java index 0000000000,bb55d03f87..c1e26614a4 mode 000000,100644..100644 --- a/server/manager/src/test/java/org/apache/accumulo/manager/MigrationsTest.java +++ b/server/manager/src/test/java/org/apache/accumulo/manager/MigrationsTest.java @@@ -1,0 -1,228 +1,229 @@@ + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + package org.apache.accumulo.manager; + + import static org.junit.jupiter.api.Assertions.assertEquals; + import static org.junit.jupiter.api.Assertions.assertFalse; + import static org.junit.jupiter.api.Assertions.assertNull; + import static org.junit.jupiter.api.Assertions.assertTrue; + + import java.util.Map; + import java.util.Set; + + import org.apache.accumulo.core.data.TableId; + import org.apache.accumulo.core.dataImpl.KeyExtent; -import org.apache.accumulo.core.metadata.MetadataTable; ++import org.apache.accumulo.core.metadata.AccumuloTable; + import org.apache.accumulo.core.metadata.RootTable; + import org.apache.accumulo.core.metadata.TServerInstance; + import org.apache.accumulo.core.metadata.schema.Ample.DataLevel; -import org.apache.accumulo.core.util.HostAndPort; + import org.junit.jupiter.api.BeforeEach; + import org.junit.jupiter.api.Test; + ++import com.google.common.net.HostAndPort; ++ + public class MigrationsTest { + + private final TServerInstance TS1 = + new TServerInstance(HostAndPort.fromParts("server1", 9997), "s001"); + private final TServerInstance TS2 = + new TServerInstance(HostAndPort.fromParts("server2", 1234), "s002"); + private final TServerInstance TS3 = + new TServerInstance(HostAndPort.fromParts("server3", 6789), "s002"); + + private final TableId TID1 = TableId.of("1"); + private final TableId TID2 = TableId.of("2"); + private final TableId TID3 = TableId.of("3"); + - private final KeyExtent ME = new KeyExtent(MetadataTable.ID, null, null); ++ private final KeyExtent ME = new KeyExtent(AccumuloTable.METADATA.tableId(), null, null); + + private final KeyExtent KE1 = new KeyExtent(TID1, null, null); + private final KeyExtent KE2 = new KeyExtent(TID2, null, null); + private final KeyExtent KE3 = new KeyExtent(TID3, null, null); + + Migrations migrations; + + @BeforeEach + public void setup() { + migrations = new Migrations(); + migrations.put(RootTable.EXTENT, TS2); + migrations.put(ME, TS1); + migrations.put(KE1, TS2); + migrations.put(KE2, TS1); + } + + @Test + public void testInitial() { + assertEquals(4, migrations.size()); + assertEquals(Set.of(RootTable.EXTENT, ME, KE1, KE2), migrations.snapshotAll()); + assertEquals(Set.of(RootTable.EXTENT), migrations.snapshot(DataLevel.ROOT)); + assertEquals(Set.of(ME), migrations.snapshot(DataLevel.METADATA)); + assertEquals(Set.of(KE1, KE2), migrations.snapshot(DataLevel.USER)); + assertTrue(migrations.contains(RootTable.EXTENT)); + assertTrue(migrations.contains(ME)); + assertTrue(migrations.contains(KE1)); + assertTrue(migrations.contains(KE2)); + assertFalse(migrations.contains(KE3)); + assertEquals(TS2, migrations.get(RootTable.EXTENT)); + assertEquals(TS1, migrations.get(ME)); + assertEquals(TS2, migrations.get(KE1)); + assertEquals(TS1, migrations.get(KE2)); + assertNull(migrations.get(KE3)); + assertFalse(migrations.isEmpty()); + assertFalse(migrations.isEmpty(DataLevel.ROOT)); + assertFalse(migrations.isEmpty(DataLevel.METADATA)); + assertFalse(migrations.isEmpty(DataLevel.USER)); + assertEquals(Map.of(DataLevel.ROOT, Set.of(RootTable.EXTENT), DataLevel.METADATA, Set.of(ME), + DataLevel.USER, Set.of(KE1, KE2)), migrations.mutableCopy()); + } + + @Test + public void testRemoveServer() { + migrations.removeServers(Set.of(TS1)); + + assertEquals(2, migrations.size()); + assertEquals(Set.of(RootTable.EXTENT, KE1), migrations.snapshotAll()); + assertEquals(Set.of(RootTable.EXTENT), migrations.snapshot(DataLevel.ROOT)); + assertEquals(Set.of(), migrations.snapshot(DataLevel.METADATA)); + assertEquals(Set.of(KE1), migrations.snapshot(DataLevel.USER)); + assertTrue(migrations.contains(RootTable.EXTENT)); + assertFalse(migrations.contains(ME)); + assertTrue(migrations.contains(KE1)); + assertFalse(migrations.contains(KE3)); + assertEquals(TS2, migrations.get(RootTable.EXTENT)); + assertNull(migrations.get(ME)); + assertEquals(TS2, migrations.get(KE1)); + assertNull(migrations.get(KE2)); + assertNull(migrations.get(KE3)); + assertFalse(migrations.isEmpty()); + assertFalse(migrations.isEmpty(DataLevel.ROOT)); + assertTrue(migrations.isEmpty(DataLevel.METADATA)); + assertFalse(migrations.isEmpty(DataLevel.USER)); + assertEquals(Map.of(DataLevel.ROOT, Set.of(RootTable.EXTENT), DataLevel.METADATA, Set.of(), + DataLevel.USER, Set.of(KE1)), migrations.mutableCopy()); + } + + @Test + public void testRemoveExtent() { + migrations.removeExtent(KE1); + + assertEquals(3, migrations.size()); + assertEquals(Set.of(RootTable.EXTENT, ME, KE2), migrations.snapshotAll()); + assertEquals(Set.of(RootTable.EXTENT), migrations.snapshot(DataLevel.ROOT)); + assertEquals(Set.of(ME), migrations.snapshot(DataLevel.METADATA)); + assertEquals(Set.of(KE2), migrations.snapshot(DataLevel.USER)); + assertTrue(migrations.contains(RootTable.EXTENT)); + assertTrue(migrations.contains(ME)); + assertFalse(migrations.contains(KE1)); + assertTrue(migrations.contains(KE2)); + assertFalse(migrations.contains(KE3)); + assertEquals(TS2, migrations.get(RootTable.EXTENT)); + assertEquals(TS1, migrations.get(ME)); + assertNull(migrations.get(KE1)); + assertEquals(TS1, migrations.get(KE2)); + assertNull(migrations.get(KE3)); + assertFalse(migrations.isEmpty()); + assertFalse(migrations.isEmpty(DataLevel.ROOT)); + assertFalse(migrations.isEmpty(DataLevel.METADATA)); + assertFalse(migrations.isEmpty(DataLevel.USER)); + assertEquals(Map.of(DataLevel.ROOT, Set.of(RootTable.EXTENT), DataLevel.METADATA, Set.of(ME), + DataLevel.USER, Set.of(KE2)), migrations.mutableCopy()); + } + + @Test + public void testRemoveExtents() { + migrations.removeExtents(Set.of(KE1, RootTable.EXTENT)); + + assertEquals(2, migrations.size()); + assertEquals(Set.of(ME, KE2), migrations.snapshotAll()); + assertEquals(Set.of(), migrations.snapshot(DataLevel.ROOT)); + assertEquals(Set.of(ME), migrations.snapshot(DataLevel.METADATA)); + assertEquals(Set.of(KE2), migrations.snapshot(DataLevel.USER)); + assertFalse(migrations.contains(RootTable.EXTENT)); + assertTrue(migrations.contains(ME)); + assertFalse(migrations.contains(KE1)); + assertTrue(migrations.contains(KE2)); + assertFalse(migrations.contains(KE3)); + assertNull(migrations.get(RootTable.EXTENT)); + assertEquals(TS1, migrations.get(ME)); + assertNull(migrations.get(KE1)); + assertEquals(TS1, migrations.get(KE2)); + assertNull(migrations.get(KE3)); + assertFalse(migrations.isEmpty()); + assertTrue(migrations.isEmpty(DataLevel.ROOT)); + assertFalse(migrations.isEmpty(DataLevel.METADATA)); + assertFalse(migrations.isEmpty(DataLevel.USER)); + assertEquals(Map.of(DataLevel.ROOT, Set.of(), DataLevel.METADATA, Set.of(ME), DataLevel.USER, + Set.of(KE2)), migrations.mutableCopy()); + } + + @Test + public void testRemoveTable() { + migrations.removeTable(TID1); + + assertEquals(3, migrations.size()); + assertEquals(Set.of(RootTable.EXTENT, ME, KE2), migrations.snapshotAll()); + assertEquals(Set.of(RootTable.EXTENT), migrations.snapshot(DataLevel.ROOT)); + assertEquals(Set.of(ME), migrations.snapshot(DataLevel.METADATA)); + assertEquals(Set.of(KE2), migrations.snapshot(DataLevel.USER)); + assertTrue(migrations.contains(RootTable.EXTENT)); + assertTrue(migrations.contains(ME)); + assertFalse(migrations.contains(KE1)); + assertTrue(migrations.contains(KE2)); + assertFalse(migrations.contains(KE3)); + assertEquals(TS2, migrations.get(RootTable.EXTENT)); + assertEquals(TS1, migrations.get(ME)); + assertNull(migrations.get(KE1)); + assertEquals(TS1, migrations.get(KE2)); + assertNull(migrations.get(KE3)); + assertFalse(migrations.isEmpty()); + assertFalse(migrations.isEmpty(DataLevel.ROOT)); + assertFalse(migrations.isEmpty(DataLevel.METADATA)); + assertFalse(migrations.isEmpty(DataLevel.USER)); + assertEquals(Map.of(DataLevel.ROOT, Set.of(RootTable.EXTENT), DataLevel.METADATA, Set.of(ME), + DataLevel.USER, Set.of(KE2)), migrations.mutableCopy()); + } + + @Test + public void testEmpty() { + migrations.removeServers(Set.of(TS1, TS2)); + + assertEquals(0, migrations.size()); + assertEquals(Set.of(), migrations.snapshotAll()); + assertEquals(Set.of(), migrations.snapshot(DataLevel.ROOT)); + assertEquals(Set.of(), migrations.snapshot(DataLevel.METADATA)); + assertEquals(Set.of(), migrations.snapshot(DataLevel.USER)); + assertFalse(migrations.contains(RootTable.EXTENT)); + assertFalse(migrations.contains(ME)); + assertFalse(migrations.contains(KE1)); + assertFalse(migrations.contains(KE2)); + assertFalse(migrations.contains(KE3)); + assertNull(migrations.get(RootTable.EXTENT)); + assertNull(migrations.get(ME)); + assertNull(migrations.get(KE1)); + assertNull(migrations.get(KE2)); + assertNull(migrations.get(KE3)); + assertTrue(migrations.isEmpty()); + assertTrue(migrations.isEmpty(DataLevel.ROOT)); + assertTrue(migrations.isEmpty(DataLevel.METADATA)); + assertTrue(migrations.isEmpty(DataLevel.USER)); + assertEquals( + Map.of(DataLevel.ROOT, Set.of(), DataLevel.METADATA, Set.of(), DataLevel.USER, Set.of()), + migrations.mutableCopy()); + } + } diff --cc server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tables/TablesResource.java index 65f6934750,668119104c..1b97325743 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tables/TablesResource.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tables/TablesResource.java @@@ -40,10 -40,11 +40,11 @@@ import org.apache.accumulo.core.data.Ra import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.manager.state.tables.TableState; import org.apache.accumulo.core.manager.thrift.ManagerMonitorInfo; -import org.apache.accumulo.core.master.thrift.TableInfo; -import org.apache.accumulo.core.master.thrift.TabletServerStatus; -import org.apache.accumulo.core.metadata.RootTable; +import org.apache.accumulo.core.manager.thrift.TableInfo; +import org.apache.accumulo.core.manager.thrift.TabletServerStatus; +import org.apache.accumulo.core.metadata.AccumuloTable; import org.apache.accumulo.core.metadata.TabletLocationState; + import org.apache.accumulo.core.metadata.schema.Ample.DataLevel; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection; import org.apache.accumulo.monitor.Monitor; import org.apache.accumulo.monitor.rest.tservers.TabletServer; @@@ -141,11 -142,9 +142,9 @@@ public class TablesResource } TreeSet<String> locs = new TreeSet<>(); - if (RootTable.ID.equals(tableId)) { + if (AccumuloTable.ROOT.tableId().equals(tableId)) { locs.add(rootTabletLocation); } else { - String systemTableName = AccumuloTable.METADATA.tableId().equals(tableId) - ? AccumuloTable.ROOT.tableName() : AccumuloTable.METADATA.tableName(); MetaDataTableScanner scanner = new MetaDataTableScanner(monitor.getContext(), new Range(TabletsSection.encodeRow(tableId, new Text()), TabletsSection.encodeRow(tableId, null)), diff --cc test/src/main/java/org/apache/accumulo/test/functional/AssignLocationModeIT.java index 376dad39a2,c6b8d63e8f..bab3757ea6 --- a/test/src/main/java/org/apache/accumulo/test/functional/AssignLocationModeIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/AssignLocationModeIT.java @@@ -33,12 -32,12 +33,12 @@@ import org.apache.accumulo.core.conf.Pr import org.apache.accumulo.core.data.Mutation; import org.apache.accumulo.core.data.Range; import org.apache.accumulo.core.data.TableId; - import org.apache.accumulo.core.metadata.AccumuloTable; import org.apache.accumulo.core.metadata.TabletLocationState; + import org.apache.accumulo.core.metadata.schema.Ample.DataLevel; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection; -import org.apache.accumulo.core.util.UtilWaitThread; import org.apache.accumulo.miniclusterImpl.MiniAccumuloConfigImpl; import org.apache.accumulo.server.manager.state.MetaDataTableScanner; +import org.apache.accumulo.test.util.Wait; import org.apache.hadoop.conf.Configuration; import org.junit.jupiter.api.Test; @@@ -64,11 -59,13 +64,11 @@@ public class AssignLocationModeIT exten getCluster().createAccumuloClient("root", new PasswordToken(ROOT_PASSWORD))) { String tableName = super.getUniqueNames(1)[0]; c.tableOperations().create(tableName); - String tableId = c.tableOperations().tableIdMap().get(tableName); + TableId tableId = TableId.of(c.tableOperations().tableIdMap().get(tableName)); // wait for the table to be online - TabletLocationState newTablet; - do { - UtilWaitThread.sleep(250); - newTablet = getTabletLocationState(c, tableId); - } while (newTablet.current == null); + Wait.waitFor(() -> getTabletLocationState(c, tableId) != null, SECONDS.toMillis(60), 250); + + TabletLocationState newTablet = getTabletLocationState(c, tableId); // this would be null if the mode was not "assign" assertEquals(newTablet.getCurrentServer(), newTablet.getLastServer()); assertNull(newTablet.future); diff --cc test/src/main/java/org/apache/accumulo/test/functional/CompactLocationModeIT.java index e51b6c3072,cb5ff60fef..f5846b474f --- a/test/src/main/java/org/apache/accumulo/test/functional/CompactLocationModeIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/CompactLocationModeIT.java @@@ -32,12 -32,12 +32,12 @@@ import org.apache.accumulo.core.conf.Pr import org.apache.accumulo.core.data.Mutation; import org.apache.accumulo.core.data.Range; import org.apache.accumulo.core.data.TableId; - import org.apache.accumulo.core.metadata.AccumuloTable; import org.apache.accumulo.core.metadata.TabletLocationState; + import org.apache.accumulo.core.metadata.schema.Ample.DataLevel; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection; -import org.apache.accumulo.core.util.UtilWaitThread; import org.apache.accumulo.miniclusterImpl.MiniAccumuloConfigImpl; import org.apache.accumulo.server.manager.state.MetaDataTableScanner; +import org.apache.accumulo.test.util.Wait; import org.apache.hadoop.conf.Configuration; import org.junit.jupiter.api.Test; @@@ -63,11 -59,14 +63,12 @@@ public class CompactLocationModeIT exte getCluster().createAccumuloClient("root", new PasswordToken(ROOT_PASSWORD))) { String tableName = super.getUniqueNames(1)[0]; c.tableOperations().create(tableName); - String tableId = c.tableOperations().tableIdMap().get(tableName); + TableId tableId = TableId.of(c.tableOperations().tableIdMap().get(tableName)); + // wait for the table to be online - TabletLocationState newTablet; - do { - UtilWaitThread.sleep(250); - newTablet = getTabletLocationState(c, tableId); - } while (newTablet.current == null); + Wait.waitFor(() -> getTabletLocationState(c, tableId) != null); + + TabletLocationState newTablet = getTabletLocationState(c, tableId); assertNull(newTablet.last); assertNull(newTablet.future); diff --cc test/src/main/java/org/apache/accumulo/test/functional/ManagerAssignmentIT.java index f14e8d587a,50827f3dac..0ed6747e00 --- a/test/src/main/java/org/apache/accumulo/test/functional/ManagerAssignmentIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/ManagerAssignmentIT.java @@@ -43,9 -42,10 +43,10 @@@ import org.apache.accumulo.core.clientI import org.apache.accumulo.core.data.Mutation; import org.apache.accumulo.core.data.Range; import org.apache.accumulo.core.data.TableId; -import org.apache.accumulo.core.fate.zookeeper.ServiceLock; -import org.apache.accumulo.core.metadata.RootTable; +import org.apache.accumulo.core.lock.ServiceLock; +import org.apache.accumulo.core.metadata.AccumuloTable; import org.apache.accumulo.core.metadata.TabletLocationState; + import org.apache.accumulo.core.metadata.schema.Ample.DataLevel; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection; import org.apache.accumulo.core.rpc.clients.ThriftClientTypes; import org.apache.accumulo.core.trace.TraceUtil; @@@ -70,12 -70,13 +71,11 @@@ public class ManagerAssignmentIT extend try (AccumuloClient c = Accumulo.newClient().from(getClientProps()).build()) { String tableName = super.getUniqueNames(1)[0]; c.tableOperations().create(tableName); - String tableId = c.tableOperations().tableIdMap().get(tableName); - + TableId tableId = TableId.of(c.tableOperations().tableIdMap().get(tableName)); // wait for the table to be online - TabletLocationState newTablet; - do { - UtilWaitThread.sleep(250); - newTablet = getTabletLocationState(c, tableId); - } while (newTablet.current == null); + Wait.waitFor(() -> getTabletLocationState(c, tableId) != null, SECONDS.toMillis(60), 250); + + TabletLocationState newTablet = getTabletLocationState(c, tableId); assertNull(newTablet.last); assertNull(newTablet.future); diff --cc test/src/main/java/org/apache/accumulo/test/functional/TabletStateChangeIteratorIT.java index ed34aaf7cb,969d5d7cac..fd23ea310e --- a/test/src/main/java/org/apache/accumulo/test/functional/TabletStateChangeIteratorIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/TabletStateChangeIteratorIT.java @@@ -53,14 -52,17 +53,15 @@@ import org.apache.accumulo.core.data.Mu 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.ServiceLock; import org.apache.accumulo.core.fate.zookeeper.ZooUtil; +import org.apache.accumulo.core.lock.ServiceLock; import org.apache.accumulo.core.manager.state.tables.TableState; import org.apache.accumulo.core.manager.thrift.ManagerState; -import org.apache.accumulo.core.metadata.MetadataTable; -import org.apache.accumulo.core.metadata.RootTable; +import org.apache.accumulo.core.metadata.AccumuloTable; import org.apache.accumulo.core.metadata.TServerInstance; + import org.apache.accumulo.core.metadata.schema.Ample.DataLevel; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.CurrentLocationColumnFamily; import org.apache.accumulo.core.security.Authorizations; -import org.apache.accumulo.core.util.UtilWaitThread; import org.apache.accumulo.harness.AccumuloClusterHarness; import org.apache.accumulo.server.manager.state.CurrentState; import org.apache.accumulo.server.manager.state.MergeInfo; @@@ -204,7 -205,11 +205,11 @@@ public class TabletStateChangeIteratorI int results = 0; List<Key> resultList = new ArrayList<>(); try (Scanner scanner = client.createScanner(table, Authorizations.EMPTY)) { - MetaDataTableScanner.configureScanner(scanner, state); + DataLevel currentDataLevel = DataLevel.USER; - if (table.equals(RootTable.NAME)) { ++ if (table.equals(AccumuloTable.ROOT.tableName())) { + currentDataLevel = DataLevel.METADATA; + } + MetaDataTableScanner.configureScanner(scanner, state, currentDataLevel); log.debug("Current state = {}", state); scanner.updateScanIteratorOption("tabletChange", "debug", "1"); for (Entry<Key,Value> e : scanner) { diff --cc test/src/main/java/org/apache/accumulo/test/manager/SuspendedTabletsIT.java index c32cd927c0,18aa78a25d..9f9a6ab8cf --- a/test/src/main/java/org/apache/accumulo/test/manager/SuspendedTabletsIT.java +++ b/test/src/main/java/org/apache/accumulo/test/manager/SuspendedTabletsIT.java @@@ -53,10 -51,12 +52,12 @@@ import org.apache.accumulo.core.clientI import org.apache.accumulo.core.conf.ClientProperty; import org.apache.accumulo.core.conf.Property; import org.apache.accumulo.core.data.Range; + import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.dataImpl.KeyExtent; -import org.apache.accumulo.core.metadata.MetadataTable; +import org.apache.accumulo.core.metadata.AccumuloTable; import org.apache.accumulo.core.metadata.TServerInstance; import org.apache.accumulo.core.metadata.TabletLocationState; + import org.apache.accumulo.core.metadata.schema.Ample.DataLevel; import org.apache.accumulo.core.rpc.clients.ThriftClientTypes; import org.apache.accumulo.core.spi.balancer.HostRegexTableLoadBalancer; import org.apache.accumulo.core.spi.balancer.data.TabletServerId; @@@ -127,13 -126,11 +128,11 @@@ public class SuspendedTabletsIT extend // Wait for the balancer to assign all metadata tablets to the chosen server. ClientContext ctx = (ClientContext) client; - TabletLocations tl = TabletLocations.retrieve(ctx, AccumuloTable.METADATA.tableName(), - AccumuloTable.ROOT.tableName()); - TabletLocations tl = TabletLocations.retrieve(ctx, MetadataTable.NAME); ++ TabletLocations tl = TabletLocations.retrieve(ctx, AccumuloTable.METADATA.tableName()); while (tl.hosted.keySet().size() != 1 || !tl.hosted.containsKey(metadataServer)) { log.info("Metadata tablets are not hosted on the correct server. Waiting for balancer..."); Thread.sleep(1000L); - tl = TabletLocations.retrieve(ctx, AccumuloTable.METADATA.tableName(), - AccumuloTable.ROOT.tableName()); - tl = TabletLocations.retrieve(ctx, MetadataTable.NAME); ++ tl = TabletLocations.retrieve(ctx, AccumuloTable.METADATA.tableName()); } log.info("Metadata tablets are now hosted on {}", metadataServer); } diff --cc test/src/main/java/org/apache/accumulo/test/performance/NullTserver.java index d36c9919fc,19c7245d74..fcc03f98f0 --- a/test/src/main/java/org/apache/accumulo/test/performance/NullTserver.java +++ b/test/src/main/java/org/apache/accumulo/test/performance/NullTserver.java @@@ -53,8 -54,7 +53,7 @@@ import org.apache.accumulo.core.dataImp import org.apache.accumulo.core.dataImpl.thrift.TSummaries; import org.apache.accumulo.core.dataImpl.thrift.TSummaryRequest; import org.apache.accumulo.core.dataImpl.thrift.UpdateErrors; -import org.apache.accumulo.core.master.thrift.TabletServerStatus; +import org.apache.accumulo.core.manager.thrift.TabletServerStatus; - import org.apache.accumulo.core.metadata.AccumuloTable; import org.apache.accumulo.core.metadata.TServerInstance; import org.apache.accumulo.core.metadata.TabletLocationState; import org.apache.accumulo.core.metadata.schema.Ample.DataLevel;