2023-02-22 11:37:45 +08:00
|
|
|
// Licensed to the LF AI & Data foundation under one
|
|
|
|
// or more contributor license agreements. See the NOTICE file
|
|
|
|
// distributed with this work for additional information
|
|
|
|
// regarding copyright ownership. The ASF licenses this file
|
|
|
|
// to you under the Apache License, Version 2.0 (the
|
|
|
|
// "License"); you may not use this file except in compliance
|
|
|
|
// with the License. You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
|
2022-09-05 13:29:11 +08:00
|
|
|
package rootcoord
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
|
2023-06-25 17:20:43 +08:00
|
|
|
"go.uber.org/zap"
|
2023-01-11 14:35:40 +08:00
|
|
|
|
2023-06-09 01:28:37 +08:00
|
|
|
"github.com/milvus-io/milvus-proto/go-api/v2/commonpb"
|
2022-09-05 13:29:11 +08:00
|
|
|
"github.com/milvus-io/milvus/internal/proto/datapb"
|
2023-06-25 17:20:43 +08:00
|
|
|
"github.com/milvus-io/milvus/internal/proto/indexpb"
|
2023-04-06 19:14:32 +08:00
|
|
|
"github.com/milvus-io/milvus/pkg/log"
|
|
|
|
"github.com/milvus-io/milvus/pkg/util/typeutil"
|
2022-09-05 13:29:11 +08:00
|
|
|
)
|
|
|
|
|
2023-06-25 17:20:43 +08:00
|
|
|
type GetCollectionNameFunc func(dbName string, collID, partitionID UniqueID) (string, string, error)
|
|
|
|
|
2022-09-05 13:29:11 +08:00
|
|
|
type IDAllocator func(count uint32) (UniqueID, UniqueID, error)
|
2023-06-25 17:20:43 +08:00
|
|
|
|
2022-09-26 18:06:54 +08:00
|
|
|
type ImportFunc func(ctx context.Context, req *datapb.ImportTaskRequest) (*datapb.ImportTaskResponse, error)
|
2023-06-25 17:20:43 +08:00
|
|
|
|
2022-12-28 11:11:30 +08:00
|
|
|
type GetSegmentStatesFunc func(ctx context.Context, req *datapb.GetSegmentStatesRequest) (*datapb.GetSegmentStatesResponse, error)
|
2023-06-25 17:20:43 +08:00
|
|
|
|
2023-01-11 14:35:40 +08:00
|
|
|
type DescribeIndexFunc func(ctx context.Context, colID UniqueID) (*indexpb.DescribeIndexResponse, error)
|
2023-06-25 17:20:43 +08:00
|
|
|
|
2023-01-11 14:35:40 +08:00
|
|
|
type GetSegmentIndexStateFunc func(ctx context.Context, collID UniqueID, indexName string, segIDs []UniqueID) ([]*indexpb.SegmentIndexState, error)
|
2023-06-25 17:20:43 +08:00
|
|
|
|
2022-09-26 18:06:54 +08:00
|
|
|
type UnsetIsImportingStateFunc func(context.Context, *datapb.UnsetIsImportingStateRequest) (*commonpb.Status, error)
|
2022-09-05 13:29:11 +08:00
|
|
|
|
|
|
|
type ImportFactory interface {
|
|
|
|
NewGetCollectionNameFunc() GetCollectionNameFunc
|
|
|
|
NewIDAllocator() IDAllocator
|
|
|
|
NewImportFunc() ImportFunc
|
2022-12-28 11:11:30 +08:00
|
|
|
NewGetSegmentStatesFunc() GetSegmentStatesFunc
|
2022-09-26 18:06:54 +08:00
|
|
|
NewDescribeIndexFunc() DescribeIndexFunc
|
|
|
|
NewGetSegmentIndexStateFunc() GetSegmentIndexStateFunc
|
|
|
|
NewUnsetIsImportingStateFunc() UnsetIsImportingStateFunc
|
2022-09-05 13:29:11 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
type ImportFactoryImpl struct {
|
|
|
|
c *Core
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f ImportFactoryImpl) NewGetCollectionNameFunc() GetCollectionNameFunc {
|
|
|
|
return GetCollectionNameWithCore(f.c)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f ImportFactoryImpl) NewIDAllocator() IDAllocator {
|
|
|
|
return IDAllocatorWithCore(f.c)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f ImportFactoryImpl) NewImportFunc() ImportFunc {
|
|
|
|
return ImportFuncWithCore(f.c)
|
|
|
|
}
|
|
|
|
|
2022-12-28 11:11:30 +08:00
|
|
|
func (f ImportFactoryImpl) NewGetSegmentStatesFunc() GetSegmentStatesFunc {
|
|
|
|
return GetSegmentStatesWithCore(f.c)
|
|
|
|
}
|
|
|
|
|
2022-09-26 18:06:54 +08:00
|
|
|
func (f ImportFactoryImpl) NewDescribeIndexFunc() DescribeIndexFunc {
|
|
|
|
return DescribeIndexWithCore(f.c)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f ImportFactoryImpl) NewGetSegmentIndexStateFunc() GetSegmentIndexStateFunc {
|
|
|
|
return GetSegmentIndexStateWithCore(f.c)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f ImportFactoryImpl) NewUnsetIsImportingStateFunc() UnsetIsImportingStateFunc {
|
|
|
|
return UnsetIsImportingStateWithCore(f.c)
|
|
|
|
}
|
|
|
|
|
2022-09-05 13:29:11 +08:00
|
|
|
func NewImportFactory(c *Core) ImportFactory {
|
|
|
|
return &ImportFactoryImpl{c: c}
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetCollectionNameWithCore(c *Core) GetCollectionNameFunc {
|
2023-06-25 17:20:43 +08:00
|
|
|
return func(dbName string, collID, partitionID UniqueID) (string, string, error) {
|
|
|
|
colInfo, err := c.meta.GetCollectionByID(c.ctx, dbName, collID, typeutil.MaxTimestamp, false)
|
2022-09-05 13:29:11 +08:00
|
|
|
if err != nil {
|
|
|
|
log.Error("Core failed to get collection name by id", zap.Int64("ID", collID), zap.Error(err))
|
|
|
|
return "", "", err
|
|
|
|
}
|
|
|
|
partName, err := c.meta.GetPartitionNameByID(collID, partitionID, 0)
|
|
|
|
if err != nil {
|
|
|
|
log.Error("Core failed to get partition name by id", zap.Int64("ID", partitionID), zap.Error(err))
|
2022-09-27 10:44:53 +08:00
|
|
|
return colInfo.Name, "", err
|
2022-09-05 13:29:11 +08:00
|
|
|
}
|
|
|
|
|
2022-09-27 10:44:53 +08:00
|
|
|
return colInfo.Name, partName, nil
|
2022-09-05 13:29:11 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func IDAllocatorWithCore(c *Core) IDAllocator {
|
|
|
|
return func(count uint32) (UniqueID, UniqueID, error) {
|
|
|
|
return c.idAllocator.Alloc(count)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func ImportFuncWithCore(c *Core) ImportFunc {
|
2022-09-26 18:06:54 +08:00
|
|
|
return func(ctx context.Context, req *datapb.ImportTaskRequest) (*datapb.ImportTaskResponse, error) {
|
|
|
|
return c.broker.Import(ctx, req)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-28 11:11:30 +08:00
|
|
|
func GetSegmentStatesWithCore(c *Core) GetSegmentStatesFunc {
|
|
|
|
return func(ctx context.Context, req *datapb.GetSegmentStatesRequest) (*datapb.GetSegmentStatesResponse, error) {
|
|
|
|
return c.broker.GetSegmentStates(ctx, req)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-26 18:06:54 +08:00
|
|
|
func DescribeIndexWithCore(c *Core) DescribeIndexFunc {
|
2023-01-11 14:35:40 +08:00
|
|
|
return func(ctx context.Context, colID UniqueID) (*indexpb.DescribeIndexResponse, error) {
|
2022-09-26 18:06:54 +08:00
|
|
|
return c.broker.DescribeIndex(ctx, colID)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetSegmentIndexStateWithCore(c *Core) GetSegmentIndexStateFunc {
|
2023-01-11 14:35:40 +08:00
|
|
|
return func(ctx context.Context, collID UniqueID, indexName string, segIDs []UniqueID) ([]*indexpb.SegmentIndexState, error) {
|
2022-09-26 18:06:54 +08:00
|
|
|
return c.broker.GetSegmentIndexState(ctx, collID, indexName, segIDs)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func UnsetIsImportingStateWithCore(c *Core) UnsetIsImportingStateFunc {
|
|
|
|
return func(ctx context.Context, req *datapb.UnsetIsImportingStateRequest) (*commonpb.Status, error) {
|
|
|
|
return c.broker.UnsetIsImportingState(ctx, req)
|
2022-09-05 13:29:11 +08:00
|
|
|
}
|
|
|
|
}
|