mirror of
https://gitee.com/milvus-io/milvus.git
synced 2024-12-02 03:48:37 +08:00
b0bd290a6e
Some checks are pending
Code Checker / Code Checker AMD64 Ubuntu 22.04 (push) Waiting to run
Code Checker / Code Checker Amazonlinux 2023 (push) Waiting to run
Code Checker / Code Checker rockylinux8 (push) Waiting to run
Mac Code Checker / Code Checker MacOS 12 (push) Waiting to run
Build and test / Build and test AMD64 Ubuntu 22.04 (push) Waiting to run
Build and test / UT for Cpp (push) Blocked by required conditions
Build and test / UT for Go (push) Blocked by required conditions
Build and test / Integration Test (push) Blocked by required conditions
Build and test / Upload Code Coverage (push) Blocked by required conditions
Related to #35020 Signed-off-by: Congqi Xia <congqi.xia@zilliz.com>
133 lines
4.6 KiB
Go
133 lines
4.6 KiB
Go
// 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.
|
|
|
|
package querynodev2
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/mock"
|
|
|
|
"github.com/milvus-io/milvus/internal/json"
|
|
"github.com/milvus-io/milvus/internal/proto/querypb"
|
|
"github.com/milvus-io/milvus/internal/querynodev2/delegator"
|
|
"github.com/milvus-io/milvus/internal/querynodev2/pipeline"
|
|
"github.com/milvus-io/milvus/internal/querynodev2/segments"
|
|
"github.com/milvus-io/milvus/internal/querynodev2/tsafe"
|
|
"github.com/milvus-io/milvus/pkg/mq/msgdispatcher"
|
|
"github.com/milvus-io/milvus/pkg/util/metricsinfo"
|
|
"github.com/milvus-io/milvus/pkg/util/paramtable"
|
|
"github.com/milvus-io/milvus/pkg/util/tsoutil"
|
|
"github.com/milvus-io/milvus/pkg/util/typeutil"
|
|
)
|
|
|
|
func TestGetPipelineJSON(t *testing.T) {
|
|
paramtable.Init()
|
|
|
|
ch := "ch"
|
|
tSafeManager := tsafe.NewTSafeReplica()
|
|
tSafeManager.Add(context.Background(), ch, 0)
|
|
delegators := typeutil.NewConcurrentMap[string, delegator.ShardDelegator]()
|
|
d := delegator.NewMockShardDelegator(t)
|
|
delegators.Insert(ch, d)
|
|
msgDispatcher := msgdispatcher.NewMockClient(t)
|
|
|
|
collectionManager := segments.NewMockCollectionManager(t)
|
|
segmentManager := segments.NewMockSegmentManager(t)
|
|
collectionManager.EXPECT().Get(mock.Anything).Return(&segments.Collection{})
|
|
manager := &segments.Manager{
|
|
Collection: collectionManager,
|
|
Segment: segmentManager,
|
|
}
|
|
|
|
pipelineManager := pipeline.NewManager(manager, tSafeManager, msgDispatcher, delegators)
|
|
|
|
_, err := pipelineManager.Add(1, ch)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 1, pipelineManager.Num())
|
|
|
|
stats := pipelineManager.GetChannelStats()
|
|
expectedStats := []*metricsinfo.Channel{
|
|
{
|
|
Name: ch,
|
|
WatchState: "Healthy",
|
|
LatestTimeTick: tsoutil.PhysicalTimeFormat(0),
|
|
NodeID: paramtable.GetNodeID(),
|
|
CollectionID: 1,
|
|
},
|
|
}
|
|
assert.Equal(t, expectedStats, stats)
|
|
|
|
JSONStr := getChannelJSON(&QueryNode{pipelineManager: pipelineManager})
|
|
assert.NotEmpty(t, JSONStr)
|
|
|
|
var actualStats []*metricsinfo.Channel
|
|
err = json.Unmarshal([]byte(JSONStr), &actualStats)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, expectedStats, actualStats)
|
|
}
|
|
|
|
func TestGetSegmentJSON(t *testing.T) {
|
|
segment := segments.NewMockSegment(t)
|
|
segment.EXPECT().ID().Return(int64(1))
|
|
segment.EXPECT().Collection().Return(int64(1001))
|
|
segment.EXPECT().Partition().Return(int64(2001))
|
|
segment.EXPECT().MemSize().Return(int64(1024))
|
|
segment.EXPECT().Indexes().Return([]*segments.IndexedFieldInfo{
|
|
{
|
|
IndexInfo: &querypb.FieldIndexInfo{
|
|
FieldID: 1,
|
|
IndexID: 101,
|
|
IndexSize: 512,
|
|
BuildID: 10001,
|
|
},
|
|
IsLoaded: true,
|
|
},
|
|
})
|
|
segment.EXPECT().Type().Return(segments.SegmentTypeGrowing)
|
|
segment.EXPECT().ResourceGroup().Return("default")
|
|
segment.EXPECT().InsertCount().Return(int64(100))
|
|
|
|
node := &QueryNode{}
|
|
mockedSegmentManager := segments.NewMockSegmentManager(t)
|
|
mockedSegmentManager.EXPECT().GetBy().Return([]segments.Segment{segment})
|
|
node.manager = &segments.Manager{Segment: mockedSegmentManager}
|
|
|
|
jsonStr := getSegmentJSON(node)
|
|
assert.NotEmpty(t, jsonStr)
|
|
|
|
var segments []*metricsinfo.Segment
|
|
err := json.Unmarshal([]byte(jsonStr), &segments)
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, segments)
|
|
assert.Equal(t, 1, len(segments))
|
|
assert.Equal(t, int64(1), segments[0].SegmentID)
|
|
assert.Equal(t, int64(1001), segments[0].CollectionID)
|
|
assert.Equal(t, int64(2001), segments[0].PartitionID)
|
|
assert.Equal(t, int64(1024), segments[0].MemSize)
|
|
assert.Equal(t, 1, len(segments[0].Index))
|
|
assert.Equal(t, int64(1), segments[0].Index[0].IndexFieldID)
|
|
assert.Equal(t, int64(101), segments[0].Index[0].IndexID)
|
|
assert.Equal(t, int64(512), segments[0].Index[0].IndexSize)
|
|
assert.Equal(t, int64(10001), segments[0].Index[0].BuildID)
|
|
assert.True(t, segments[0].Index[0].IsLoaded)
|
|
assert.Equal(t, "Growing", segments[0].State)
|
|
assert.Equal(t, "default", segments[0].ResourceGroup)
|
|
assert.Equal(t, int64(100), segments[0].LoadedInsertRowCount)
|
|
}
|