[ https://issues.apache.org/jira/browse/IGNITE-13563?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17212843#comment-17212843 ]
Ignite TC Bot commented on IGNITE-13563: ---------------------------------------- {panel:title=Branch: [pull/8346/head] Base: [master] : Possible Blockers (20)|borderStyle=dashed|borderColor=#ccc|titleBGColor=#F7D6C1} {color:#d04437}PDS 1{color} [[tests 0 Exit Code |https://ci.ignite.apache.org/viewLog.html?buildId=5661143]] {color:#d04437}MVCC Queries{color} [[tests 0 TIMEOUT , Exit Code |https://ci.ignite.apache.org/viewLog.html?buildId=5661111]] {color:#d04437}Basic 1{color} [[tests 0 Exit Code |https://ci.ignite.apache.org/viewLog.html?buildId=5661106]] {color:#d04437}Platform C++ CMake (Win x64 / Release){color} [[tests 0 BuildFailureOnMessage |https://ci.ignite.apache.org/viewLog.html?buildId=5661182]] {color:#d04437}Cache (Full API Multi JVM){color} [[tests 16|https://ci.ignite.apache.org/viewLog.html?buildId=5661121]] * org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCacheAtomicNearOnlyMultiJvmP2PDisabledFullApiSelfTest. - History for base branch is absent. * org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCacheAtomicClientOnlyMultiJvmP2PDisabledFullApiSelfTest. - History for base branch is absent. * org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCacheAtomicNearOnlyMultiJvmFullApiSelfTest. - History for base branch is absent. * org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCacheReplicatedNearOnlyMultiJvmFullApiSelfTest. - History for base branch is absent. * org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCacheNearOnlyMultiJvmP2PDisabledFullApiSelfTest. - History for base branch is absent. * org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCachePartitionedOnheapMultiJvmFullApiSelfTest. - History for base branch is absent. * org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCachePartitionedNearDisabledAtomicOnheapMultiJvmFullApiSelfTest. - History for base branch is absent. * org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCachePartitionedNearDisabledOnheapMultiJvmFullApiSelfTest. - History for base branch is absent. * org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCachePartitionedMultiJvmFullApiSelfTest. - History for base branch is absent. * org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCacheReplicatedMultiJvmFullApiSelfTest. - History for base branch is absent. * org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCacheReplicatedMultiJvmP2PDisabledFullApiSelfTest. - History for base branch is absent. ... and 5 tests blockers {panel} {panel:title=Branch: [pull/8346/head] Base: [master] : New Tests (22)|borderStyle=dashed|borderColor=#ccc|titleBGColor=#F7D6C1} {color:#00008b}Platform .NET (Core Linux){color} [[tests 3|https://ci.ignite.apache.org/viewLog.html?buildId=5661148]] * {color:#013220}dll: BinarySelfTest.TestBinaryField - PASSED{color} * {color:#013220}dll: BinarySelfTestFullFooter.TestBinaryField - PASSED{color} * {color:#013220}dll: BinarySelfTestSimpleName.TestBinaryField - PASSED{color} {color:#00008b}Platform .NET{color} [[tests 3|https://ci.ignite.apache.org/viewLog.html?buildId=5661147]] * {color:#013220}exe: BinarySelfTest.TestBinaryField - PASSED{color} * {color:#013220}exe: BinarySelfTest.TestBinaryField - PASSED{color} * {color:#013220}exe: BinarySelfTest.TestBinaryField - PASSED{color} {color:#00008b}Cache (Full API Multi JVM){color} [[tests 16|https://ci.ignite.apache.org/viewLog.html?buildId=5661121]] * {color:#8b0000}org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCacheAtomicNearOnlyMultiJvmP2PDisabledFullApiSelfTest. - FAILED{color} * {color:#8b0000}org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCacheAtomicClientOnlyMultiJvmP2PDisabledFullApiSelfTest. - FAILED{color} * {color:#8b0000}org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCacheAtomicNearOnlyMultiJvmFullApiSelfTest. - FAILED{color} * {color:#8b0000}org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCacheReplicatedNearOnlyMultiJvmFullApiSelfTest. - FAILED{color} * {color:#8b0000}org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCacheNearOnlyMultiJvmP2PDisabledFullApiSelfTest. - FAILED{color} * {color:#8b0000}org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCachePartitionedOnheapMultiJvmFullApiSelfTest. - FAILED{color} * {color:#8b0000}org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCachePartitionedNearDisabledAtomicOnheapMultiJvmFullApiSelfTest. - FAILED{color} * {color:#8b0000}org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCachePartitionedNearDisabledOnheapMultiJvmFullApiSelfTest. - FAILED{color} * {color:#8b0000}org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCachePartitionedMultiJvmFullApiSelfTest. - FAILED{color} * {color:#8b0000}org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCacheReplicatedMultiJvmFullApiSelfTest. - FAILED{color} * {color:#8b0000}org.apache.ignite.testsuites.IgniteCacheFullApiMultiJvmSelfTestSuite: org.apache.ignite.internal.processors.cache.multijvm.GridCacheReplicatedMultiJvmP2PDisabledFullApiSelfTest. - FAILED{color} ... and 5 new tests {panel} [TeamCity *--> Run :: All* Results|https://ci.ignite.apache.org/viewLog.html?buildId=5661183&buildTypeId=IgniteTests24Java8_RunAll] > Deserializing IBinaryObject containing an IBinaryObject field fails > ------------------------------------------------------------------- > > Key: IGNITE-13563 > URL: https://issues.apache.org/jira/browse/IGNITE-13563 > Project: Ignite > Issue Type: Bug > Components: binary, platforms > Affects Versions: 2.8.1 > Environment: Arch Linux (updated Oct 5): Linux 5.8.12, DotNet > 3.1.108, OpenJDK 1.8.0_265. > Reporter: Bojidar Marinov > Assignee: Bojidar Marinov > Priority: Major > Attachments: 0001-Fix-IBinaryObject-Deserialize.patch, Program.cs > > Time Spent: 10m > Remaining Estimate: 0h > > When one has a data object which has an IBinaryObject property, like so: > {code:c#} > class Model { > public IBinaryObject Value { get; set; } > } > {code} > .. and proceeds to fill that property with an IBinaryObject of an unknown > type (e.g. a binary object from a cache that has WithKeepBinary on): > {code:c#} > var binary = ignite.GetBinary(); > var model = new Model { Value = binary.GetBuilder("nonexistent").Build() }; > {code} > Then, the resulting object is savable/loadable from caches, as expected: > {code:c#} > var cache = ignite.GetOrCreateCache<string, Model>("models"); > cache.Put("model", model); > var modelFromCache = cache.Get("model"); // Equivalent to model > {code} > However, trying to convert the object to IBinaryObject (using ToBinary) and > then deserializing that manually fails: > {code:c#} > var binaryObject = binary.ToBinary<IBinaryObject>(model); > var modelFromBinary = binaryObject.Deserialize<Model>(); // Unknown pair > [platformId=1, typeId=486454369] > {code} > I have attached a program which reproduces the issue. > ---- > After investigating the issue, it seems to occur because > {{BinaryObject.Deserialize<T>()}} uses {{BinaryMode.Deserialize}}. This, in > turn, causes {{BinaryReader.ReadBinaryObject()}} to call > {{BinaryReader.Deserialize()}} for the first {{BinaryTypeId.Binary}} object > found (while switching to {{BinaryMode.KeepBinary}} for nested objects). > Then, {{BinaryReader.ReadFullObject()}} gets called, and not knowing better, > tries to deserialize the object of a nonexistent type. > Now, {{BinaryMode.Deserialize}} is also used by {{CacheClient}}. However, > upon further investigation of the values passed to {{Marshaller.Unmarshall}}, > {{CacheClient}} unmarshalls values starting with {{BinaryTypeId.Binary}}, > while {{BinaryObject}} unmarshalls values starting directly with > {{BinaryUtils.HdrFull}}; thus, {{BinaryReader}} functions correctly for > caches but fails with binary objects. > Due to the this, I think the proper fix would be to change > {{BinaryObject.Deserialize<T>()}} to use {{BinaryMode.KeepBinary}}. I have > attached a patch file containing that fix and an accompanying test. -- This message was sent by Atlassian Jira (v8.3.4#803005)