mirror of
https://gitee.com/milvus-io/milvus.git
synced 2024-12-02 20:09:57 +08:00
Forbid system fields in user schema (#17613)
Signed-off-by: longjiquan <jiquan.long@zilliz.com>
This commit is contained in:
parent
f5fa93aa0b
commit
0e29c37499
@ -87,6 +87,15 @@ func (t *CreateCollectionReqTask) Type() commonpb.MsgType {
|
|||||||
return t.Req.Base.MsgType
|
return t.Req.Base.MsgType
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func hasSystemFields(schema *schemapb.CollectionSchema, systemFields []string) bool {
|
||||||
|
for _, f := range schema.GetFields() {
|
||||||
|
if funcutil.SliceContain(systemFields, f.GetName()) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// Execute task execution
|
// Execute task execution
|
||||||
func (t *CreateCollectionReqTask) Execute(ctx context.Context) error {
|
func (t *CreateCollectionReqTask) Execute(ctx context.Context) error {
|
||||||
if t.Type() != commonpb.MsgType_CreateCollection {
|
if t.Type() != commonpb.MsgType_CreateCollection {
|
||||||
@ -108,6 +117,11 @@ func (t *CreateCollectionReqTask) Execute(ctx context.Context) error {
|
|||||||
zap.Int32("ShardsNum", t.Req.ShardsNum),
|
zap.Int32("ShardsNum", t.Req.ShardsNum),
|
||||||
zap.String("ConsistencyLevel", t.Req.ConsistencyLevel.String()))
|
zap.String("ConsistencyLevel", t.Req.ConsistencyLevel.String()))
|
||||||
|
|
||||||
|
if hasSystemFields(&schema, []string{RowIDFieldName, TimeStampFieldName}) {
|
||||||
|
log.Error("failed to create collection, user schema contain system field")
|
||||||
|
return fmt.Errorf("schema contains system field: %s, %s", RowIDFieldName, TimeStampFieldName)
|
||||||
|
}
|
||||||
|
|
||||||
for idx, field := range schema.Fields {
|
for idx, field := range schema.Fields {
|
||||||
field.FieldID = int64(idx + StartOfUserFieldID)
|
field.FieldID = int64(idx + StartOfUserFieldID)
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,12 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/golang/protobuf/proto"
|
||||||
|
|
||||||
|
"github.com/milvus-io/milvus/internal/proto/milvuspb"
|
||||||
|
|
||||||
|
"github.com/milvus-io/milvus/internal/proto/schemapb"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
"github.com/milvus-io/milvus/internal/proto/etcdpb"
|
"github.com/milvus-io/milvus/internal/proto/etcdpb"
|
||||||
@ -113,3 +119,35 @@ func TestDescribeSegmentsReqTask_Execute(t *testing.T) {
|
|||||||
}
|
}
|
||||||
assert.NoError(t, tsk.Execute(context.Background()))
|
assert.NoError(t, tsk.Execute(context.Background()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_hasSystemFields(t *testing.T) {
|
||||||
|
t.Run("no system fields", func(t *testing.T) {
|
||||||
|
schema := &schemapb.CollectionSchema{Fields: []*schemapb.FieldSchema{{Name: "not_system_field"}}}
|
||||||
|
assert.False(t, hasSystemFields(schema, []string{RowIDFieldName, TimeStampFieldName}))
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("has row id field", func(t *testing.T) {
|
||||||
|
schema := &schemapb.CollectionSchema{Fields: []*schemapb.FieldSchema{{Name: RowIDFieldName}}}
|
||||||
|
assert.True(t, hasSystemFields(schema, []string{RowIDFieldName, TimeStampFieldName}))
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("has timestamp field", func(t *testing.T) {
|
||||||
|
schema := &schemapb.CollectionSchema{Fields: []*schemapb.FieldSchema{{Name: TimeStampFieldName}}}
|
||||||
|
assert.True(t, hasSystemFields(schema, []string{RowIDFieldName, TimeStampFieldName}))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCreateCollectionReqTask_Execute_hasSystemFields(t *testing.T) {
|
||||||
|
schema := &schemapb.CollectionSchema{Name: "test", Fields: []*schemapb.FieldSchema{{Name: TimeStampFieldName}}}
|
||||||
|
marshaledSchema, err := proto.Marshal(schema)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
task := &CreateCollectionReqTask{
|
||||||
|
Req: &milvuspb.CreateCollectionRequest{
|
||||||
|
Base: &commonpb.MsgBase{MsgType: commonpb.MsgType_CreateCollection},
|
||||||
|
CollectionName: "test",
|
||||||
|
Schema: marshaledSchema,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
err = task.Execute(context.Background())
|
||||||
|
assert.Error(t, err)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user