You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "Sean Busbey (Jira)" <ji...@apache.org> on 2020/02/17 05:34:00 UTC
[jira] [Resolved] (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: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)