HBASE-81 When a scanner lease times out, throw a more "user friendly" exception

git-svn-id: https://svn.apache.org/repos/asf/hadoop/hbase/trunk@709852 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jim Kellerman 2008-11-02 08:36:37 +00:00
parent 5418547132
commit 7a5768ca85
3 changed files with 68 additions and 8 deletions

View File

@ -92,7 +92,8 @@ Release 0.19.0 - Unreleased
0.19.0 RC
HBASE-785 Remove InfoServer, use HADOOP-3824 StatusHttpServer
instead (requires hadoop 0.19)
HBASE-81 When a scanner lease times out, throw a more "user friendly" exception
NEW FEATURES
HBASE-875 Use MurmurHash instead of JenkinsHash [in bloomfilters]
(Andrzej Bialecki via Stack)

View File

@ -36,6 +36,7 @@ import org.apache.hadoop.hbase.HRegionLocation;
import org.apache.hadoop.hbase.HServerAddress;
import org.apache.hadoop.hbase.HStoreKey;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.UnknownScannerException;
import org.apache.hadoop.hbase.client.MetaScanner.MetaScannerVisitor;
import org.apache.hadoop.hbase.filter.RowFilterInterface;
import org.apache.hadoop.hbase.filter.StopRowFilter;
@ -53,12 +54,13 @@ import org.apache.hadoop.hbase.util.Writables;
public class HTable {
private final HConnection connection;
private final byte [] tableName;
private HBaseConfiguration configuration;
protected final int scannerTimeout;
private volatile HBaseConfiguration configuration;
private ArrayList<BatchUpdate> writeBuffer;
private long writeBufferSize;
private boolean autoFlush;
private long currentWriteBufferSize;
private int scannerCaching;
protected int scannerCaching;
/**
* Creates an object to access a HBase table
@ -104,8 +106,10 @@ public class HTable {
public HTable(HBaseConfiguration conf, final byte [] tableName)
throws IOException {
this.connection = HConnectionManager.getConnection(conf);
this.configuration = conf;
this.tableName = tableName;
this.scannerTimeout =
conf.getInt("hbase.regionserver.lease.period", 60 * 1000);
this.configuration = conf;
this.connection.locateRegion(tableName, HConstants.EMPTY_START_ROW);
this.writeBuffer = new ArrayList<BatchUpdate>();
this.writeBufferSize =
@ -1037,7 +1041,8 @@ public class HTable {
/**
* Release held resources
*
*
* @throws IOException
*/
public void close() throws IOException{
flushCommits();
@ -1154,8 +1159,10 @@ public class HTable {
private HRegionInfo currentRegion = null;
private ScannerCallable callable = null;
protected RowFilterInterface filter;
final private LinkedList<RowResult> cache = new LinkedList<RowResult>();
final private int scannerCaching = HTable.this.scannerCaching;
private final LinkedList<RowResult> cache = new LinkedList<RowResult>();
@SuppressWarnings("hiding")
private final int scannerCaching = HTable.this.scannerCaching;
private long lastNext;
protected ClientScanner(final byte[][] columns, final byte [] startRow,
final long timestamp, final RowFilterInterface filter) {
@ -1175,6 +1182,7 @@ public class HTable {
if (filter != null) {
filter.validate(columns);
}
this.lastNext = System.currentTimeMillis();
}
//TODO: change visibility to protected
@ -1280,7 +1288,19 @@ public class HTable {
// with a countdown in nextScanner
callable.setCaching(this.scannerCaching);
do {
values = getConnection().getRegionServerWithRetries(callable);
try {
values = getConnection().getRegionServerWithRetries(callable);
} catch (IOException e) {
if (e instanceof UnknownScannerException &&
lastNext + scannerTimeout < System.currentTimeMillis()) {
ScannerTimeoutException ex = new ScannerTimeoutException();
ex.initCause(e);
throw ex;
}
throw e;
}
lastNext = System.currentTimeMillis();
if (values != null && values.length > 0) {
for (RowResult rs : values) {
cache.add(rs);

View File

@ -0,0 +1,39 @@
/**
* Copyright 2008 The Apache Software Foundation
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.hbase.client;
import org.apache.hadoop.hbase.DoNotRetryIOException;
/**
* Thrown when a scanner has timed out.
*/
@SuppressWarnings("serial")
public class ScannerTimeoutException extends DoNotRetryIOException {
/** default constructor */
ScannerTimeoutException() {
super();
}
/** @param s */
ScannerTimeoutException(String s) {
super(s);
}
}