Skip to content

Commit a4036a6

Browse files
committed
HBASE-26765 Minor refactor of async scanning code (#4121)
Signed-off-by: Duo Zhang <[email protected]>
1 parent d13cc38 commit a4036a6

File tree

4 files changed

+22
-19
lines changed

4 files changed

+22
-19
lines changed

hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncConnectionImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ public AsyncTableBuilder<ScanResultConsumer> getTableBuilder(TableName tableName
340340
public AsyncTable<ScanResultConsumer> build() {
341341
RawAsyncTableImpl rawTable =
342342
new RawAsyncTableImpl(AsyncConnectionImpl.this, RETRY_TIMER, this);
343-
return new AsyncTableImpl(AsyncConnectionImpl.this, rawTable, pool);
343+
return new AsyncTableImpl(rawTable, pool);
344344
}
345345
};
346346
}

hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTableImpl.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,11 @@
4343
@InterfaceAudience.Private
4444
class AsyncTableImpl implements AsyncTable<ScanResultConsumer> {
4545

46-
private final AsyncTable<AdvancedScanResultConsumer> rawTable;
46+
private final RawAsyncTableImpl rawTable;
4747

4848
private final ExecutorService pool;
4949

50-
AsyncTableImpl(AsyncConnectionImpl conn, AsyncTable<AdvancedScanResultConsumer> rawTable,
51-
ExecutorService pool) {
50+
AsyncTableImpl(RawAsyncTableImpl rawTable, ExecutorService pool) {
5251
this.rawTable = rawTable;
5352
this.pool = pool;
5453
}

hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTableResultScanner.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,24 @@
2323
import java.io.InterruptedIOException;
2424
import java.util.ArrayDeque;
2525
import java.util.Queue;
26+
import org.apache.hadoop.hbase.TableName;
2627
import org.apache.hadoop.hbase.client.metrics.ScanMetrics;
2728
import org.apache.hadoop.hbase.util.FutureUtils;
2829
import org.apache.yetus.audience.InterfaceAudience;
2930
import org.slf4j.Logger;
3031
import org.slf4j.LoggerFactory;
3132

3233
/**
33-
* The {@link ResultScanner} implementation for {@link AsyncTable}. It will fetch data automatically
34-
* in background and cache it in memory. Typically the {@link #maxCacheSize} will be
34+
* The {@link ResultScanner} implementation for {@link RawAsyncTableImpl}. It will fetch data
35+
* automatically in background and cache it in memory. Typically, the {@link #maxCacheSize} will be
3536
* {@code 2 * scan.getMaxResultSize()}.
3637
*/
3738
@InterfaceAudience.Private
3839
class AsyncTableResultScanner implements ResultScanner, AdvancedScanResultConsumer {
3940

4041
private static final Logger LOG = LoggerFactory.getLogger(AsyncTableResultScanner.class);
4142

42-
private final AsyncTable<AdvancedScanResultConsumer> rawTable;
43+
private final TableName tableName;
4344

4445
private final long maxCacheSize;
4546

@@ -57,12 +58,10 @@ class AsyncTableResultScanner implements ResultScanner, AdvancedScanResultConsum
5758

5859
private ScanResumer resumer;
5960

60-
public AsyncTableResultScanner(AsyncTable<AdvancedScanResultConsumer> table, Scan scan,
61-
long maxCacheSize) {
62-
this.rawTable = table;
61+
public AsyncTableResultScanner(TableName tableName, Scan scan, long maxCacheSize) {
62+
this.tableName = tableName;
6363
this.maxCacheSize = maxCacheSize;
6464
this.scan = scan;
65-
table.scan(scan, this);
6665
}
6766

6867
private void addToCache(Result result) {
@@ -72,9 +71,10 @@ private void addToCache(Result result) {
7271

7372
private void stopPrefetch(ScanController controller) {
7473
if (LOG.isDebugEnabled()) {
75-
LOG.debug(String.format("0x%x", System.identityHashCode(this)) +
76-
" stop prefetching when scanning " + rawTable.getName() + " as the cache size " +
77-
cacheSize + " is greater than the maxCacheSize " + maxCacheSize);
74+
LOG.debug("{} stop prefetching when scanning {} as the cache size {}" +
75+
" is greater than the maxCacheSize {}",
76+
String.format("0x%x", System.identityHashCode(this)), tableName, cacheSize,
77+
maxCacheSize);
7878
}
7979
resumer = controller.suspend();
8080
}
@@ -138,7 +138,7 @@ public synchronized Result next() throws IOException {
138138
return null;
139139
}
140140
if (error != null) {
141-
FutureUtils.rethrow(error);
141+
throw FutureUtils.rethrow(error);
142142
}
143143
try {
144144
wait();

hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncTableImpl.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -666,10 +666,14 @@ private long resultSize2CacheSize(long maxResultSize) {
666666
}
667667

668668
@Override
669-
public ResultScanner getScanner(Scan scan) {
670-
return new AsyncTableResultScanner(this, ReflectionUtils.newInstance(scan.getClass(), scan),
671-
resultSize2CacheSize(
672-
scan.getMaxResultSize() > 0 ? scan.getMaxResultSize() : defaultScannerMaxResultSize));
669+
public AsyncTableResultScanner getScanner(Scan scan) {
670+
final long maxCacheSize = resultSize2CacheSize(
671+
scan.getMaxResultSize() > 0 ? scan.getMaxResultSize() : defaultScannerMaxResultSize);
672+
final Scan scanCopy = ReflectionUtils.newInstance(scan.getClass(), scan);
673+
final AsyncTableResultScanner scanner =
674+
new AsyncTableResultScanner(tableName, scanCopy, maxCacheSize);
675+
scan(scan, scanner);
676+
return scanner;
673677
}
674678

675679
@Override

0 commit comments

Comments
 (0)