[
https://issues.apache.org/jira/browse/SOLR-13491?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Gus Heck updated SOLR-13491:
----------------------------
Attachment: SOLR-13491.patch
> SolrZkClient can register the same watch twice.
> -----------------------------------------------
>
> Key: SOLR-13491
> URL: https://issues.apache.org/jira/browse/SOLR-13491
> Project: Solr
> Issue Type: Bug
> Security Level: Public(Default Security Level. Issues are Public)
> Components: SolrCloud
> Affects Versions: 8.0
> Reporter: Gus Heck
> Priority: Major
> Attachments: SOLR-13491.patch
>
>
> While working on SOLR-13420 and related tickets I noticed that we presently
> use the wrapWatch() method to wrap all zookeeper watches. This allows the
> watch to be processed asynchronously by an executor which is good, but it
> subtly changes the way zookeeper behaves. Normally zookeeper keeps a
> Map<String,Set<Watch>> that ensures that if the same watch is registered
> twice it's only notified once. However, our wrapper breaks this because now,
> if the same watch is added twice each one gets it's own wrapper with default
> Object.equals() and thus the two wrapped versions of the Watch aren not
> .equals() and may co-exist in the Set<Watch>
> I do not know of any current cases for which this would cause a problem, but
> changes I am contemplating for SOLR-13375 are likely to hit this case and at
> a minimum create wasted re-notifications of the same event and excess watch
> load in Zk.
> Moving the anonymous class wrapping to an explicit inner class and writing
> hashcode/equals carefully to act as a pass through such that any to wrappers
> with the same watch object are .equals() should fix this.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]