Roman Guseinov created IGNITE-8884:
--------------------------------------

             Summary: .NET: CachePartialUpdateException: failed to update keys 
(using Cache.PutAsync)
                 Key: IGNITE-8884
                 URL: https://issues.apache.org/jira/browse/IGNITE-8884
             Project: Ignite
          Issue Type: Bug
          Components: platforms
    Affects Versions: 2.5
         Environment: * Windows 10.
 * Apache Ignite 2.5.0.
 * .NETFramework,Version=v4.6.1

Packages:
 * Apache.Ignite - 2.5.0
 * Apache.Ignite.Log4Net - 2.5.0
 * Apache.Ignite.NLog - 2.5.0
 * NLog - 4.0.0

 

 
            Reporter: Roman Guseinov
         Attachments: Program.cs

The issue happens when we try to call PutAsync(KeyObject, ValueObject) where 
ValueObject's field refers to KeyObject. Reproducer is attached.

 
{code:java}
Apache.Ignite.Core.Cache.CachePartialUpdateException: Failed to update keys 
(retry update if possible).: [server_node.TradeId [idHash=573136580, 
hash=31459296, Number=2]]
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
 task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at server_node.Program.<PutGetComplexTypeAsyncSharedRef>d__2.MoveNext() in 
C:\Users\user\source\repos\IginteAsyncTest\server-node\server-node\Program.cs:line
 61
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
 task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at server_node.Program.Main(String[] args) in 
C:\Users\user\source\repos\IginteAsyncTest\server-node\server-node\Program.cs:line
 22
{code}
 

 Also, when we use the default logger, Cache.PutAsync doesn't throw an 
exception but when we try to get value back from the cache the different 
exception happens:

 
{code:java}
System.ArgumentException: Seek before origin: -25
at Apache.Ignite.Core.Impl.Memory.PlatformMemoryStream.Seek(Int32 offset, 
SeekOrigin origin)
at Apache.Ignite.Core.Impl.Binary.BinaryReader.ReadHandleObject[T](Int32 pos, 
Type typeOverride)
at Apache.Ignite.Core.Impl.Binary.BinaryReader.TryDeserialize[T](T& res, Type 
typeOverride)
at Apache.Ignite.Core.Impl.Binary.BinaryReader.Deserialize[T](Type typeOverride)
at Apache.Ignite.Core.Impl.Binary.BinaryReader.ReadObject[T](String fieldName)
at lambda_method(Closure , Object , IBinaryReader )
at 
Apache.Ignite.Core.Impl.Binary.BinaryReflectiveSerializerInternal.Apache.Ignite.Core.Impl.Binary.IBinarySerializerInternal.ReadBinary[T](BinaryReader
 reader, IBinaryTypeDescriptor desc, Int32 pos, Type typeOverride)
at Apache.Ignite.Core.Impl.Binary.BinaryReader.ReadFullObject[T](Int32 pos, 
Type typeOverride)
at Apache.Ignite.Core.Impl.Binary.BinaryReader.TryDeserialize[T](T& res, Type 
typeOverride)
at Apache.Ignite.Core.Impl.Binary.BinaryReader.Deserialize[T](Type typeOverride)
at Apache.Ignite.Core.Impl.Binary.BinaryReader.ReadBinaryObject[T](Boolean 
doDetach)
at Apache.Ignite.Core.Impl.Binary.BinaryReader.TryDeserialize[T](T& res, Type 
typeOverride)
at Apache.Ignite.Core.Impl.Binary.BinaryReader.Deserialize[T](Type typeOverride)
at Apache.Ignite.Core.Impl.Binary.Marshaller.Unmarshal[T](IBinaryStream stream, 
Boolean keepBinary)
at Apache.Ignite.Core.Impl.PlatformJniTarget.InStreamOutLong[TR](Int32 type, 
Action`1 outAction, Func`3 inAction, Func`2 readErrorAction)
at Apache.Ignite.Core.Impl.Cache.CacheImpl`2.Get(TK key)
at server_node.Program.<PutGetComplexTypeAsyncSharedRef>d__2.MoveNext() in 
C:\Users\user\source\repos\IginteAsyncTest\server-node\server-node\Program.cs:line
 62
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
 task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at server_node.Program.Main(String[] args) in 
C:\Users\user\source\repos\IginteAsyncTest\server-node\server-node\Program.cs:line
 22
{code}
 

 There are two workarounds:
 # Do not use the same object as key and the value's field.
 # Put data into the cache using the synchronous method.

 

Reproducer is attached: [^Program.cs]

 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to