tibrewalpratik17 commented on issue #13284:
URL: https://github.com/apache/pinot/issues/13284#issuecomment-2154656272

   > This reminded me of an improvement I tried for strictReplicaGroup 
(https://github.com/apache/pinot/pull/11847) but didn't finish. As you 
mentioned in the issue description, it's a bit too rigid to skip the instance 
if any one of segments hosted on it was unavailable, as often we'd have to skip 
all instances, and reporting that a huge number of segments were unavailable 
(which was kinda misleading).
   
   Yes this is the exact issue we faced. Very well summarised! 
   
   > Basically the improvement I was trying to add was to pick an instance, 
even though it has unavailable segments and reported status of the unavailable 
segments back. The key abstraction in that PR was InstanceGroup, which caches 
the mapping from a set of instances to a set of segments on them. With replica 
group assignment, the set of instances should host the same set of segments, 
but some instances might have unavailable segments and some instance might be 
fine. The mapping info is updated whenever IS/EV gets updated. While selecting 
instances, InstanceGroup is used to quickly identify a instance.
   
   Hmm, I think choosing an instance with unavailable segments is too relaxed 
in my opinion. This approach could be perceived as data loss by customers if, 
for example, they are looking for a UUID and the segment containing that UUID 
is unavailable. Although we return a list of unavailable segments, there's no 
observability that the unavailable segment(s) contains the UUID or not, which 
can lead to further confusion. It would be better to route to the available 
segment in the other replica, what do you think? 
   However, if we handle this at the segment level, the query fanout might 
increase significantly. Therefore, we could maintain the granularity at the 
partition level. Alternatively, we could introduce another segment-level 
routing strategy. Note: The goal should be to route to a single replica group 
wherever possible for optimal performance.
   
   > The InstanceGroup in the PR simply tracks the segments in a Set, but we 
can group segments further by their partitions, then we may do server selection 
based on Instance-Partition as proposed here.
   
   Can we keep the `InstanceGroup` mapping and the `SegmentPartition` mapping 
separate? When reassigning instances, there's no need to update the 
segment-to-partition information. Updating the segment-partition cache is only 
necessary during segment deletion or addition, so it's best to keep them 
separate. This approach allows us to easily reuse these mappings independently 
based on different routing strategies.


-- 
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: commits-unsubscr...@pinot.apache.org

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


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

Reply via email to