You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Owen Nichols (Jira)" <ji...@apache.org> on 2022/06/22 20:47:03 UTC

[jira] [Closed] (GEODE-10035) The System property condition to use "direct" ByteBuffers in P2P is wrong

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

Owen Nichols closed GEODE-10035.
--------------------------------

> The System property condition to use "direct" ByteBuffers in P2P is wrong
> -------------------------------------------------------------------------
>
>                 Key: GEODE-10035
>                 URL: https://issues.apache.org/jira/browse/GEODE-10035
>             Project: Geode
>          Issue Type: Bug
>    Affects Versions: 1.14.3
>            Reporter: John Blum
>            Assignee: Darrel Schneider
>            Priority: Minor
>              Labels: pull-request-available
>             Fix For: 1.15.0
>
>
> In the {{o.a.g.internal.net.ByteBuffer.useDirectBuffers}} class member (static) constant field ([source|https://github.com/apache/geode/blob/rel/v1.14.3/geode-core/src/main/java/org/apache/geode/internal/net/BufferPool.java#L82-L83]), which is derived from either the "{{p2p.nodirectBuffers"}} OR the "{{gemfire.BufferPool.useHeapBuffers}}" System properties, the conditional logic is incorrect!
> It should read (formatted to make it more readable):
> {code:java}
>   public static final boolean useDirectBuffers = !(
>       Boolean.getBoolean("p2p.nodirectBuffers")
>       || Boolean.getBoolean(GeodeGlossary.GEMFIRE_PREFIX+"BufferPool.useHeapBuffers")
>   );
> {code}
> Alternatively:
> {code:java}
>   public static final boolean useDirectBuffers = !Boolean.getBoolean("p2p.nodirectBuffers")
>       && !Boolean.getBoolean(GeodeGlossary.GEMFIRE_PREFIX+"BufferPool.useHeapBuffers");
> {code}
> That is, if either the "{{p2p.nodirectBuffers}}" OR the "{{gemfire.BufferPool.useHeapBuffers}}" System properties are {{true}}, then DO NOT USE direct ByteBuffers.
> The term "{{useHeapBuffers}}" implies that the buffer should be created on the JVM Heap, and not in main memory as a "direct" ByteBuffer.
> Setting the System property "{{gemfire.BufferPool.useHeapBuffers}}" to "{{true}}" would result in a direct ByteBuffer allocation as can be seen [here|https://github.com/apache/geode/blob/rel/v1.14.3/geode-core/src/main/java/org/apache/geode/internal/net/BufferPool.java#L104-L115], 
> rather than what should happen [here|https://github.com/apache/geode/blob/rel/v1.14.3/geode-core/src/main/java/org/apache/geode/internal/net/BufferPool.java#L117].
> As the condition currently stands, if the "{{p2p.nodirectBuffers}}" System property is not set at all (which results in {{Boolean.getBoolean(..)}} returning {{false}}), which negated results in the OR'd condition not even being evaluated!



--
This message was sent by Atlassian Jira
(v8.20.7#820007)