HBASE-10452 Fix potential bugs in exception handlers (Ding Yuan)

git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1567979 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Zhihong Yu 2014-02-13 17:26:25 +00:00
parent 0bafd16057
commit f1ad5cb938
9 changed files with 61 additions and 19 deletions

View File

@ -429,11 +429,13 @@ public class ClientScanner extends AbstractClientScanner {
callable.setClose(); callable.setClose();
try { try {
this.caller.callWithRetries(callable); this.caller.callWithRetries(callable);
} catch (UnknownScannerException e) {
// We used to catch this error, interpret, and rethrow. However, we
// have since decided that it's not nice for a scanner's close to
// throw exceptions. Chances are it was just due to lease time out.
} catch (IOException e) { } catch (IOException e) {
// We used to catch this error, interpret, and rethrow. However, we /* An exception other than UnknownScanner is unexpected. */
// have since decided that it's not nice for a scanner's close to LOG.warn("scanner failed to close. Exception follows: " + e);
// throw exceptions. Chances are it was just an UnknownScanner
// exception due to lease time out.
} }
callable = null; callable = null;
} }

View File

@ -29,6 +29,8 @@ import java.util.Set;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.TreeSet; import java.util.TreeSet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability; import org.apache.hadoop.classification.InterfaceStability;
import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.HConstants;
@ -63,6 +65,7 @@ import org.apache.hadoop.hbase.util.Bytes;
@InterfaceStability.Stable @InterfaceStability.Stable
public class Get extends Query public class Get extends Query
implements Row, Comparable<Row> { implements Row, Comparable<Row> {
private static final Log LOG = LogFactory.getLog(Get.class);
private byte [] row = null; private byte [] row = null;
private int maxVersions = 1; private int maxVersions = 1;
@ -156,11 +159,14 @@ public class Get extends Query
* @param timestamp version timestamp * @param timestamp version timestamp
* @return this for invocation chaining * @return this for invocation chaining
*/ */
public Get setTimeStamp(long timestamp) { public Get setTimeStamp(long timestamp)
throws IOException {
try { try {
tr = new TimeRange(timestamp, timestamp+1); tr = new TimeRange(timestamp, timestamp+1);
} catch(IOException e) { } catch(IOException e) {
// Will never happen // This should never happen, unless integer overflow or something extremely wrong...
LOG.error("TimeRange failed, likely caused by integer overflow. ", e);
throw e;
} }
return this; return this;
} }

View File

@ -19,6 +19,8 @@
package org.apache.hadoop.hbase.client; package org.apache.hadoop.hbase.client;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability; import org.apache.hadoop.classification.InterfaceStability;
import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.HConstants;
@ -82,6 +84,8 @@ import java.util.TreeSet;
@InterfaceAudience.Public @InterfaceAudience.Public
@InterfaceStability.Stable @InterfaceStability.Stable
public class Scan extends Query { public class Scan extends Query {
private static final Log LOG = LogFactory.getLog(Scan.class);
private static final String RAW_ATTR = "_raw_"; private static final String RAW_ATTR = "_raw_";
private static final String ISOLATION_LEVEL = "_isolationlevel_"; private static final String ISOLATION_LEVEL = "_isolationlevel_";
@ -297,11 +301,14 @@ public class Scan extends Query {
* @see #setMaxVersions(int) * @see #setMaxVersions(int)
* @return this * @return this
*/ */
public Scan setTimeStamp(long timestamp) { public Scan setTimeStamp(long timestamp)
throws IOException {
try { try {
tr = new TimeRange(timestamp, timestamp+1); tr = new TimeRange(timestamp, timestamp+1);
} catch(IOException e) { } catch(IOException e) {
// Will never happen // This should never happen, unless integer overflow or something extremely wrong...
LOG.error("TimeRange failed, likely caused by integer overflow. ", e);
throw e;
} }
return this; return this;
} }

View File

@ -145,7 +145,12 @@ public class HBaseConfiguration extends Configuration {
if (Class.forName("org.apache.hadoop.conf.ConfServlet") != null) { if (Class.forName("org.apache.hadoop.conf.ConfServlet") != null) {
isShowConf = true; isShowConf = true;
} }
} catch (Exception e) { } catch (LinkageError e) {
// should we handle it more aggressively in addition to log the error?
LOG.warn("Error thrown: ", e);
} catch (ClassNotFoundException ce) {
LOG.debug("ClassNotFound: ConfServlet");
// ignore
} }
return isShowConf; return isShowConf;
} }

View File

@ -207,7 +207,8 @@ public class JVM {
if (input != null){ if (input != null){
try { try {
input.close(); input.close();
} catch (IOException ignored) { } catch (IOException e) {
LOG.warn("Not able to close the InputStream", e);
} }
} }
} }

View File

@ -62,7 +62,11 @@ public class KeyPrefixRegionSplitPolicy extends IncreasingToUpperBoundRegionSpli
try { try {
prefixLength = Integer.parseInt(prefixLengthString); prefixLength = Integer.parseInt(prefixLengthString);
} catch (NumberFormatException nfe) { } catch (NumberFormatException nfe) {
// ignore /* Differentiate NumberFormatException from an invalid value range reported below. */
LOG.error("Number format exception when parsing " + PREFIX_LENGTH_KEY + " for table "
+ region.getTableDesc().getTableName() + ":"
+ prefixLengthString + ". " + nfe);
return;
} }
if (prefixLength <= 0) { if (prefixLength <= 0) {
LOG.error("Invalid value for " + PREFIX_LENGTH_KEY + " for table " LOG.error("Invalid value for " + PREFIX_LENGTH_KEY + " for table "

View File

@ -131,8 +131,10 @@ class RegionMergeRequest implements Runnable {
try { try {
this.tableLock.release(); this.tableLock.release();
} catch (IOException ex) { } catch (IOException ex) {
LOG.warn("Could not release the table lock", ex); LOG.error("Could not release the table lock (something is really wrong). "
//TODO: if we get here, and not abort RS, this lock will never be released + "Aborting this server to avoid holding the lock forever.");
this.server.abort("Abort; we got an error when releasing the table lock "
+ "on " + region_a.getRegionNameAsString());
} }
} }
} }

View File

@ -132,8 +132,10 @@ class SplitRequest implements Runnable {
try { try {
this.tableLock.release(); this.tableLock.release();
} catch (IOException ex) { } catch (IOException ex) {
LOG.warn("Could not release the table lock", ex); LOG.error("Could not release the table lock (something is really wrong). "
//TODO: if we get here, and not abort RS, this lock will never be released + "Aborting this server to avoid holding the lock forever.");
this.server.abort("Abort; we got an error when releasing the table lock "
+ "on " + parent.getRegionNameAsString());
} }
} }
} }

View File

@ -255,8 +255,15 @@ public class SequenceFileLogReader extends ReaderBase {
Field fEnd = SequenceFile.Reader.class.getDeclaredField("end"); Field fEnd = SequenceFile.Reader.class.getDeclaredField("end");
fEnd.setAccessible(true); fEnd.setAccessible(true);
end = fEnd.getLong(this.reader); end = fEnd.getLong(this.reader);
} catch(Exception e) { /* reflection fail. keep going */ } } catch(NoSuchFieldException nfe) {
/* reflection failure, keep going */
} catch(IllegalAccessException iae) {
/* reflection failure, keep going */
} catch(Exception e) {
/* All other cases. Should we handle it more aggressively? */
LOG.warn("Unexpected exception when accessing the end field", e);
}
String msg = (this.path == null? "": this.path.toString()) + String msg = (this.path == null? "": this.path.toString()) +
", entryStart=" + entryStart + ", pos=" + pos + ", entryStart=" + entryStart + ", pos=" + pos +
((end == Long.MAX_VALUE) ? "" : ", end=" + end) + ((end == Long.MAX_VALUE) ? "" : ", end=" + end) +
@ -268,8 +275,14 @@ public class SequenceFileLogReader extends ReaderBase {
.getConstructor(String.class) .getConstructor(String.class)
.newInstance(msg) .newInstance(msg)
.initCause(ioe); .initCause(ioe);
} catch(Exception e) { /* reflection fail. keep going */ } } catch(NoSuchMethodException nfe) {
/* reflection failure, keep going */
} catch(IllegalAccessException iae) {
/* reflection failure, keep going */
} catch(Exception e) {
/* All other cases. Should we handle it more aggressively? */
LOG.warn("Unexpected exception when accessing the end field", e);
}
return ioe; return ioe;
} }
} }