dsmiley commented on code in PR #3305:
URL: https://github.com/apache/solr/pull/3305#discussion_r2025963993


##########
solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkStateReader.java:
##########
@@ -865,6 +871,76 @@ public void removeLiveNodesListener(LiveNodesListener 
listener) {
     liveNodesListeners.remove(listener);
   }
 
+  /**
+   * Returns the lowest Solr version among all live nodes in the cluster.
+   *
+   * @return the lowest Solr version as a String, or null if no version is 
found
+   * @throws KeeperException if a ZooKeeper error occurs
+   * @throws InterruptedException if the thread is interrupted
+   */
+  public String getLowestSolrVersion() throws KeeperException, 
InterruptedException {

Review Comment:
   I personally hate it when a "get" method does network access; it's so subtle 
-- the caller would have no clue except maybe the exceptions that can be thrown 
as seen here.  Using a different verb like "fetch" would be suitable.  But 
actually what I expected/hoped was that we'd cache the live node metadata in 
ZkStateReader from live node watching.  I could imagine this might be more 
scope than you had in mind; maybe this here is fine for now.



##########
solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkStateReader.java:
##########
@@ -865,6 +871,76 @@ public void removeLiveNodesListener(LiveNodesListener 
listener) {
     liveNodesListeners.remove(listener);
   }
 
+  /**
+   * Returns the lowest Solr version among all live nodes in the cluster.
+   *
+   * @return the lowest Solr version as a String, or null if no version is 
found
+   * @throws KeeperException if a ZooKeeper error occurs
+   * @throws InterruptedException if the thread is interrupted
+   */
+  public String getLowestSolrVersion() throws KeeperException, 
InterruptedException {
+    List<String> liveNodeNames = zkClient.getChildren(LIVE_NODES_ZKNODE, null, 
true);
+    String lowestVersion = null;
+
+    for (String nodeName : liveNodeNames) {
+      String path = LIVE_NODES_ZKNODE + "/" + nodeName;
+      byte[] data = zkClient.getData(path, null, null, true);
+      if (data == null || data.length == 0) {
+        continue;

Review Comment:
   if there's no data, this means it's a Solr 9.8 node (or earlier).  This is 
important!



##########
solr/core/src/java/org/apache/solr/cloud/ZkController.java:
##########
@@ -1183,6 +1191,18 @@ private void createEphemeralLiveNode() throws 
KeeperException, InterruptedExcept
     zkClient.multi(ops);
   }
 
+  private byte[] buildLiveNodeData() {

Review Comment:
   wouldn't this belong in ZkStateReader, which is primarily responsible for 
reading/writing ZK?



-- 
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: issues-unsubscr...@solr.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org
For additional commands, e-mail: issues-h...@solr.apache.org

Reply via email to