Uploaded image for project: 'Ignite'
  1. Ignite
  2. IGNITE-8588

.NET: Serialization issue when derived type hides base type member

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.4
    • 2.8
    • platforms

    Description

      The following class structure causes an exception that is hard to understand (when putting instance of B into Ignite cache):

      public class A
      {
        public int bob;
      } 
      
      public class B : A
      {
        public int bob;
      }
      

      Exception:

       Apache.Ignite.Core.Binary.BinaryObjectException: Conflicting field IDs [type=SubGridsRequestArgument, field1=Filters, field2=Filters, fieldId=-854547461]
      
         at Apache.Ignite.Core.Impl.Binary.BinaryReflectiveSerializerInternal.Register(Type type, Int32 typeId, IBinaryNameMapper converter, IBinaryIdMapper idMapper, Boolean forceTimestamp)
      
         at Apache.Ignite.Core.Impl.Binary.Marshaller.GetSerializer(BinaryConfiguration cfg, BinaryTypeConfiguration typeCfg, Type type, Int32 typeId, IBinaryNameMapper nameMapper, IBinaryIdMapper idMapper, ILogger log)
      
         at Apache.Ignite.Core.Impl.Binary.Marshaller.AddUserType(Type type, Int32 typeId, String typeName, Boolean registered, BinaryFullTypeDescriptor desc)
      
         at Apache.Ignite.Core.Impl.Binary.Marshaller.RegisterType(Type type, BinaryFullTypeDescriptor desc)
      
         at Apache.Ignite.Core.Impl.Binary.Marshaller.GetDescriptor(Type type)
      
         at Apache.Ignite.Core.Impl.Binary.BinaryWriter.Write[T](T obj)
      
         at Apache.Ignite.Core.Impl.Deployment.PeerLoadingExtensions.WriteWithPeerDeployment(BinaryWriter writer, Object o)
      
         at Apache.Ignite.Core.Impl.Binary.BinarySystemTypeSerializer`1.WriteBinary[T1](T1 obj, BinaryWriter writer)
      
         at Apache.Ignite.Core.Impl.Binary.BinaryWriter.Write[T](T obj)
      
         at Apache.Ignite.Core.Impl.Binary.BinarySystemTypeSerializer`1.WriteBinary[T1](T1 obj, BinaryWriter writer)
      
         at Apache.Ignite.Core.Impl.Binary.BinaryWriter.Write[T](T obj)
      
         at Apache.Ignite.Core.Impl.Binary.BinaryWriter.WriteObjectDetached[T](T o)
      
         at Apache.Ignite.Core.Impl.Compute.ComputeImpl.WriteJob(IComputeJob job, BinaryWriter writer)
      
         at Apache.Ignite.Core.Impl.Compute.ComputeImpl.<>c__DisplayClass1d`3.<ExecuteClosures0>b__1a(BinaryWriter writer)
      
         at Apache.Ignite.Core.Impl.PlatformTargetAdapter.WriteToStream(Action`1 action, IBinaryStream stream, Marshaller marsh)
      
         at Apache.Ignite.Core.Impl.PlatformJniTarget.InStreamOutObject(Int32 type, Action`1 writeAction)
      
         at Apache.Ignite.Core.Impl.Compute.ComputeImpl.ExecuteClosures0[TArg,TJobRes,TReduceRes](IComputeTask`3 task, IComputeJob job, IEnumerable`1 jobs, Int32 opId, Int32 jobsCount, Action`1 writeAction)
      
         --- End of inner exception stack trace ---
      
         at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
      
         at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
      
         at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout)
      
         at VSS.TRex.GridFabric.Requests.SubGridRequestsProgressive`2.Execute() in C:\Dev\VSS.TRex\src\netstandard\RaptorClassLibrary.netstandard\GridFabric\Requests\SubGridRequestsProgressive.cs:line 107
      
         at VSS.TRex.Pipelines.SubGridPipelineBase`3.Initiate() in C:\Dev\VSS.TRex\src\netstandard\RaptorClassLibrary.netstandard\Pipelines\SubGridPipelineBase.cs:line 241
      
         at VSS.TRex.Rendering.PlanViewTileRenderer.ExecutePipeline() in C:\Dev\VSS.TRex\src\netstandard\RaptorClassLibrary.netstandard\Rendering\PlanViewTileRenderer.cs:line 262
      
      ---> (Inner Exception #0) Apache.Ignite.Core.Binary.BinaryObjectException: Conflicting field IDs [type=SubGridsRequestArgument, field1=Filters, field2=Filters, fieldId=-854547461]
      
         at Apache.Ignite.Core.Impl.Binary.BinaryReflectiveSerializerInternal.Register(Type type, Int32 typeId, IBinaryNameMapper converter, IBinaryIdMapper idMapper, Boolean forceTimestamp)
      
         at Apache.Ignite.Core.Impl.Binary.Marshaller.GetSerializer(BinaryConfiguration cfg, BinaryTypeConfiguration typeCfg, Type type, Int32 typeId, IBinaryNameMapper nameMapper, IBinaryIdMapper idMapper, ILogger log)
      
         at Apache.Ignite.Core.Impl.Binary.Marshaller.AddUserType(Type type, Int32 typeId, String typeName, Boolean registered, BinaryFullTypeDescriptor desc)
      
         at Apache.Ignite.Core.Impl.Binary.Marshaller.RegisterType(Type type, BinaryFullTypeDescriptor desc)
      
         at Apache.Ignite.Core.Impl.Binary.Marshaller.GetDescriptor(Type type)
      
         at Apache.Ignite.Core.Impl.Binary.BinaryWriter.Write[T](T obj)
      
         at Apache.Ignite.Core.Impl.Deployment.PeerLoadingExtensions.WriteWithPeerDeployment(BinaryWriter writer, Object o)
      
         at Apache.Ignite.Core.Impl.Binary.BinarySystemTypeSerializer`1.WriteBinary[T1](T1 obj, BinaryWriter writer)
      
         at Apache.Ignite.Core.Impl.Binary.BinaryWriter.Write[T](T obj)
      
         at Apache.Ignite.Core.Impl.Binary.BinarySystemTypeSerializer`1.WriteBinary[T1](T1 obj, BinaryWriter writer)
      
         at Apache.Ignite.Core.Impl.Binary.BinaryWriter.Write[T](T obj)
      
         at Apache.Ignite.Core.Impl.Binary.BinaryWriter.WriteObjectDetached[T](T o)
      
         at Apache.Ignite.Core.Impl.Compute.ComputeImpl.WriteJob(IComputeJob job, BinaryWriter writer)
      
         at Apache.Ignite.Core.Impl.Compute.ComputeImpl.<>c__DisplayClass1d`3.<ExecuteClosures0>b__1a(BinaryWriter writer)
      
         at Apache.Ignite.Core.Impl.PlatformTargetAdapter.WriteToStream(Action`1 action, IBinaryStream stream, Marshaller marsh)
      
         at Apache.Ignite.Core.Impl.PlatformJniTarget.InStreamOutObject(Int32 type, Action`1 writeAction)
      
         at Apache.Ignite.Core.Impl.Compute.ComputeImpl.ExecuteClosures0[TArg,TJobRes,TReduceRes](IComputeTask`3 task, IComputeJob job, IEnumerable`1 jobs, Int32 opId, Int32 jobsCount, Action`1 writeAction)<---
      

      See user list thread for more details:
      http://apache-ignite-users.70518.x6.nabble.com/Binary-type-has-different-fields-error-td21540.html

      Attachments

        Issue Links

          Activity

            People

              ashapkin Alexandr Shapkin
              ptupitsyn Pavel Tupitsyn
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 1h 10m
                  1h 10m