This is an automated email from the ASF dual-hosted git repository. edcoleman pushed a commit to branch elasticity in repository https://gitbox.apache.org/repos/asf/accumulo.git
commit 0d40533307ab421960fbcc950892a72e72437031 Merge: 82b80d0d62 a41366bbd2 Author: Ed Coleman <edcole...@apache.org> AuthorDate: Mon May 6 20:16:17 2024 +0000 Merge remote-tracking branch 'upstream/main' into elasticity .../core/clientImpl/TabletServerBatchReaderIterator.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --cc core/src/main/java/org/apache/accumulo/core/clientImpl/TabletServerBatchReaderIterator.java index b95f256786,040a765b1f..3828b2c799 --- a/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletServerBatchReaderIterator.java +++ b/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletServerBatchReaderIterator.java @@@ -716,40 -650,26 +716,41 @@@ public class TabletServerBatchReaderIte if (serverToUse == null) { // no scan server was given so use the tablet server serverToUse = extentToTserverMap.get(extent); - log.trace("For tablet {} using hints {} scan server selector chose tablet_server", tabletId, - options.executionHints); + if (serverToUse != null) { - log.trace("For tablet {} scan server selector chose tablet_server {}", tabletId, - serverToUse); ++ log.trace("For tablet {} using hints {} scan server selector chose tablet_server", ++ tabletId, options.executionHints); + } else { + log.trace( - "For tablet {} scan server selector chose tablet_server, but tablet is not hosted", - tabletId); ++ "For tablet {} using hints {} scan server selector chose tablet_server, but tablet is not hosted", ++ tabletId, options.executionHints); + } } else { - log.trace("For tablet {} scan server selector chose scan_server:{}", tabletId, serverToUse); + log.trace("For tablet {} using hints {} scan server selector chose scan_server:{}", + tabletId, options.executionHints, serverToUse); } - var rangeMap = binnedRanges2.computeIfAbsent(serverToUse, k -> new HashMap<>()); - List<Range> ranges = extentToRangesMap.get(extent); - rangeMap.put(extent, ranges); + if (serverToUse != null) { + var rangeMap = binnedRanges.computeIfAbsent(serverToUse, k -> new HashMap<>()); + List<Range> extentRanges = extentToRangesMap.get(extent); + rangeMap.put(extent, extentRanges); + + var server = serverToUse; + reporters.computeIfAbsent(serverToUse, k -> scanAttempts.createReporter(server, tabletId)); + } else { + failures.addAll(extentToRangesMap.get(extent)); + } + } - var server = serverToUse; - reporters.computeIfAbsent(serverToUse, k -> scanAttempts.createReporter(server, tabletId)); + if (!failures.isEmpty()) { + // if there are failures at this point its because tablets are not hosted, so lets attempt to + // get them hosted + clientTabletCache.findTablets(context, ranges, (cachedTablet, range) -> {}, + LocationNeed.REQUIRED); + return new ScanServerData(failures); } - ScanServerData ssd = new ScanServerData(); + ScanServerData ssd = new ScanServerData(actions, reporters); - ssd.binnedRanges = binnedRanges2; - ssd.actions = actions; - ssd.reporters = reporters; log.trace("Scan server selector chose delay:{} busyTimeout:{}", actions.getDelay(), actions.getBusyTimeout()); return ssd;