You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Ted Yu (JIRA)" <ji...@apache.org> on 2016/04/06 23:15:25 UTC
[jira] [Commented] (HBASE-15292) Refined ZooKeeperWatcher to
prevent ZooKeeper's callback while construction
[ https://issues.apache.org/jira/browse/HBASE-15292?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15229126#comment-15229126 ]
Ted Yu commented on HBASE-15292:
--------------------------------
{code}
+class InstancePending<T> {
{code}
Add javadoc and audience annotation to the class.
{code}
+ if (interrupted) {
+ Thread.currentThread().interrupt();
{code}
Call to Thread.currentThread().interrupt() can be performed inside the catch block - this would save variable interrupted.
{code}
+ instanceHolder = this.instanceHolder;
+ assert instanceHolder != null;
{code}
One way of calming findbugs is to use (instanceHolder != null) as condition for the while loop.
{code}
+class PendingWatcher implements Watcher {
{code}
Add javadoc and audience annotation to the class.
Actually can PendingWatcher be omitted ?
InstancePending is generic and the two methods PendingWatcher overrides are one-liner.
After the change, "hbase.zookeeper.watcher.sync.connected.wait" is dropped.
Should the loop in InstancePending#get() be passed a timeout so that the above config is still respected ?
> Refined ZooKeeperWatcher to prevent ZooKeeper's callback while construction
> ---------------------------------------------------------------------------
>
> Key: HBASE-15292
> URL: https://issues.apache.org/jira/browse/HBASE-15292
> Project: HBase
> Issue Type: Bug
> Components: Zookeeper
> Reporter: Hiroshi Ikeda
> Assignee: Hiroshi Ikeda
> Priority: Minor
> Attachments: HBASE-15292-V2.patch, HBASE-15292-V3.patch, HBASE-15292-V4.patch, HBASE-15292.patch
>
>
> The existing code is not just messy but also contains a subtle bug of visibility due to missing synchronization between threads.
> The root of the evil is that ZooKeeper uses a silly anti-pattern, starting a thread within its constructor, and in practice all the developers are not allowed to use ZooKeeper correctly without tedious code.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)