[
https://issues.apache.org/jira/browse/HBASE-10497?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13897708#comment-13897708
]
Nicolas Liochon commented on HBASE-10497:
-----------------------------------------
I'm not sure of this one.
{code}
+++
hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSyncUp.java
(working copy)
@@ -111,6 +111,7 @@
}
} catch (InterruptedException e) {
System.err.println("didn't wait long enough:" + e);
+ Thread.currentThread().interrupt();
return (-1);
}
{code}
Because we took care of the interruption already (may be wrongly however), so
the thread is not interrupted any more: the -1 means: we stop.
It's the same for the one with the split worker likely.
This one is likely wrong:
{code}
@@ -185,6 +185,8 @@
try {
Thread.sleep(100);
} catch (InterruptedException ignored) {
+ LOG.warn("Interrupted while sleeping");
+ Thread.currentThread().interrupt();
}
if (System.currentTimeMillis() > startTime + 30000) {
throw new RuntimeException("Master not active after 30 seconds");
{code}
As it's inside a loop, we're likely to loop again, then the sleep will be
interrupted immediately as we restored the interruption status, then we will
log again => we will flood the logs.
I haven't checked the whole patch, but inside a loop you can't simply restore
the status, you need to take a decision (stop the loop) or store the
interruption to restore the status later. When we can, it's better to take care
of the interruption explicitly by stopping our process and/or rethrowing an
exception to the caller. In the case above, may be be we should throw a runtime
exception, as in "Master not active after 30 seconds"?
See as well ExceptionUtils (it's new).
> Add standard handling for swallowed InterruptedException thrown by
> Thread.sleep under HBase-Client/HBase-Server folders systematically
> --------------------------------------------------------------------------------------------------------------------------------------
>
> Key: HBASE-10497
> URL: https://issues.apache.org/jira/browse/HBASE-10497
> Project: HBase
> Issue Type: Improvement
> Components: Client, regionserver
> Reporter: Feng Honghua
> Assignee: Feng Honghua
> Priority: Minor
> Attachments: HBASE-10497-trunk_v1.patch
>
>
> There are many places where InterruptedException thrown by Thread.sleep are
> swallowed silently (which are neither declared in the caller method's throws
> clause nor rethrown immediately) under HBase-Client/HBase-Server folders.
> It'd be better to add standard 'log and call currentThread.interrupt' for
> such cases.
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)