From 9c13219f0d142051bb31f3523f2f5b8e7f231d90 Mon Sep 17 00:00:00 2001 From: binlijin Date: Fri, 2 Dec 2016 21:10:37 +0800 Subject: [PATCH] HBASE-17232 Replace HashSet with ArrayList to accumulate delayed scanners in KVHeap and StoreScanner. --- .../org/apache/hadoop/hbase/regionserver/KeyValueHeap.java | 7 ++++--- .../org/apache/hadoop/hbase/regionserver/StoreScanner.java | 4 +--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/KeyValueHeap.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/KeyValueHeap.java index f2b453a4b02..ff76d208a61 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/KeyValueHeap.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/KeyValueHeap.java @@ -20,11 +20,10 @@ package org.apache.hadoop.hbase.regionserver; import java.io.IOException; +import java.util.ArrayList; import java.util.Comparator; -import java.util.HashSet; import java.util.List; import java.util.PriorityQueue; -import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -53,7 +52,7 @@ public class KeyValueHeap extends NonReversedNonLazyKeyValueScanner // Holds the scanners when a ever a eager close() happens. All such eagerly closed // scans are collected and when the final scanner.close() happens will perform the // actual close. - protected Set scannersForDelayedClose = new HashSet(); + protected List scannersForDelayedClose = null; /** * The current sub-scanner, i.e. the one that contains the next key/value @@ -89,6 +88,8 @@ public class KeyValueHeap extends NonReversedNonLazyKeyValueScanner KeyValueHeap(List scanners, KVScannerComparator comparator) throws IOException { this.comparator = comparator; + this.scannersForDelayedClose = new ArrayList( + scanners.size()); if (!scanners.isEmpty()) { this.heap = new PriorityQueue(scanners.size(), this.comparator); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java index cb40909db05..7e08eca2b01 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java @@ -24,10 +24,8 @@ import com.google.common.annotations.VisibleForTesting; import java.io.IOException; import java.io.InterruptedIOException; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import java.util.NavigableSet; -import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.locks.ReentrantLock; @@ -94,7 +92,7 @@ public class StoreScanner extends NonReversedNonLazyKeyValueScanner // Collects all the KVHeap that are eagerly getting closed during the // course of a scan - protected Set heapsForDelayedClose = new HashSet(); + protected List heapsForDelayedClose = new ArrayList(); /** * The number of KVs seen by the scanner. Includes explicitly skipped KVs, but not