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 > <valentin.kuliche...@gmail.com> 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 <dma...@apache.org> 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 < >> valentin.kuliche...@gmail.com> 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 >> >>