This is an automated email from the ASF dual-hosted git repository. kturner pushed a commit to branch elasticity in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/elasticity by this push: new 275c3093af Remove AvailabilityForTablet (#4728) 275c3093af is described below commit 275c3093affe5996734b40d0b4b65b74c5bf6572 Author: meatballspaghetti <69256191+meatballspaghe...@users.noreply.github.com> AuthorDate: Wed Jul 10 14:25:33 2024 -0400 Remove AvailabilityForTablet (#4728) - Delete AvailabiltyForTablet class. It is only being used in 2 tests: ImportExportIT and TableOperationsIT. - In both ImportExportIT and TableOperationsIT, replace List<AvailabilityForTablet> objects with Map<TabletId, TabletAvailability>. - Fix typo in TableOperationsIT: verifyTabletAvailabilites -> verifyTabletAvailabilities. Resolves: #4706 "Remove AvailabilityForTablet from public API" --- .../core/client/admin/AvailabilityForTablet.java | 65 ----------------- .../org/apache/accumulo/test/ImportExportIT.java | 13 ++-- .../apache/accumulo/test/TableOperationsIT.java | 83 +++++++++++----------- 3 files changed, 47 insertions(+), 114 deletions(-) diff --git a/core/src/main/java/org/apache/accumulo/core/client/admin/AvailabilityForTablet.java b/core/src/main/java/org/apache/accumulo/core/client/admin/AvailabilityForTablet.java deleted file mode 100644 index 1aaf3f4e95..0000000000 --- a/core/src/main/java/org/apache/accumulo/core/client/admin/AvailabilityForTablet.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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.core.client.admin; - -import java.util.Objects; - -import org.apache.accumulo.core.data.TabletId; - -/** - * This class contains information that defines the tablet availability data for a table. The class - * contains the TabletId and associated availability for each tablet in a table or a subset of - * tablets if a range is provided. - * - * @since 4.0.0 - */ -public class AvailabilityForTablet { - private final TabletId tabletId; - private final TabletAvailability tabletAvailability; - - public AvailabilityForTablet(TabletId tabletId, TabletAvailability tabletAvailability) { - this.tabletId = tabletId; - this.tabletAvailability = tabletAvailability; - } - - public TabletAvailability getTabletAvailability() { - return tabletAvailability; - } - - public TabletId getTabletId() { - return tabletId; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - AvailabilityForTablet that = (AvailabilityForTablet) o; - return Objects.equals(tabletId, that.tabletId) && tabletAvailability == that.tabletAvailability; - } - - @Override - public int hashCode() { - return Objects.hash(tabletId, tabletAvailability); - } -} 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 99eaed26b1..26088f071d 100644 --- a/test/src/main/java/org/apache/accumulo/test/ImportExportIT.java +++ b/test/src/main/java/org/apache/accumulo/test/ImportExportIT.java @@ -21,7 +21,7 @@ package org.apache.accumulo.test; import static org.apache.accumulo.core.Constants.IMPORT_MAPPINGS_FILE; import static org.apache.accumulo.core.util.LazySingletons.RANDOM; import static org.apache.accumulo.test.TableOperationsIT.setExpectedTabletAvailability; -import static org.apache.accumulo.test.TableOperationsIT.verifyTabletAvailabilites; +import static org.apache.accumulo.test.TableOperationsIT.verifyTabletAvailabilities; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -35,10 +35,11 @@ import java.io.IOException; import java.io.InputStreamReader; import java.nio.file.Paths; import java.time.Duration; -import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.SortedSet; @@ -49,7 +50,6 @@ import org.apache.accumulo.core.client.Accumulo; import org.apache.accumulo.core.client.AccumuloClient; import org.apache.accumulo.core.client.BatchWriter; import org.apache.accumulo.core.client.Scanner; -import org.apache.accumulo.core.client.admin.AvailabilityForTablet; import org.apache.accumulo.core.client.admin.CompactionConfig; import org.apache.accumulo.core.client.admin.ImportConfiguration; import org.apache.accumulo.core.client.admin.TabletAvailability; @@ -57,6 +57,7 @@ import org.apache.accumulo.core.data.Key; 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.data.TabletId; import org.apache.accumulo.core.data.Value; import org.apache.accumulo.core.manager.state.tables.TableState; import org.apache.accumulo.core.metadata.AccumuloTable; @@ -405,14 +406,14 @@ public class ImportExportIT extends AccumuloClusterHarness { client.tableOperations().setTabletAvailability(srcTable, range, TabletAvailability.HOSTED); // verify - List<AvailabilityForTablet> expectedTabletAvailability = new ArrayList<>(); + Map<TabletId,TabletAvailability> expectedTabletAvailability = new HashMap<>(); setExpectedTabletAvailability(expectedTabletAvailability, srcTableId, "h", null, TabletAvailability.ONDEMAND); setExpectedTabletAvailability(expectedTabletAvailability, srcTableId, "q", "h", TabletAvailability.UNHOSTED); setExpectedTabletAvailability(expectedTabletAvailability, srcTableId, null, "q", TabletAvailability.HOSTED); - verifyTabletAvailabilites(client, srcTable, new Range(), expectedTabletAvailability); + verifyTabletAvailabilities(client, srcTable, new Range(), expectedTabletAvailability); // Add a split within each of the existing tablets. Adding 'd', 'm', and 'v' splits = Sets.newTreeSet(Arrays.asList(new Text("d"), new Text("m"), new Text("v"))); @@ -432,7 +433,7 @@ public class ImportExportIT extends AccumuloClusterHarness { TabletAvailability.HOSTED); setExpectedTabletAvailability(expectedTabletAvailability, srcTableId, null, "v", TabletAvailability.HOSTED); - verifyTabletAvailabilites(client, srcTable, new Range(), expectedTabletAvailability); + verifyTabletAvailabilities(client, srcTable, new Range(), expectedTabletAvailability); // Make a directory we can use to throw the export and import directories // Must exist on the filesystem the cluster is running. diff --git a/test/src/main/java/org/apache/accumulo/test/TableOperationsIT.java b/test/src/main/java/org/apache/accumulo/test/TableOperationsIT.java index 57ae44acc2..1fb5c09cb2 100644 --- a/test/src/main/java/org/apache/accumulo/test/TableOperationsIT.java +++ b/test/src/main/java/org/apache/accumulo/test/TableOperationsIT.java @@ -50,7 +50,6 @@ import org.apache.accumulo.core.client.IteratorSetting; import org.apache.accumulo.core.client.Scanner; import org.apache.accumulo.core.client.TableExistsException; import org.apache.accumulo.core.client.TableNotFoundException; -import org.apache.accumulo.core.client.admin.AvailabilityForTablet; import org.apache.accumulo.core.client.admin.DiskUsage; import org.apache.accumulo.core.client.admin.NewTableConfiguration; import org.apache.accumulo.core.client.admin.TableOperations; @@ -63,6 +62,7 @@ import org.apache.accumulo.core.data.Mutation; import org.apache.accumulo.core.data.PartialKey; import org.apache.accumulo.core.data.Range; import org.apache.accumulo.core.data.TableId; +import org.apache.accumulo.core.data.TabletId; import org.apache.accumulo.core.data.Value; import org.apache.accumulo.core.data.constraints.DefaultKeySizeConstraint; import org.apache.accumulo.core.dataImpl.KeyExtent; @@ -309,7 +309,7 @@ public class TableOperationsIT extends AccumuloClusterHarness { try (Scanner scanner = accumuloClient.createScanner(tableName, Authorizations.EMPTY)) { Map<Key,Value> actual = new TreeMap<>(); - for (Map.Entry<Key,Value> entry : scanner) { + for (Entry<Key,Value> entry : scanner) { actual.put(entry.getKey(), entry.getValue()); } assertTrue(actual.isEmpty(), "Should be empty. Actual is " + actual); @@ -425,20 +425,20 @@ public class TableOperationsIT extends AccumuloClusterHarness { Map<String,String> idMap = accumuloClient.tableOperations().tableIdMap(); - List<AvailabilityForTablet> expectedTabletAvailability = new ArrayList<>(); + Map<TabletId,TabletAvailability> expectedTabletAvailability = new HashMap<>(); setExpectedTabletAvailability(expectedTabletAvailability, idMap.get(tableOnDemand), null, null, TabletAvailability.ONDEMAND); - verifyTabletAvailabilites(tableOnDemand, new Range(), expectedTabletAvailability); + verifyTabletAvailabilities(tableOnDemand, new Range(), expectedTabletAvailability); expectedTabletAvailability.clear(); setExpectedTabletAvailability(expectedTabletAvailability, idMap.get(tableHosted), null, null, TabletAvailability.HOSTED); - verifyTabletAvailabilites(tableHosted, new Range(), expectedTabletAvailability); + verifyTabletAvailabilities(tableHosted, new Range(), expectedTabletAvailability); expectedTabletAvailability.clear(); setExpectedTabletAvailability(expectedTabletAvailability, idMap.get(tableUnhosted), null, null, TabletAvailability.UNHOSTED); - verifyTabletAvailabilites(tableUnhosted, new Range(), expectedTabletAvailability); + verifyTabletAvailabilities(tableUnhosted, new Range(), expectedTabletAvailability); verifyTablesWithSplits(tableOnDemandWithSplits, idMap, splits, TabletAvailability.ONDEMAND); verifyTablesWithSplits(tableHostedWithSplits, idMap, splits, TabletAvailability.HOSTED); @@ -462,7 +462,7 @@ public class TableOperationsIT extends AccumuloClusterHarness { TableExistsException, AccumuloSecurityException, TableNotFoundException { String tableName = getUniqueNames(1)[0]; - List<AvailabilityForTablet> expectedTabletAvailability; + Map<TabletId,TabletAvailability> expectedTabletAvailability; SortedSet<Text> splits = Sets.newTreeSet(Arrays.asList(new Text("d"), new Text("m"), new Text("s"))); @@ -483,7 +483,7 @@ public class TableOperationsIT extends AccumuloClusterHarness { TabletAvailability.UNHOSTED); Map<String,String> idMap = accumuloClient.tableOperations().tableIdMap(); - expectedTabletAvailability = new ArrayList<>(); + expectedTabletAvailability = new HashMap<>(); String tableId = idMap.get(tableName); setExpectedTabletAvailability(expectedTabletAvailability, tableId, "d", null, TabletAvailability.UNHOSTED); @@ -495,7 +495,7 @@ public class TableOperationsIT extends AccumuloClusterHarness { TabletAvailability.HOSTED); setExpectedTabletAvailability(expectedTabletAvailability, tableId, null, "s", TabletAvailability.UNHOSTED); - verifyTabletAvailabilites(tableName, new Range(), expectedTabletAvailability); + verifyTabletAvailabilities(tableName, new Range(), expectedTabletAvailability); } finally { accumuloClient.tableOperations().delete(tableName); } @@ -510,7 +510,7 @@ public class TableOperationsIT extends AccumuloClusterHarness { String tableName = getUniqueNames(1)[0]; SortedSet<Text> splits = Sets.newTreeSet(Arrays.asList(new Text("d"), new Text("m"), new Text("s"))); - List<AvailabilityForTablet> expectedTabletAvailability = new ArrayList<>(); + Map<TabletId,TabletAvailability> expectedTabletAvailability = new HashMap<>(); Map<String,String> idMap; String tableId; @@ -534,11 +534,11 @@ public class TableOperationsIT extends AccumuloClusterHarness { setExpectedTabletAvailability(expectedTabletAvailability, tableId, "d", null, TabletAvailability.HOSTED); // test using row as range constructor - verifyTabletAvailabilites(tableName, new Range("a"), expectedTabletAvailability); + verifyTabletAvailabilities(tableName, new Range("a"), expectedTabletAvailability); // test using startRowInclusive set to true Range range = new Range(new Text("c"), true, new Text("c"), true); - verifyTabletAvailabilites(tableName, range, expectedTabletAvailability); + verifyTabletAvailabilities(tableName, range, expectedTabletAvailability); expectedTabletAvailability.clear(); setExpectedTabletAvailability(expectedTabletAvailability, tableId, "m", "d", @@ -547,7 +547,7 @@ public class TableOperationsIT extends AccumuloClusterHarness { TabletAvailability.HOSTED); range = new Range(new Text("m"), new Text("p")); - verifyTabletAvailabilites(tableName, range, expectedTabletAvailability); + verifyTabletAvailabilities(tableName, range, expectedTabletAvailability); expectedTabletAvailability.clear(); setExpectedTabletAvailability(expectedTabletAvailability, tableId, "d", null, @@ -560,7 +560,7 @@ public class TableOperationsIT extends AccumuloClusterHarness { TabletAvailability.ONDEMAND); range = new Range("b", false, "t", true); - verifyTabletAvailabilites(tableName, range, expectedTabletAvailability); + verifyTabletAvailabilities(tableName, range, expectedTabletAvailability); } finally { accumuloClient.tableOperations().delete(tableName); @@ -583,11 +583,11 @@ public class TableOperationsIT extends AccumuloClusterHarness { accumuloClient.tableOperations().setTabletAvailability(tableName, new Range(), TabletAvailability.HOSTED); - List<AvailabilityForTablet> expectedTabletAvailability = new ArrayList<>(); + Map<TabletId,TabletAvailability> expectedTabletAvailability = new HashMap<>(); String tableId = idMap.get(tableName); setExpectedTabletAvailability(expectedTabletAvailability, tableId, null, null, TabletAvailability.HOSTED); - verifyTabletAvailabilites(tableName, new Range(), expectedTabletAvailability); + verifyTabletAvailabilities(tableName, new Range(), expectedTabletAvailability); // Add splits after the fact SortedSet<Text> splits = @@ -603,7 +603,7 @@ public class TableOperationsIT extends AccumuloClusterHarness { TabletAvailability.HOSTED); setExpectedTabletAvailability(expectedTabletAvailability, tableId, null, "r", TabletAvailability.HOSTED); - verifyTabletAvailabilites(tableName, new Range(), expectedTabletAvailability); + verifyTabletAvailabilities(tableName, new Range(), expectedTabletAvailability); } finally { accumuloClient.tableOperations().delete(tableName); } @@ -639,14 +639,14 @@ public class TableOperationsIT extends AccumuloClusterHarness { TabletAvailability.HOSTED); // verify - List<AvailabilityForTablet> expectedTabletAvailability = new ArrayList<>(); + Map<TabletId,TabletAvailability> expectedTabletAvailability = new HashMap<>(); setExpectedTabletAvailability(expectedTabletAvailability, tableId, "h", null, TabletAvailability.ONDEMAND); setExpectedTabletAvailability(expectedTabletAvailability, tableId, "q", "h", TabletAvailability.UNHOSTED); setExpectedTabletAvailability(expectedTabletAvailability, tableId, null, "q", TabletAvailability.HOSTED); - verifyTabletAvailabilites(tableName, new Range(), expectedTabletAvailability); + verifyTabletAvailabilities(tableName, new Range(), expectedTabletAvailability); // Add a split within each of the existing tablets. Adding 'd', 'm', and 'v' splits = Sets.newTreeSet(Arrays.asList(new Text("d"), new Text("m"), new Text("v"))); @@ -666,7 +666,7 @@ public class TableOperationsIT extends AccumuloClusterHarness { TabletAvailability.HOSTED); setExpectedTabletAvailability(expectedTabletAvailability, tableId, null, "v", TabletAvailability.HOSTED); - verifyTabletAvailabilites(tableName, new Range(), expectedTabletAvailability); + verifyTabletAvailabilities(tableName, new Range(), expectedTabletAvailability); } finally { accumuloClient.tableOperations().delete(tableName); } @@ -675,7 +675,7 @@ public class TableOperationsIT extends AccumuloClusterHarness { private void verifyTablesWithSplits(String tableName, Map<String,String> idMap, SortedSet<Text> splits, TabletAvailability tabletAvailability) throws TableNotFoundException { - List<AvailabilityForTablet> expectedTabletAvailability = new ArrayList<>(); + Map<TabletId,TabletAvailability> expectedTabletAvailability = new HashMap<>(); String tableId = idMap.get(tableName); String[] splitPts = splits.stream().map(Text::toString).toArray(String[]::new); @@ -688,33 +688,33 @@ public class TableOperationsIT extends AccumuloClusterHarness { tabletAvailability); setExpectedTabletAvailability(expectedTabletAvailability, tableId, null, splitPts[2], tabletAvailability); - verifyTabletAvailabilites(tableName, new Range(), expectedTabletAvailability); + verifyTabletAvailabilities(tableName, new Range(), expectedTabletAvailability); // verify individual tablets can be retrieved expectedTabletAvailability.clear(); setExpectedTabletAvailability(expectedTabletAvailability, tableId, splitPts[0], null, tabletAvailability); - verifyTabletAvailabilites(tableName, new Range(null, new Text(splitPts[0])), + verifyTabletAvailabilities(tableName, new Range(null, new Text(splitPts[0])), expectedTabletAvailability); expectedTabletAvailability.clear(); setExpectedTabletAvailability(expectedTabletAvailability, tableId, splitPts[1], splitPts[0], tabletAvailability); - verifyTabletAvailabilites(tableName, + verifyTabletAvailabilities(tableName, new Range(new Text(splitPts[0]), false, new Text(splitPts[1]), true), expectedTabletAvailability); expectedTabletAvailability.clear(); setExpectedTabletAvailability(expectedTabletAvailability, tableId, splitPts[2], splitPts[1], tabletAvailability); - verifyTabletAvailabilites(tableName, + verifyTabletAvailabilities(tableName, new Range(new Text(splitPts[1]), false, new Text(splitPts[2]), true), expectedTabletAvailability); expectedTabletAvailability.clear(); setExpectedTabletAvailability(expectedTabletAvailability, tableId, null, splitPts[2], tabletAvailability); - verifyTabletAvailabilites(tableName, new Range(new Text(splitPts[2]), false, null, true), + verifyTabletAvailabilities(tableName, new Range(new Text(splitPts[2]), false, null, true), expectedTabletAvailability); expectedTabletAvailability.clear(); @@ -722,33 +722,30 @@ public class TableOperationsIT extends AccumuloClusterHarness { tabletAvailability); setExpectedTabletAvailability(expectedTabletAvailability, tableId, splitPts[2], splitPts[1], tabletAvailability); - verifyTabletAvailabilites(tableName, + verifyTabletAvailabilities(tableName, new Range(new Text(splitPts[0]), false, new Text(splitPts[2]), true), expectedTabletAvailability); } - public static void verifyTabletAvailabilites(String tableName, Range range, - List<AvailabilityForTablet> expectedAvailability) throws TableNotFoundException { - verifyTabletAvailabilites(accumuloClient, tableName, range, expectedAvailability); + public static void verifyTabletAvailabilities(String tableName, Range range, + Map<TabletId,TabletAvailability> expectedAvailability) throws TableNotFoundException { + verifyTabletAvailabilities(accumuloClient, tableName, range, expectedAvailability); } - public static void verifyTabletAvailabilites(AccumuloClient client, String tableName, Range range, - List<AvailabilityForTablet> expectedAvailability) throws TableNotFoundException { - List<TabletInformation> tabletInfo = client.tableOperations() - .getTabletInformation(tableName, range).collect(Collectors.toList()); - assertEquals(expectedAvailability.size(), tabletInfo.size()); - for (var i = 0; i < expectedAvailability.size(); i++) { - assertEquals(expectedAvailability.get(i).getTabletId(), tabletInfo.get(i).getTabletId()); - assertEquals(expectedAvailability.get(i).getTabletAvailability(), - tabletInfo.get(i).getTabletAvailability()); - } + public static void verifyTabletAvailabilities(AccumuloClient client, String tableName, + Range range, Map<TabletId,TabletAvailability> expectedAvailability) + throws TableNotFoundException { + Map<TabletId,TabletAvailability> seenAvailability = + client.tableOperations().getTabletInformation(tableName, range).collect(Collectors + .toMap(TabletInformation::getTabletId, TabletInformation::getTabletAvailability)); + assertEquals(expectedAvailability, seenAvailability); } - public static void setExpectedTabletAvailability(List<AvailabilityForTablet> expected, String id, - String endRow, String prevEndRow, TabletAvailability availability) { + public static void setExpectedTabletAvailability(Map<TabletId,TabletAvailability> expected, + String id, String endRow, String prevEndRow, TabletAvailability availability) { KeyExtent ke = new KeyExtent(TableId.of(id), endRow == null ? null : new Text(endRow), prevEndRow == null ? null : new Text(prevEndRow)); - expected.add(new AvailabilityForTablet(new TabletIdImpl(ke), availability)); + expected.put(new TabletIdImpl(ke), availability); } }