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
commit 1f218de444eb1aff5654c55fc84659d0491ae8b8 Merge: f674e9a0b0 f26c702a87 Author: Keith Turner <ktur...@apache.org> AuthorDate: Tue Jan 16 12:51:49 2024 -0500 Merge remote-tracking branch 'upstream/main' into elasticity .../core/clientImpl/TableOperationsImpl.java | 71 +++++++++--------- .../clientImpl/bulk/ConcurrentKeyExtentCache.java | 17 ++--- .../fate/zookeeper/DistributedReadWriteLock.java | 33 +++++---- .../org/apache/accumulo/core/summary/Gatherer.java | 22 +++--- .../java/org/apache/accumulo/core/util/Merge.java | 62 ++++++++-------- .../org/apache/accumulo/core/util/MergeTest.java | 31 +++++++- .../manager/balancer/BalancerEnvironmentImpl.java | 12 ++-- .../accumulo/server/metadata/ServerAmpleImpl.java | 2 +- .../main/java/org/apache/accumulo/gc/GCRun.java | 4 +- .../accumulo/gc/GarbageCollectionAlgorithm.java | 84 +++++++++++----------- .../apache/accumulo/manager/tableOps/Utils.java | 15 +++- .../manager/tableOps/bulkVer2/LoadFiles.java | 23 +++--- .../manager/tableOps/bulkVer2/PrepBulkImport.java | 42 ++++++++--- .../tableOps/bulkVer2/PrepBulkImportTest.java | 31 +++++--- .../org/apache/accumulo/tserver/ScanServer.java | 10 ++- .../java/org/apache/accumulo/test/AmpleIT.java | 16 +++-- .../java/org/apache/accumulo/test/GCRunIT.java | 13 ++-- .../accumulo/test/ScanServerMetadataEntriesIT.java | 6 +- .../test/compaction/ExternalCompaction4_IT.java | 33 +++++---- .../test/compaction/ExternalCompaction_2_IT.java | 8 +-- .../test/functional/GarbageCollectorTrashBase.java | 17 ++--- .../accumulo/test/functional/MetadataIT.java | 15 ++-- 22 files changed, 335 insertions(+), 232 deletions(-) diff --cc core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java index 09e4174dd7,3b7bf91612..157df582ac --- a/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java +++ b/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java @@@ -1306,37 -1328,38 +1303,41 @@@ public class TableOperationsImpl extend Text continueRow = null; MapCounter<String> serverCounts = new MapCounter<>(); - for (TabletMetadata tablet : tablets) { - total++; - Location loc = tablet.getLocation(); - TabletHostingGoal goal = tablet.getHostingGoal(); - - if ((expectedState == TableState.ONLINE - && (goal == TabletHostingGoal.ALWAYS - || (goal == TabletHostingGoal.ONDEMAND) && tablet.getHostingRequested()) - && (loc == null || loc.getType() == LocationType.FUTURE)) - || (expectedState == TableState.OFFLINE && loc != null)) { - if (continueRow == null) { - continueRow = tablet.getExtent().toMetaRow(); + try (TabletsMetadata tablets = TabletsMetadata.builder(context).scanMetadataTable() - .overRange(range).fetch(LOCATION, PREV_ROW).build()) { ++ .overRange(range).fetch(HOSTING_GOAL, HOSTING_REQUESTED, LOCATION, PREV_ROW).build()) { + + for (TabletMetadata tablet : tablets) { + total++; + Location loc = tablet.getLocation(); ++ TabletHostingGoal goal = tablet.getHostingGoal(); + + if ((expectedState == TableState.ONLINE ++ && (goal == TabletHostingGoal.ALWAYS ++ || (goal == TabletHostingGoal.ONDEMAND) && tablet.getHostingRequested()) + && (loc == null || loc.getType() == LocationType.FUTURE)) + || (expectedState == TableState.OFFLINE && loc != null)) { + if (continueRow == null) { + continueRow = tablet.getExtent().toMetaRow(); + } + waitFor++; + lastRow = tablet.getExtent().toMetaRow(); + + if (loc != null) { + serverCounts.increment(loc.getHostPortSession(), 1); + } } - waitFor++; - lastRow = tablet.getExtent().toMetaRow(); - if (loc != null) { - serverCounts.increment(loc.getHostPortSession(), 1); + if (!tablet.getExtent().tableId().equals(tableId)) { + throw new AccumuloException( + "Saw unexpected table Id " + tableId + " " + tablet.getExtent()); } - } - if (!tablet.getExtent().tableId().equals(tableId)) { - throw new AccumuloException( - "Saw unexpected table Id " + tableId + " " + tablet.getExtent()); - } + if (lastExtent != null && !tablet.getExtent().isPreviousExtent(lastExtent)) { + holes++; + } - if (lastExtent != null && !tablet.getExtent().isPreviousExtent(lastExtent)) { - holes++; + lastExtent = tablet.getExtent(); } - - lastExtent = tablet.getExtent(); } if (continueRow != null) { @@@ -2098,9 -2060,11 +2099,11 @@@ @Override public TimeType getTimeType(final String tableName) throws TableNotFoundException { TableId tableId = context.getTableId(tableName); - Optional<TabletMetadata> tabletMetadata = context.getAmple().readTablets().forTable(tableId) - .fetch(TIME).checkConsistency().build().stream().findFirst(); - + Optional<TabletMetadata> tabletMetadata; - try (TabletsMetadata tabletsMetadata = context.getAmple().readTablets().forTable(tableId) - .fetch(TabletMetadata.ColumnType.TIME).checkConsistency().build()) { ++ try (TabletsMetadata tabletsMetadata = ++ context.getAmple().readTablets().forTable(tableId).fetch(TIME).checkConsistency().build()) { + tabletMetadata = tabletsMetadata.stream().findFirst(); + } TabletMetadata timeData = tabletMetadata.orElseThrow(() -> new IllegalStateException("Failed to retrieve TimeType")); return timeData.getTime().getType(); diff --cc server/manager/src/main/java/org/apache/accumulo/manager/tableOps/bulkVer2/LoadFiles.java index 1d6fe1c6ee,02924116ec..86b8c2b71e --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/bulkVer2/LoadFiles.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/bulkVer2/LoadFiles.java @@@ -313,19 -328,25 +313,20 @@@ class LoadFiles extends ManagerRepo Text startRow = loadMapEntry.getKey().prevEndRow(); - Iterator<TabletMetadata> tabletIter = - TabletsMetadata.builder(manager.getContext()).forTable(tableId).overlapping(startRow, null) - .checkConsistency().fetch(PREV_ROW, LOCATION, LOADED, TIME).build().iterator(); - - Loader loader; - if (bulkInfo.tableState == TableState.ONLINE) { - loader = new OnlineLoader(); - } else { - loader = new OfflineLoader(); - } + Loader loader = new Loader(); - + long t1; loader.start(bulkDir, manager, tid, bulkInfo.setTime); - - long t1 = System.currentTimeMillis(); - while (lmi.hasNext()) { - loadMapEntry = lmi.next(); - List<TabletMetadata> tablets = findOverlappingTablets(loadMapEntry.getKey(), tabletIter); - loader.load(tablets, loadMapEntry.getValue()); + try (TabletsMetadata tabletsMetadata = + TabletsMetadata.builder(manager.getContext()).forTable(tableId).overlapping(startRow, null) - .checkConsistency().fetch(PREV_ROW, LOCATION, LOADED).build()) { ++ .checkConsistency().fetch(PREV_ROW, LOCATION, LOADED, TIME).build()) { + + t1 = System.currentTimeMillis(); + while (lmi.hasNext()) { + loadMapEntry = lmi.next(); + List<TabletMetadata> tablets = + findOverlappingTablets(loadMapEntry.getKey(), tabletsMetadata.iterator()); + loader.load(tablets, loadMapEntry.getValue()); + } } long sleepTime = loader.finish(); diff --cc test/src/main/java/org/apache/accumulo/test/compaction/ExternalCompaction4_IT.java index 4d4364e980,b52e7a41c7..43585cfffd --- a/test/src/main/java/org/apache/accumulo/test/compaction/ExternalCompaction4_IT.java +++ b/test/src/main/java/org/apache/accumulo/test/compaction/ExternalCompaction4_IT.java @@@ -81,9 -89,13 +83,10 @@@ public class ExternalCompaction4_IT ext client.tableOperations().attachIterator(table1, setting2, EnumSet.of(IteratorScope.majc)); client.tableOperations().compact(table1, new CompactionConfig().setWait(true)); - assertThrows(NoSuchElementException.class, () -> ample.readTablets().forTable(tid) - .fetch(ColumnType.FILES).build().iterator().next()); + try (TabletsMetadata tm = ample.readTablets().forTable(tid).fetch(ColumnType.FILES).build()) { + assertThrows(NoSuchElementException.class, () -> tm.iterator().next()); + } assertEquals(0, client.createScanner(table1).stream().count()); - } finally { - getCluster().getClusterControl().stopAllServers(ServerType.COMPACTOR); - getCluster().getClusterControl().stopAllServers(ServerType.COMPACTION_COORDINATOR); } } @@@ -111,11 -124,11 +116,13 @@@ client.tableOperations().attachIterator(table1, setting, EnumSet.of(IteratorScope.majc)); client.tableOperations().compact(table1, new CompactionConfig().setWait(true)); - tms = ample.readTablets().forTable(tid).fetch(ColumnType.FILES, ColumnType.ECOMP).build(); - tm = tms.iterator().next(); - assertEquals(1, tm.getFiles().size()); - // ensure the failed compactions did not leave anything in the metadata table - assertEquals(0, tm.getExternalCompactions().size()); - try ( - TabletsMetadata tms = ample.readTablets().forTable(tid).fetch(ColumnType.FILES).build()) { ++ try (TabletsMetadata tms = ++ ample.readTablets().forTable(tid).fetch(ColumnType.FILES, ColumnType.ECOMP).build()) { + TabletMetadata tm = tms.iterator().next(); + assertEquals(1, tm.getFiles().size()); ++ // ensure the failed compactions did not leave anything in the metadata table ++ assertEquals(0, tm.getExternalCompactions().size()); + } ReadWriteIT.verify(client, 1000, 1, 1, 0, table1); diff --cc test/src/main/java/org/apache/accumulo/test/compaction/ExternalCompaction_2_IT.java index 8a18b0bab3,3b902a5eab..6e2bc673fb --- a/test/src/main/java/org/apache/accumulo/test/compaction/ExternalCompaction_2_IT.java +++ b/test/src/main/java/org/apache/accumulo/test/compaction/ExternalCompaction_2_IT.java @@@ -292,19 -333,14 +292,19 @@@ public class ExternalCompaction_2_IT ex client.tableOperations().delete(table1); - confirmCompactionCompleted(getCluster().getServerContext(), ecids, - TCompactionState.CANCELLED); + LoggerFactory.getLogger(getClass()).debug("Table deleted."); - try (TabletsMetadata tm = getCluster().getServerContext().getAmple().readTablets() - .forTable(tid).fetch(ColumnType.ECOMP).build()) { + confirmCompactionCompleted(ctx, ecids, TCompactionState.CANCELLED); + + LoggerFactory.getLogger(getClass()).debug("Confirmed compaction cancelled."); + - TabletsMetadata tm = - ctx.getAmple().readTablets().forTable(tid).fetch(ColumnType.PREV_ROW).build(); - assertEquals(0, tm.stream().count()); - tm.close(); ++ try (TabletsMetadata tm = ++ ctx.getAmple().readTablets().forTable(tid).fetch(ColumnType.PREV_ROW).build()) { + assertEquals(0, tm.stream().count()); + } + t.join(); + assertNull(error.get()); } }