Index: hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (revision 1387450) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (working copy) @@ -281,7 +281,7 @@ // Compactions public CompactSplitThread compactSplitThread; - final Map scanners = + final ConcurrentHashMap scanners = new ConcurrentHashMap(); /** @@ -2818,11 +2818,18 @@ } protected long addScanner(RegionScanner s) throws LeaseStillHeldException { - long scannerId = nextLong(); - String scannerName = String.valueOf(scannerId); - scanners.put(scannerName, s); - this.leases.createLease(scannerName, this.scannerLeaseTimeoutPeriod, new ScannerListener( - scannerName)); + long scannerId = -1; + while (true) { + scannerId = rand.nextLong(); + if (scannerId == -1) continue; + String scannerName = String.valueOf(scannerId); + RegionScanner existing = scanners.putIfAbsent(scannerName, s); + if (existing == null) { + this.leases.createLease(scannerName, this.scannerLeaseTimeoutPeriod, + new ScannerListener(scannerName)); + break; + } + } return scannerId; }