You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "James Taylor (JIRA)" <ji...@apache.org> on 2016/08/25 15:48:22 UTC
[jira] [Commented] (HBASE-16503) Delay in preScannerNext >
rpcTimeout causes scan to fail
[ https://issues.apache.org/jira/browse/HBASE-16503?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15437105#comment-15437105 ]
James Taylor commented on HBASE-16503:
--------------------------------------
FYI, [~apurtell], [~lhofhansl].
> 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 Taylor
> 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
(v6.3.4#6332)