Vladimir Ozerov created IGNITE-6736:
---------------------------------------
Summary: Java 9: rework GridCacheMapEntry synchronization logic to
avoid Unsafe.monitor* methods
Key: IGNITE-6736
URL: https://issues.apache.org/jira/browse/IGNITE-6736
Project: Ignite
Issue Type: Task
Security Level: Public (Viewable by anyone)
Reporter: Vladimir Ozerov
Fix For: 2.4
{{GridCacheMapEntry}} class rely on {{synchronized}} on itself heavily. In
{{ATOMIC}} caches we lock multiple entries at once using
{{Unsafe.monitorEnter/Exit}} methods. Unfortunately these methods were removed
in Java 9. Recursion is not an option, as it would cause stack overflow for
{{putAll}} operations with multiple entries.
Possible fixes:
1) Rework {{synchronized}} to {{ReentrantLock}}. Easy, but may cause additional
memory pressure.
2) Have different implementations for Java 8 ({{synchronzied}}) and Java 9
({{ReentrantLock}}) - much more complex solution, because we will require
separate module for Java 8 and Java 9.
3) Rework {{ATOMIC}} caches, so that {{putAll}} operation updates entries
one-by-one. As a side effect it will eliminate deadlocks.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)