From 9439eaef5251f5d19f3a4b9e3b40b5744b018dcb Mon Sep 17 00:00:00 2001 From: sthuang <167743503+shaoting-huang@users.noreply.github.com> Date: Tue, 10 Jun 2025 11:42:35 +0800 Subject: [PATCH] fix: [StorageV2] sync with int8 vector data type core dumped (#42616) related: https://github.com/milvus-io/milvus/issues/42613, #39173 Signed-off-by: shaoting-huang --- internal/storage/serde.go | 17 ++++++++++++++++- internal/storage/serde_test.go | 1 + 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/internal/storage/serde.go b/internal/storage/serde.go index e15b2b1b1a..21bd3f5188 100644 --- a/internal/storage/serde.go +++ b/internal/storage/serde.go @@ -459,7 +459,22 @@ var serdeMap = func() map[schemapb.DataType]serdeEntry { } return nil, false }, - fixedSizeSerializer, + func(b array.Builder, v any) bool { + if v == nil { + b.AppendNull() + return true + } + if builder, ok := b.(*array.FixedSizeBinaryBuilder); ok { + if vv, ok := v.([]byte); ok { + builder.Append(vv) + return true + } else if vv, ok := v.([]int8); ok { + builder.Append(arrow.Int8Traits.CastToBytes(vv)) + return true + } + } + return false + }, } m[schemapb.DataType_FloatVector] = serdeEntry{ func(i int) arrow.DataType { diff --git a/internal/storage/serde_test.go b/internal/storage/serde_test.go index 5fc50759b8..49c9425154 100644 --- a/internal/storage/serde_test.go +++ b/internal/storage/serde_test.go @@ -99,6 +99,7 @@ func TestSerDe(t *testing.T) { {"test bfloat16 vector", args{dt: schemapb.DataType_BFloat16Vector, v: []byte{0xff, 0xff}}, []byte{0xff, 0xff}, true}, {"test bfloat16 vector null", args{dt: schemapb.DataType_BFloat16Vector, v: nil}, nil, true}, {"test bfloat16 vector negative", args{dt: schemapb.DataType_BFloat16Vector, v: -1}, nil, false}, + {"test int8 vector", args{dt: schemapb.DataType_Int8Vector, v: []int8{10}}, []int8{10}, true}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {