linxiaokun528 opened a new pull request, #4577:
URL: https://github.com/apache/solr/pull/4577

   
   <!--
   _(If you are a project committer then you may remove some/all of the 
following template.)_
   
   Before creating a pull request, please file an issue in the ASF Jira system 
for Solr:
   
   * https://issues.apache.org/jira/projects/SOLR
   
   For something minor (i.e. that wouldn't be worth putting in release notes), 
you can skip JIRA.
   To create a Jira issue, you will need to create an account there first.
   
   The title of the PR should reference the Jira issue number in the form:
   
   * SOLR-####: <short description of problem or changes>
   
   SOLR must be fully capitalized. A short description helps people scanning 
pull requests for items they can work on.
   
   Properly referencing the issue in the title ensures that Jira is correctly 
updated with code review comments and commits. -->
   
   
   # Description
   
   Curator's RECONNECTED event is different from the previous RECONNECTED 
event. Before Solr10, the OnReconnect is only triggered after a reconnection 
from a session expiration. Check the following
   
   
https://github.com/apache/solr/blob/fdb5314279657f7895a90123436d834e81ea3157/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ConnectionManager.java#L165
 
https://github.com/apache/solr/blob/fdb5314279657f7895a90123436d834e81ea3157/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ConnectionManager.java#L199
   
   But Curator's RECONNECTED event is triggered every time a Solr node is 
disconnected from a ZooKeeper instance and reconnected to another ZooKeeper 
instance.
   
   Therefore, currently ZkController.onReconnect is invoked every time a Solr 
node reconnects to a ZooKeeper instance without a session expiration, which is 
a huge overhead, especially when we need to rolling-restart a ZooKeeper 
Cluster. It can take more than 10 minutes for a small Solr cluster to level out.
   
   Similiarly, now ZkController.onDisconnect is triggered just after a 
disconnection from a Zookeeper instance. It should only be triggered after a 
session expiration.
   
   # Solution
   
   I created a SolrCuratorEvent class as a Bridge. Now it only has two event 
types: EXPIRED_RECONNECTION and SESSION_EXPIRATION.
   EXPIRED_RECONNECTION: Will only be triggered when Solr reconnects Zookeeper 
from a session expiration
   SESSION_EXPIRATION: Will be triggered when a session expiration happens (The 
same to Curator's LOST event.)
   
   We should use SolrCuratorEvent instead of Curator's event and we can add 
more types into it whenever needed. 
   
   I also renamed some methods to make them clearer:
   ZkController.onReconnect -> ZkController.onExpiredReconnection 
   ZkController.onDisconnect -> ZkController.onSessionExpiration
   
   # Tests
   
   In ZkControllerTest.java, 
   
   1. I added a method `testZkDisconnectionEvents` to make sure when there is a 
session expiration, ZkController.onSessionExpiration is triggered.
   2. I added a method `testZkReconnectionEvents` to make sure when Solr 
reconnects to ZooKeeper from a session expiration, 
ZkController.onExpiredReconnection is triggered.
   
   
   # Checklist
   
   Please review the following and check all that apply:
   
   - [x] I have reviewed the guidelines for [How to 
Contribute](https://github.com/apache/solr/blob/main/CONTRIBUTING.md) and my 
code conforms to the standards described there to the best of my ability.
   - [x] I have created a Jira issue and added the issue ID to my pull request 
title.
   - [x] I have given Solr maintainers 
[access](https://help.github.com/en/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork)
 to contribute to my PR branch. (optional but recommended, not available for 
branches on forks living under an organisation)
   - [x] I have developed this patch against the `main` branch.
   - [x] I have run `./gradlew check`.
   - [x] I have added tests for my changes.
   - [ ] I have added documentation for the [Reference 
Guide](https://github.com/apache/solr/tree/main/solr/solr-ref-guide)
   - [ ] I have added a [changelog 
entry](https://github.com/apache/solr/blob/main/dev-docs/changelog.adoc) for my 
change
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to