[ https://issues.apache.org/jira/browse/HBASE-16503?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sean Busbey resolved HBASE-16503. --------------------------------- Resolution: Won't Fix 0.98 has been EOM for some time. unless I'm mistaken the discussion suggests this is fixed in current releases. > Delay in preScannerNext > rpcTimeout causes scan to fail > -------------------------------------------------------- > > Key: HBASE-16503 > URL: https://issues.apache.org/jira/browse/HBASE-16503 > Project: HBase > Issue Type: Bug > Affects Versions: 0.98.21 > Reporter: James R. Taylor > Priority: Major > Labels: SFDC, phoenix > > In HBase 0.98, a delay in the preScannerNext coprocessor hook of greater than > the RPC timeout causes the scan to fail. This can happen in Phoenix when a > large aggregate is performed without statistics enabled, in which case the > work is done during preScannerNext. The same test works fine in HBase 1.1. > {code} > package org.apache.hadoop.hbase.client.coprocessor; > import static org.junit.Assert.assertNull; > import java.io.IOException; > import java.util.List; > import org.apache.hadoop.conf.Configuration; > import org.apache.hadoop.hbase.HBaseConfiguration; > import org.apache.hadoop.hbase.HBaseTestingUtility; > import org.apache.hadoop.hbase.HTableDescriptor; > import org.apache.hadoop.hbase.client.HConnection; > import org.apache.hadoop.hbase.client.HConnectionManager; > import org.apache.hadoop.hbase.client.HTableInterface; > import org.apache.hadoop.hbase.client.Result; > import org.apache.hadoop.hbase.client.ResultScanner; > import org.apache.hadoop.hbase.client.Scan; > import org.apache.hadoop.hbase.coprocessor.ObserverContext; > import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment; > import org.apache.hadoop.hbase.coprocessor.SimpleRegionObserver; > import org.apache.hadoop.hbase.regionserver.InternalScanner; > import org.junit.Test; > public class TestDelayPreScannerNext { > private static final long RPC_TIMEOUT = 2000; > private static final String TABLE_NAME = "foo"; > > @Test > public void testPreScannerNextDelayCausesScanToFail() throws Exception { > Configuration conf = HBaseConfiguration.create(); > conf.setLong("hbase.rpc.timeout", RPC_TIMEOUT); > HBaseTestingUtility utility = new HBaseTestingUtility(conf); > utility.startMiniCluster(); > HTableDescriptor desc = utility.createTableDescriptor(TABLE_NAME); > > desc.addCoprocessor(DelayPreScannerNextRegionObserver.class.getName()); > utility.createTable(desc, new byte[][]{}); > HConnection connection = HConnectionManager.createConnection(conf); > HTableInterface table = connection.getTable(TABLE_NAME); > ResultScanner scanner = table.getScanner(new Scan()); > assertNull(scanner.next()); > } > > public static class DelayPreScannerNextRegionObserver extends > SimpleRegionObserver { > @Override > public boolean preScannerNext(final > ObserverContext<RegionCoprocessorEnvironment> c, > final InternalScanner s, final List<Result> results, > final int limit, final boolean hasMore) throws IOException { > try { > Thread.sleep(RPC_TIMEOUT * 2); > } catch (InterruptedException e) { > Thread.currentThread().interrupt(); > throw new IOException(e); > } > return super.preScannerNext(c, s, results, limit, hasMore); > } > } > } > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)