patsonluk commented on code in PR #1242:
URL: https://github.com/apache/solr/pull/1242#discussion_r1054663494


##########
solr/solrj/src/java/org/apache/solr/common/cloud/ClusterState.java:
##########
@@ -261,9 +259,10 @@ private static DocCollection collectionFromObjects(
       if (log.isDebugEnabled()) {
         log.debug("a collection {} has per-replica state", name);
       }
-      // this collection has replica states stored outside
-      ReplicaStatesProvider rsp = REPLICASTATES_PROVIDER.get();
-      if (rsp instanceof StatesProvider) ((StatesProvider) 
rsp).isPerReplicaState = true;
+    } else {
+      // prior to this call, PRS provider is set. We should unset it before
+      // deserializing the replicas and slices
+      DocCollection.clearReplicaStateProvider();

Review Comment:
   To my understand this is required as otherwise the Provider might interfere 
and overrides the input values here?
   
   I agree that using ThreadLocals could avoid modification of method 
signatures as you pointed out, but I also share similar concern as @hiteshk25 
that it's a bit hard to track code flow with ThreadLocal as it requires 
"internal knowledge" of the code in order to know where things get 
added/modified. (since the method signature/contract no longer suggest the 
"full input", and we might start doing fetching at places that used to be only 
assigning fields locally etc)
   
   This invocation of `clearReplicateStateProvider` could be one of the places 
that could be hard for devs that are not familiar with the ThreadLocal to 
understand.
   
   I do understand the goal of this PR is NOT the removal of threadlocal usage 
😊 , it would be nice though to consider other designs as a replacement of 
Threadlocal (in the future!). That could include bigger refactoring 
(subclassing ClusterState that includes PRS, or adding overloading method etc). 
   
   For the moment, more comments like these to explain the rational could be 
very helpful (which this comment has already done a pretty good job, but 
perhaps it could also mention how the threadlocal PRS provider could override 
the values if not cleared ?)  



-- 
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