You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Pavel Tupitsyn (Jira)" <ji...@apache.org> on 2026/01/29 14:54:00 UTC

[jira] [Updated] (IGNITE-27705) .NET: Primitive mapping requires reflection

     [ https://issues.apache.org/jira/browse/IGNITE-27705?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Pavel Tupitsyn updated IGNITE-27705:
------------------------------------
    Description: 
*table.GetKeyValueView<Guid, string>()* requires reflection, which is unexpected with simple native types.

I was trying to make a small demo and run it with `dotnet run app.cs` (https://devblogs.microsoft.com/dotnet/announcing-dotnet-run-app/), and it failed to run:

{code}
Unhandled exception. System.PlatformNotSupportedException: Dynamic code generation is not supported on this platform.
   at System.Reflection.Emit.AssemblyBuilder.ThrowDynamicCodeNotSupported()
   at System.Reflection.Emit.AssemblyBuilder.EnsureDynamicCodeSupported()
   at System.Reflection.Emit.DynamicMethod.Init(String name, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] signature, Type owner, Module m, Boolean skipVisibility, Boolean transparentMethod)
   at System.Reflection.Emit.DynamicMethod..ctor(String name, Type returnType, Type[] parameterTypes, Module m, Boolean skipVisibility)
   at Apache.Ignite.Internal.Table.Serialization.ObjectSerializerHandler`1.EmitWriter(Schema schema, Boolean keyOnly)
   at Apache.Ignite.Internal.Table.Serialization.ObjectSerializerHandler`1.Write(BinaryTupleBuilder& tupleBuilder, T record, Schema schema, Boolean keyOnly, Span`1 noValueSet)
   at Apache.Ignite.Internal.Table.Serialization.IRecordSerializerHandler`1.Write(MsgPackWriter& writer, Schema schema, T record, Boolean keyOnly, Boolean computeHash)
   at Apache.Ignite.Internal.Table.Serialization.RecordSerializer`1.WriteWithHeader(MsgPackWriter& w, Nullable`1 txId, Schema schema, T rec, Boolean keyOnly)
   at Apache.Ignite.Internal.Table.Serialization.RecordSerializer`1.Write(PooledArrayBuffer buf, Nullable`1 txId, Schema schema, T rec, Boolean keyOnly)
   at Apache.Ignite.Internal.Table.RecordView`1.DoRecordOutOpAsync(ClientOp op, ITransaction transaction, T record, Boolean keyOnly, Nullable`1 schemaVersionOverride)
   at Apache.Ignite.Internal.Table.RecordView`1.UpsertAsync(ITransaction transaction, T record)
   at Apache.Ignite.Internal.Table.KeyValueView`2.PutAsync(ITransaction transaction, TK key, TV val)
{code}

We should provide mappers for supported types and not rely on reflection.

  was:
*table.GetKeyValueView<Guid, string>()* requires reflection, which is unexpected with simple native types.

I was trying to make a small demo and run it with `dotnet run app.cs` (https://devblogs.microsoft.com/dotnet/announcing-dotnet-run-app/), and it failed to run:

{code}
Unhandled exception. System.PlatformNotSupportedException: Dynamic code generation is not supported on this platform.
   at System.Reflection.Emit.AssemblyBuilder.ThrowDynamicCodeNotSupported()
   at System.Reflection.Emit.AssemblyBuilder.EnsureDynamicCodeSupported()
   at System.Reflection.Emit.DynamicMethod.Init(String name, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] signature, Type owner, Module m, Boolean skipVisibility, Boolean transparentMethod)
   at System.Reflection.Emit.DynamicMethod..ctor(String name, Type returnType, Type[] parameterTypes, Module m, Boolean skipVisibility)
   at Apache.Ignite.Internal.Table.Serialization.ObjectSerializerHandler`1.EmitWriter(Schema schema, Boolean keyOnly)
   at Apache.Ignite.Internal.Table.Serialization.ObjectSerializerHandler`1.Write(BinaryTupleBuilder& tupleBuilder, T record, Schema schema, Boolean keyOnly, Span`1 noValueSet)
   at Apache.Ignite.Internal.Table.Serialization.IRecordSerializerHandler`1.Write(MsgPackWriter& writer, Schema schema, T record, Boolean keyOnly, Boolean computeHash)
   at Apache.Ignite.Internal.Table.Serialization.RecordSerializer`1.WriteWithHeader(MsgPackWriter& w, Nullable`1 txId, Schema schema, T rec, Boolean keyOnly)
   at Apache.Ignite.Internal.Table.Serialization.RecordSerializer`1.Write(PooledArrayBuffer buf, Nullable`1 txId, Schema schema, T rec, Boolean keyOnly)
   at Apache.Ignite.Internal.Table.RecordView`1.DoRecordOutOpAsync(ClientOp op, ITransaction transaction, T record, Boolean keyOnly, Nullable`1 schemaVersionOverride)
   at Apache.Ignite.Internal.Table.RecordView`1.UpsertAsync(ITransaction transaction, T record)
   at Apache.Ignite.Internal.Table.KeyValueView`2.PutAsync(ITransaction transaction, TK key, TV val)
{code}


> .NET: Primitive mapping requires reflection
> -------------------------------------------
>
>                 Key: IGNITE-27705
>                 URL: https://issues.apache.org/jira/browse/IGNITE-27705
>             Project: Ignite
>          Issue Type: Bug
>          Components: platforms ai3, thin clients ai3
>            Reporter: Pavel Tupitsyn
>            Assignee: Pavel Tupitsyn
>            Priority: Major
>              Labels: ignite-3
>             Fix For: 3.2
>
>
> *table.GetKeyValueView<Guid, string>()* requires reflection, which is unexpected with simple native types.
> I was trying to make a small demo and run it with `dotnet run app.cs` (https://devblogs.microsoft.com/dotnet/announcing-dotnet-run-app/), and it failed to run:
> {code}
> Unhandled exception. System.PlatformNotSupportedException: Dynamic code generation is not supported on this platform.
>    at System.Reflection.Emit.AssemblyBuilder.ThrowDynamicCodeNotSupported()
>    at System.Reflection.Emit.AssemblyBuilder.EnsureDynamicCodeSupported()
>    at System.Reflection.Emit.DynamicMethod.Init(String name, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] signature, Type owner, Module m, Boolean skipVisibility, Boolean transparentMethod)
>    at System.Reflection.Emit.DynamicMethod..ctor(String name, Type returnType, Type[] parameterTypes, Module m, Boolean skipVisibility)
>    at Apache.Ignite.Internal.Table.Serialization.ObjectSerializerHandler`1.EmitWriter(Schema schema, Boolean keyOnly)
>    at Apache.Ignite.Internal.Table.Serialization.ObjectSerializerHandler`1.Write(BinaryTupleBuilder& tupleBuilder, T record, Schema schema, Boolean keyOnly, Span`1 noValueSet)
>    at Apache.Ignite.Internal.Table.Serialization.IRecordSerializerHandler`1.Write(MsgPackWriter& writer, Schema schema, T record, Boolean keyOnly, Boolean computeHash)
>    at Apache.Ignite.Internal.Table.Serialization.RecordSerializer`1.WriteWithHeader(MsgPackWriter& w, Nullable`1 txId, Schema schema, T rec, Boolean keyOnly)
>    at Apache.Ignite.Internal.Table.Serialization.RecordSerializer`1.Write(PooledArrayBuffer buf, Nullable`1 txId, Schema schema, T rec, Boolean keyOnly)
>    at Apache.Ignite.Internal.Table.RecordView`1.DoRecordOutOpAsync(ClientOp op, ITransaction transaction, T record, Boolean keyOnly, Nullable`1 schemaVersionOverride)
>    at Apache.Ignite.Internal.Table.RecordView`1.UpsertAsync(ITransaction transaction, T record)
>    at Apache.Ignite.Internal.Table.KeyValueView`2.PutAsync(ITransaction transaction, TK key, TV val)
> {code}
> We should provide mappers for supported types and not rely on reflection.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)