[ 
https://issues.apache.org/jira/browse/IGNITE-25360?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17953471#comment-17953471
 ] 

Igor Sapego commented on IGNITE-25360:
--------------------------------------

LGTM

> .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
>            Priority: Major
>              Labels: ignite-3
>             Fix For: 3.1
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> 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}
> We should throw a sensible exception explaining that the key can't be empty.



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

Reply via email to