Looks like a known issue to me, I've linked related tickets in Jira: https://issues.apache.org/jira/browse/IGNITE-2417 https://issues.apache.org/jira/browse/IGNITE-3347
On Thu, Nov 24, 2016 at 12:13 AM, Denis Magda <[email protected]> wrote: > Val, > > Yeah, the code is like jungles in some places. Proposed a possible fix > inside of the ticket. > > — > Denis > > > On Nov 23, 2016, at 1:01 PM, Valentin Kulichenko < > [email protected]> wrote: > > > > Denis, > > > > CacheObjectBinaryProcessorImpl calls super and preserves the value of > > storeVal flag. It seems to me that it's then used in > > BinaryObjectImpl.deserializeValue() causing the deserialized value to be > > saved in memory. This doubles memory consumption in this scenario. > > > > I created a ticket: https://issues.apache.org/jira/browse/IGNITE-4293 > > > > -Val > > > > On Wed, Nov 23, 2016 at 12:32 PM, Denis Magda <[email protected]> wrote: > > > >> Val, > >> > >> You get confused by IgniteCacheObjectProcessorImpl.contextForCache(…) > >> method. > >> > >> When binary marshaller is enable the default processor is > >> CacheObjectBinaryProcessorImpl and when contextForCache(…) gets called > on > >> its side the processor will create CacheObjectBinaryContext which, in > its > >> turn, has binaryEnabled field that in fact controls an object > >> deserialization on a server side. > >> > >> — > >> Denis > >> > >>> On Nov 23, 2016, at 12:14 PM, Valentin Kulichenko < > >> [email protected]> wrote: > >>> > >>> Folks, > >>> > >>> It looks like we cache the deserialized value in case indexing is > enabled > >>> and a read operation happens on server side (e.g. affinity closure does > >>> get() on primary node). > >>> > >>> This must be caused by this piece of code in > >> IgniteCacheObjectProcessorImpl: > >>> > >>> boolean storeVal = ctx.config().isPeerClassLoadingEnabled() || > >>> GridQueryProcessor.isEnabled(ccfg) || > >>> !ccfg.isCopyOnRead(); > >>> > >>> This actually means that we store deserialized values in case indexing > is > >>> configured even if copyOnRead is true. My understanding is that this > is a > >>> bug and GridQueryProcessor.isEnabled(ccfg) condition should be removed > >> from > >>> there (at least for the case when binary marshaller is used). > >>> > >>> Am I missing something? > >>> > >>> -Val > >> > >> > >
