[ 
https://issues.apache.org/jira/browse/GEODE-2727?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexander Murmann updated GEODE-2727:
-------------------------------------
    Labels: region_interface storage_2  (was: region_interface starter++ 
storage_2)

> optimize new 1.8 ConcurrentMap default methods on Region
> --------------------------------------------------------
>
>                 Key: GEODE-2727
>                 URL: https://issues.apache.org/jira/browse/GEODE-2727
>             Project: Geode
>          Issue Type: Improvement
>          Components: regions
>            Reporter: Darrel Schneider
>            Priority: Major
>              Labels: region_interface, storage_2
>
> In JDK 1.8 ConcurrentMap added the following default methods to the interface:
> getOrDefault
>  computeIfAbsent
>  computeIfPresent
>  compute
>  merge
>  foreach
>  replaceAll
> All of the default implementations of these methods have issues with get 
> returning null when the key actually exists. So they do not support invalid 
> region entries.
>  The other problem with all of them (except getOrDefault) is that they will 
> make multiple round trips when done from a proxy. In a distributed 
> environment we should implement these to send the lambda to the primary so 
> that the entire operation can be done with one message and while the 
> RegionEntry is locked.
>  This would require that the lambda parameter by serializable which would be 
> consistent with what we do for other parameters to Region methods (for 
> example "put").
>  From a performance point of view "foreach" and "replaceAll" are the worst 
> since they bring back to whoever is executing the method all the keys and 
> values from the entire cluster.
>  It is also worth considering how the operations behave in a geode 
> transaction.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to