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)