mirror of https://github.com/milvus-io/milvus.git
				
				
				
			
		
			
				
	
	
		
			127 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			4.0 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 querycoord
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"fmt"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/golang/protobuf/proto"
 | 
						|
	"github.com/stretchr/testify/assert"
 | 
						|
 | 
						|
	etcdkv "github.com/milvus-io/milvus/internal/kv/etcd"
 | 
						|
	"github.com/milvus-io/milvus/internal/proto/querypb"
 | 
						|
	"github.com/milvus-io/milvus/internal/util/dependency"
 | 
						|
	"github.com/milvus-io/milvus/internal/util/etcd"
 | 
						|
)
 | 
						|
 | 
						|
func Test_HandlerReloadFromKV(t *testing.T) {
 | 
						|
	refreshParams()
 | 
						|
	baseCtx, cancel := context.WithCancel(context.Background())
 | 
						|
	etcdCli, err := etcd.GetEtcdClient(&Params.EtcdCfg)
 | 
						|
	assert.Nil(t, err)
 | 
						|
	defer etcdCli.Close()
 | 
						|
	kv := etcdkv.NewEtcdKV(etcdCli, Params.EtcdCfg.MetaRootPath)
 | 
						|
 | 
						|
	channelInfoKey := fmt.Sprintf("%s/%d", unsubscribeChannelInfoPrefix, defaultQueryNodeID)
 | 
						|
	unsubscribeChannelInfo := &querypb.UnsubscribeChannelInfo{
 | 
						|
		NodeID: defaultQueryNodeID,
 | 
						|
	}
 | 
						|
	channelInfoBytes, err := proto.Marshal(unsubscribeChannelInfo)
 | 
						|
	assert.Nil(t, err)
 | 
						|
 | 
						|
	err = kv.Save(channelInfoKey, string(channelInfoBytes))
 | 
						|
	assert.Nil(t, err)
 | 
						|
 | 
						|
	factory := dependency.NewDefaultFactory(true)
 | 
						|
	handler, err := newChannelUnsubscribeHandler(baseCtx, kv, factory)
 | 
						|
	assert.Nil(t, err)
 | 
						|
	assert.Equal(t, 1, len(handler.downNodeChan))
 | 
						|
 | 
						|
	cancel()
 | 
						|
}
 | 
						|
 | 
						|
func Test_AddUnsubscribeChannelInfo(t *testing.T) {
 | 
						|
	refreshParams()
 | 
						|
	baseCtx, cancel := context.WithCancel(context.Background())
 | 
						|
	etcdCli, err := etcd.GetEtcdClient(&Params.EtcdCfg)
 | 
						|
	assert.Nil(t, err)
 | 
						|
	defer etcdCli.Close()
 | 
						|
	kv := etcdkv.NewEtcdKV(etcdCli, Params.EtcdCfg.MetaRootPath)
 | 
						|
	factory := dependency.NewDefaultFactory(true)
 | 
						|
	handler, err := newChannelUnsubscribeHandler(baseCtx, kv, factory)
 | 
						|
	assert.Nil(t, err)
 | 
						|
 | 
						|
	collectionChannels := &querypb.UnsubscribeChannels{
 | 
						|
		CollectionID: defaultCollectionID,
 | 
						|
		Channels:     []string{"test-channel"},
 | 
						|
	}
 | 
						|
	unsubscribeChannelInfo := &querypb.UnsubscribeChannelInfo{
 | 
						|
		NodeID:             defaultQueryNodeID,
 | 
						|
		CollectionChannels: []*querypb.UnsubscribeChannels{collectionChannels},
 | 
						|
	}
 | 
						|
 | 
						|
	handler.addUnsubscribeChannelInfo(unsubscribeChannelInfo)
 | 
						|
	frontValue := handler.channelInfos.Front()
 | 
						|
	assert.NotNil(t, frontValue)
 | 
						|
	assert.Equal(t, defaultQueryNodeID, frontValue.Value.(*querypb.UnsubscribeChannelInfo).NodeID)
 | 
						|
 | 
						|
	// repeat nodeID which has down
 | 
						|
	handler.addUnsubscribeChannelInfo(unsubscribeChannelInfo)
 | 
						|
	assert.Equal(t, 1, len(handler.downNodeChan))
 | 
						|
 | 
						|
	cancel()
 | 
						|
}
 | 
						|
 | 
						|
func Test_HandleChannelUnsubscribeLoop(t *testing.T) {
 | 
						|
	refreshParams()
 | 
						|
	baseCtx, cancel := context.WithCancel(context.Background())
 | 
						|
	etcdCli, err := etcd.GetEtcdClient(&Params.EtcdCfg)
 | 
						|
	assert.Nil(t, err)
 | 
						|
	defer etcdCli.Close()
 | 
						|
	kv := etcdkv.NewEtcdKV(etcdCli, Params.EtcdCfg.MetaRootPath)
 | 
						|
	factory := dependency.NewDefaultFactory(true)
 | 
						|
	handler, err := newChannelUnsubscribeHandler(baseCtx, kv, factory)
 | 
						|
	assert.Nil(t, err)
 | 
						|
 | 
						|
	collectionChannels := &querypb.UnsubscribeChannels{
 | 
						|
		CollectionID: defaultCollectionID,
 | 
						|
		Channels:     []string{"test-channel"},
 | 
						|
	}
 | 
						|
	unsubscribeChannelInfo := &querypb.UnsubscribeChannelInfo{
 | 
						|
		NodeID:             defaultQueryNodeID,
 | 
						|
		CollectionChannels: []*querypb.UnsubscribeChannels{collectionChannels},
 | 
						|
	}
 | 
						|
 | 
						|
	handler.addUnsubscribeChannelInfo(unsubscribeChannelInfo)
 | 
						|
	channelInfoKey := fmt.Sprintf("%s/%d", unsubscribeChannelInfoPrefix, defaultQueryNodeID)
 | 
						|
	_, err = kv.Load(channelInfoKey)
 | 
						|
	assert.Nil(t, err)
 | 
						|
 | 
						|
	handler.start()
 | 
						|
 | 
						|
	for {
 | 
						|
		_, err = kv.Load(channelInfoKey)
 | 
						|
		if err != nil {
 | 
						|
			break
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	cancel()
 | 
						|
}
 |