From ea6ada587499647a35d7d8fc221cc91fc934fcec Mon Sep 17 00:00:00 2001 From: "Y. SREENIVASULU REDDY" Date: Tue, 24 Mar 2026 23:03:19 +0530 Subject: [PATCH] HBASE-30016 Cached table regions locations are not using in TableSnapshotInputFormatImpl#getSplits --- .../TableSnapshotInputFormatImpl.java | 106 +++++++++--------- 1 file changed, 54 insertions(+), 52 deletions(-) diff --git a/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.java b/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.java index 501209f1c902..903aa1039f8a 100644 --- a/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.java +++ b/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.java @@ -424,74 +424,76 @@ public static List getSplits(Scan scan, SnapshotManifest manifest, Connection connection = null; RegionLocator regionLocator = null; - if (localityEnabled && useRegionLoc) { - Configuration newConf = new Configuration(conf); - newConf.setInt("hbase.hconnection.threads.max", 1); - try { + List splits = new ArrayList<>(); + try { + if (localityEnabled && useRegionLoc) { + Configuration newConf = new Configuration(conf); + newConf.setInt("hbase.hconnection.threads.max", 1); + connection = ConnectionFactory.createConnection(newConf); regionLocator = connection.getRegionLocator(htd.getTableName()); /* Get all locations for the table and cache it */ regionLocator.getAllRegionLocations(); - } finally { - if (connection != null) { - connection.close(); - } } - } - List splits = new ArrayList<>(); - for (RegionInfo hri : regionManifests) { - // load region descriptor - List hosts = null; - if (localityEnabled) { - if (regionLocator != null) { - /* Get Location from the local cache */ - HRegionLocation location = regionLocator.getRegionLocation(hri.getStartKey(), false); - - hosts = new ArrayList<>(1); - hosts.add(location.getHostname()); - } else { - hosts = calculateLocationsForInputSplit(conf, htd, hri, tableDir); + for (RegionInfo hri : regionManifests) { + // load region descriptor + List hosts = null; + if (localityEnabled) { + if (regionLocator != null) { + /* Get Location from the local cache */ + HRegionLocation location = regionLocator.getRegionLocation(hri.getStartKey(), false); + + hosts = new ArrayList<>(1); + hosts.add(location.getHostname()); + } else { + hosts = calculateLocationsForInputSplit(conf, htd, hri, tableDir); + } } - } - if (numSplits > 1) { - byte[][] sp = sa.split(hri.getStartKey(), hri.getEndKey(), numSplits, true); - for (int i = 0; i < sp.length - 1; i++) { + if (numSplits > 1) { + byte[][] sp = sa.split(hri.getStartKey(), hri.getEndKey(), numSplits, true); + for (int i = 0; i < sp.length - 1; i++) { + if ( + PrivateCellUtil.overlappingKeys(scan.getStartRow(), scan.getStopRow(), sp[i], + sp[i + 1]) + ) { + + Scan boundedScan = new Scan(scan); + if (scan.getStartRow().length == 0) { + boundedScan.withStartRow(sp[i]); + } else { + boundedScan.withStartRow( + Bytes.compareTo(scan.getStartRow(), sp[i]) > 0 ? scan.getStartRow() : sp[i]); + } + + if (scan.getStopRow().length == 0) { + boundedScan.withStopRow(sp[i + 1]); + } else { + boundedScan.withStopRow(Bytes.compareTo(scan.getStopRow(), sp[i + 1]) < 0 + ? scan.getStopRow() + : sp[i + 1]); + } + + splits.add(new InputSplit(htd, hri, hosts, boundedScan, restoreDir)); + } + } + } else { if ( - PrivateCellUtil.overlappingKeys(scan.getStartRow(), scan.getStopRow(), sp[i], sp[i + 1]) + PrivateCellUtil.overlappingKeys(scan.getStartRow(), scan.getStopRow(), + hri.getStartKey(), hri.getEndKey()) ) { - Scan boundedScan = new Scan(scan); - if (scan.getStartRow().length == 0) { - boundedScan.withStartRow(sp[i]); - } else { - boundedScan.withStartRow( - Bytes.compareTo(scan.getStartRow(), sp[i]) > 0 ? scan.getStartRow() : sp[i]); - } - - if (scan.getStopRow().length == 0) { - boundedScan.withStopRow(sp[i + 1]); - } else { - boundedScan.withStopRow( - Bytes.compareTo(scan.getStopRow(), sp[i + 1]) < 0 ? scan.getStopRow() : sp[i + 1]); - } - - splits.add(new InputSplit(htd, hri, hosts, boundedScan, restoreDir)); + splits.add(new InputSplit(htd, hri, hosts, scan, restoreDir)); } } - } else { - if ( - PrivateCellUtil.overlappingKeys(scan.getStartRow(), scan.getStopRow(), hri.getStartKey(), - hri.getEndKey()) - ) { - - splits.add(new InputSplit(htd, hri, hosts, scan, restoreDir)); - } + } + } finally { + if (connection != null) { + connection.close(); } } - return splits; }