You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Gideon (JIRA)" <ji...@apache.org> on 2019/02/14 03:44:00 UTC

[jira] [Commented] (GEODE-6403) computeIfAbsent is blocking and causing queries to be synchronized

    [ https://issues.apache.org/jira/browse/GEODE-6403?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16767858#comment-16767858 ] 

Gideon commented on GEODE-6403:
-------------------------------

Note that we discovered the contention with the following query pattern: "SELECT * FROM <region> WHERE <indexed top-level attribute> = <constant value>" is indexed predicate .

> computeIfAbsent is blocking and causing queries to be synchronized
> ------------------------------------------------------------------
>
>                 Key: GEODE-6403
>                 URL: https://issues.apache.org/jira/browse/GEODE-6403
>             Project: Geode
>          Issue Type: Bug
>          Components: querying
>            Reporter: Jason Huynh
>            Assignee: Barry Oglesby
>            Priority: Major
>
> Concurrent queries can be blocked reading attributes/fields/methods from an object.  The implementation to extract the attribute uses a concurrent hash map as a local cache.  computeIfAbsent is used on the local cache and was expected to return if the key was already present (without blocking).  Instead it looks like this is not how it behaves pre java 9.  See [https://bugs.openjdk.java.net/browse/JDK-8161372]  
>  
> "Function Execution Processor4" #1057 daemon prio=10 os_prio=31 tid=0x00007fdf930cb800 nid=0x11837 runnable [0x000070001238a000]
>  java.lang.Thread.State: RUNNABLE
>  at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1674)
>  - locked <0x00000007250d1ff8> (a java.util.concurrent.ConcurrentHashMap$Node)
>  at org.apache.geode.cache.query.internal.AttributeDescriptor.getReadMember(AttributeDescriptor.java:149)
>  at org.apache.geode.cache.query.internal.AttributeDescriptor.readReflection(AttributeDescriptor.java:97)
>  at org.apache.geode.cache.query.internal.AttributeDescriptor.read(AttributeDescriptor.java:83)
>  at org.apache.geode.cache.query.internal.PathUtils.evaluateAttribute(PathUtils.java:77)
>  at org.apache.geode.cache.query.internal.CompiledPath.evaluate(CompiledPath.java:147)
>  at org.apache.geode.cache.query.internal.CompiledID.evaluate(CompiledID.java:80)
>  at org.apache.geode.cache.query.internal.CompiledComparison.evaluate(CompiledComparison.java:82)
>  at org.apache.geode.cache.query.internal.QueryUtils.applyCondition(QueryUtils.java:429)
>  at org.apache.geode.cache.query.internal.index.CompactRangeIndex.addToResultsFromEntries(CompactRangeIndex.java:831)
>  at org.apache.geode.cache.query.internal.index.CompactRangeIndex.addToResultsFromEntries(CompactRangeIndex.java:711)



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