[
https://issues.apache.org/jira/browse/HADOOP-11000?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14109695#comment-14109695
]
Sangjin Lee commented on HADOOP-11000:
--------------------------------------
It's a good catch Ming. The patch looks good. If I have a minor nit, the
following code doesn't need to use if-else:
{code}
private boolean isHealthCheckFailedException(Throwable t) {
if ((t instanceof HealthCheckFailedException) ||
(t instanceof RemoteException &&
((RemoteException)t).unwrapRemoteException(
HealthCheckFailedException.class) instanceof
HealthCheckFailedException)) {
return true;
} else {
return false;
}
}
{code}
It can simply be
{code}
private boolean isHealthCheckFailedException(Throwable t) {
return ((t instanceof HealthCheckFailedException) ||
(t instanceof RemoteException &&
((RemoteException)t).unwrapRemoteException(
HealthCheckFailedException.class) instanceof
HealthCheckFailedException));
}
{code}
> HAServiceProtocol's health state is incorrectly transitioned to
> SERVICE_NOT_RESPONDING
> --------------------------------------------------------------------------------------
>
> Key: HADOOP-11000
> URL: https://issues.apache.org/jira/browse/HADOOP-11000
> Project: Hadoop Common
> Issue Type: Bug
> Reporter: Ming Ma
> Assignee: Ming Ma
> Attachments: HADOOP-11000.patch
>
>
> When HAServiceProtocol.monitorHealth throws a HealthCheckFailedException, the
> actual exception from protocol buffer RPC is a RemoteException that wraps the
> real exception. Thus the state is incorrectly transitioned to
> SERVICE_NOT_RESPONDING
> {noformat}
> HealthMonitor.java
> doHealthChecks
> try {
> status = proxy.getServiceStatus();
> proxy.monitorHealth();
> healthy = true;
> } catch (HealthCheckFailedException e) {
> .....
> enterState(State.SERVICE_UNHEALTHY);
> } catch (Throwable t) {
> .....
> enterState(State.SERVICE_NOT_RESPONDING);
> .....
> }
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.2#6252)