Skip to content

Commit

Permalink
fix: CollectionSchema.autoID is deprecated (milvus-io#30002)
Browse files Browse the repository at this point in the history
issue: milvus-io#30000
related to: [milvus-proto
milvus-io#202](milvus-io/milvus-proto#202)

1. replace collSchema.AutoID with primaryField.AutoID
2. show `enableDynamic` & `enableDynamicField` at the same time
3. avoid data race about the access to metacache

Signed-off-by: PowderLi <[email protected]>
  • Loading branch information
PowderLi authored Jan 18, 2024
1 parent 9f8eb0e commit 631ebb1
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 21 deletions.
29 changes: 16 additions & 13 deletions internal/distributed/proxy/httpserver/handler_v1.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,8 +135,8 @@ func (h *HandlersV1) describeCollection(ctx context.Context, c *gin.Context, dbN
return nil, err
}
primaryField, ok := getPrimaryField(response.Schema)
if ok && primaryField.AutoID && !response.Schema.AutoID {
log.Warn("primary filed autoID VS schema autoID", zap.String("collectionName", collectionName), zap.Bool("primary Field", primaryField.AutoID), zap.Bool("schema", response.Schema.AutoID))
if ok && primaryField.AutoID && !primaryField.AutoID {
log.Warn("primary filed autoID VS schema autoID", zap.String("collectionName", collectionName), zap.Bool("primary Field", primaryField.AutoID), zap.Bool("schema", primaryField.AutoID))
response.Schema.AutoID = EnableAutoID
}
return response.Schema, nil
Expand Down Expand Up @@ -219,10 +219,11 @@ func (h *HandlersV1) listCollections(c *gin.Context) {

func (h *HandlersV1) createCollection(c *gin.Context) {
httpReq := CreateCollectionReq{
DbName: DefaultDbName,
MetricType: DefaultMetricType,
PrimaryField: DefaultPrimaryFieldName,
VectorField: DefaultVectorFieldName,
DbName: DefaultDbName,
MetricType: DefaultMetricType,
PrimaryField: DefaultPrimaryFieldName,
VectorField: DefaultVectorFieldName,
EnableDynamicField: EnableDynamic,
}
if err := c.ShouldBindWith(&httpReq, binding.JSON); err != nil {
log.Warn("high level restful api, the parameter of create collection is incorrect", zap.Any("request", httpReq), zap.Error(err))
Expand Down Expand Up @@ -265,7 +266,7 @@ func (h *HandlersV1) createCollection(c *gin.Context) {
AutoID: DisableAutoID,
},
},
EnableDynamicField: EnableDynamic,
EnableDynamicField: httpReq.EnableDynamicField,
})
if err != nil {
log.Warn("high level restful api, marshal collection schema fail", zap.Any("request", httpReq), zap.Error(err))
Expand Down Expand Up @@ -358,8 +359,8 @@ func (h *HandlersV1) getCollectionDetails(c *gin.Context) {
}
coll := response.(*milvuspb.DescribeCollectionResponse)
primaryField, ok := getPrimaryField(coll.Schema)
if ok && primaryField.AutoID && !coll.Schema.AutoID {
log.Warn("primary filed autoID VS schema autoID", zap.String("collectionName", collectionName), zap.Bool("primary Field", primaryField.AutoID), zap.Bool("schema", coll.Schema.AutoID))
if ok && primaryField.AutoID && !primaryField.AutoID {
log.Warn("primary filed autoID VS schema autoID", zap.String("collectionName", collectionName), zap.Bool("primary Field", primaryField.AutoID), zap.Bool("schema", primaryField.AutoID))
coll.Schema.AutoID = EnableAutoID
}

Expand Down Expand Up @@ -798,10 +799,12 @@ func (h *HandlersV1) upsert(c *gin.Context) {
if err != nil || collSchema == nil {
return nil, RestRequestInterceptorErr
}
if collSchema.AutoID {
err := merr.WrapErrParameterInvalid("autoID: false", "autoID: true", "cannot upsert an autoID collection")
c.AbortWithStatusJSON(http.StatusOK, gin.H{HTTPReturnCode: merr.Code(err), HTTPReturnMessage: err.Error()})
return nil, RestRequestInterceptorErr
for _, fieldSchema := range collSchema.Fields {
if fieldSchema.IsPrimaryKey && fieldSchema.AutoID {
err := merr.WrapErrParameterInvalid("autoID: false", "autoID: true", "cannot upsert an autoID collection")
c.AbortWithStatusJSON(http.StatusOK, gin.H{HTTPReturnCode: merr.Code(err), HTTPReturnMessage: err.Error()})
return nil, RestRequestInterceptorErr
}
}
body, _ := c.Get(gin.BodyBytesKey)
err, httpReq.Data = checkAndSetData(string(body.([]byte)), collSchema)
Expand Down
15 changes: 8 additions & 7 deletions internal/distributed/proxy/httpserver/request.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package httpserver

type CreateCollectionReq struct {
DbName string `json:"dbName"`
CollectionName string `json:"collectionName" validate:"required"`
Dimension int32 `json:"dimension" validate:"required"`
Description string `json:"description"`
MetricType string `json:"metricType"`
PrimaryField string `json:"primaryField"`
VectorField string `json:"vectorField"`
DbName string `json:"dbName"`
CollectionName string `json:"collectionName" validate:"required"`
Dimension int32 `json:"dimension" validate:"required"`
Description string `json:"description"`
MetricType string `json:"metricType"`
PrimaryField string `json:"primaryField"`
VectorField string `json:"vectorField"`
EnableDynamicField bool `json:"enableDynamicField"`
}

type DropCollectionReq struct {
Expand Down
2 changes: 1 addition & 1 deletion internal/distributed/proxy/httpserver/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ func checkAndSetData(body string, collSchema *schemapb.CollectionSchema) (error,

dataString := gjson.Get(data.Raw, fieldName).String()

if field.IsPrimaryKey && collSchema.AutoID {
if field.IsPrimaryKey && field.AutoID {
if dataString != "" {
return merr.WrapErrParameterInvalid("", "set primary key but autoID == true"), reallyDataArray
}
Expand Down
2 changes: 2 additions & 0 deletions internal/proxy/meta_cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -1066,6 +1066,8 @@ func (m *MetaCache) RemoveDatabase(ctx context.Context, database string) {
}

func (m *MetaCache) HasDatabase(ctx context.Context, database string) bool {
m.mu.RLock()
defer m.mu.RUnlock()
_, ok := m.collInfo[database]
return ok
}

0 comments on commit 631ebb1

Please sign in to comment.