You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@bookkeeper.apache.org by GitBox <gi...@apache.org> on 2018/07/26 17:17:21 UTC

[GitHub] ivankelly opened a new pull request #1569: Replace guava multimap in PCBC with custom impl

ivankelly opened a new pull request #1569: Replace guava multimap in PCBC with custom impl
URL: https://github.com/apache/bookkeeper/pull/1569
 
 
   For a long time PerChannelBookieClient has used guava
   LinkedListMultiMap to store conflicting V2 completion keys and
   values. This is problematic though. Completion keys are pooled
   objects. When a key-value pair is stored in a LinkedListMultiMap, if
   it is the first value for that key, a collection is created for the
   values, and added to a top-level map using the key, and then the key
   and the value are added to the collection. When a second value is
   added for the same key, the key and value are simply added to the
   collection. The problem occurs when the first key is removed. PBCB
   will recycle the key object, but this object is still being used in
   the multimap in the top-level map. This causes all sorts of fun like
   NullPointerException and IllegalStateException.
   
   Because of this, this patch introduces a very simple multimap
   implementation that only stores the key one time (in the collection)
   and uses the hashCode of the key to separate the collections into
   buckets. It's pretty inefficient, but this code it only hit in the
   rare case where a client is trying to read or write the same entry
   from the same ledger more than once at the same time.
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services