merlimat opened a new pull request #9787:
URL: https://github.com/apache/pulsar/pull/9787


   ### Motivation
   
   As discussed in #9764 the fact that we're potentially holding a read-lock 
while scanning through a section of the map has several implications: 
   
    1. If the process functions is taking a long time (eg: making a blocking 
request to ZK that might even timeout), the writes operations on that section 
of the map are stalled during that time.
    2. It's deadlock prone: 
       1. If a thread tries to use the map while scanning through it can 
deadlock itself
       2. If the processing operation waits for the completion of some 
operation from a different thread and that thread tries to use the same map, it 
can create a deadlock.
   
   Instead of holding the lock throughout the scan of the section, we should 
instead release the read lock before calling the processing function, going 
back into the optimistic read mode.
   
   This will not add any overhead (in terms of volatile reads) compared to the 
current implementation, but will avoid all the possible deadlock traps, since 
we're never going to be holding the lock while calling the user code.


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

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


Reply via email to