Pavel Tupitsyn created IGNITE-25360:
---------------------------------------

             Summary: .NET: IndexOutOfRangeException in data streamer with 
receiver on empty key
                 Key: IGNITE-25360
                 URL: https://issues.apache.org/jira/browse/IGNITE-25360
             Project: Ignite
          Issue Type: Bug
          Components: data streamer ai3, platforms ai3, thin clients ai3
            Reporter: Pavel Tupitsyn
            Assignee: Pavel Tupitsyn
             Fix For: 3.1


If I provide an empty IgniteTuple in the keySelector (which is a user error), 
IndexOutOfRangeException is thrown:

{code}
IndexOutOfRangeException
   at 
Apache.Ignite.Internal.Table.Serialization.ByteSpanExtensions.SetBit(Span`1 
span, Int32 index) in 
/home/pavel/w/ignite-3/modules/platforms/dotnet/Apache.Ignite/Internal/Table/Serialization/ByteSpanExtensions.cs:line
 32
   at 
Apache.Ignite.Internal.Table.Serialization.BinaryTupleBuilderExtensions.AppendNoValue(BinaryTupleBuilder&
 builder, Span`1 noValueSet) in 
/home/pavel/w/ignite-3/modules/platforms/dotnet/Apache.Ignite/Internal/Table/Serialization/BinaryTupleBuilderExtensions.cs:line
 35
   at 
Apache.Ignite.Internal.Table.Serialization.TupleSerializerHandler.Write(BinaryTupleBuilder&
 tupleBuilder, IIgniteTuple record, Schema schema, Boolean keyOnly, Span`1 
noValueSet) in 
/home/pavel/w/ignite-3/modules/platforms/dotnet/Apache.Ignite/Internal/Table/Serialization/TupleSerializerHandler.cs:line
 108
   at 
Apache.Ignite.Internal.Table.Serialization.IRecordSerializerHandler`1.GetKeyColocationHash(Schema
 schema, T key) in 
/home/pavel/w/ignite-3/modules/platforms/dotnet/Apache.Ignite/Internal/Table/Serialization/IRecordSerializerHandler.cs:line
 88
   at 
Apache.Ignite.Internal.Table.DataStreamerWithReceiver.<>c__DisplayClass0_0`5.<StreamDataAsync>g__Add|0(TSource
 item) in 
/home/pavel/w/ignite-3/modules/platforms/dotnet/Apache.Ignite/Internal/Table/DataStreamerWithReceiver.cs:line
 204
   at 
Apache.Ignite.Internal.Table.DataStreamerWithReceiver.StreamDataAsync[TSource,TKey,TPayload,TArg,TResult](IAsyncEnumerable`1
 data, Table table, Func`2 keySelector, Func`2 payloadSelector, 
IRecordSerializerHandler`1 keyWriter, DataStreamerOptions options, Channel`1 
resultChannel, IEnumerable`1 units, String receiverClassName, 
ReceiverExecutionOptions receiverExecutionOptions, TArg receiverArg, 
CancellationToken cancellationToken) in 
/home/pavel/w/ignite-3/modules/platforms/dotnet/Apache.Ignite/Internal/Table/DataStreamerWithReceiver.cs:line
 133
   at 
Apache.Ignite.Internal.Table.DataStreamerWithReceiver.StreamDataAsync[TSource,TKey,TPayload,TArg,TResult](IAsyncEnumerable`1
 data, Table table, Func`2 keySelector, Func`2 payloadSelector, 
IRecordSerializerHandler`1 keyWriter, DataStreamerOptions options, Channel`1 
resultChannel, IEnumerable`1 units, String receiverClassName, 
ReceiverExecutionOptions receiverExecutionOptions, TArg receiverArg, 
CancellationToken cancellationToken) in 
/home/pavel/w/ignite-3/modules/platforms/dotnet/Apache.Ignite/Internal/Table/DataStreamerWithReceiver.cs:line
 119
{code}

Reproducer:
{code}
        var res = await TupleView.StreamDataAsync(
            data: ids.ToAsyncEnumerable(),
            keySelector: _ => new IgniteTuple(),
            payloadSelector: id => id,
            receiver: DotNetReceivers.CreateTableAndInsert,
            receiverArg: tableName,
            options: new DataStreamerOptions { PageSize = 33 }).ToListAsync();
{code}



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

Reply via email to