2021-05-18 11:07:27 +00:00
|
|
|
package sessionutil
|
2021-05-18 03:39:21 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"sync"
|
|
|
|
"testing"
|
2021-05-19 10:36:05 +00:00
|
|
|
"time"
|
2021-05-18 03:39:21 +00:00
|
|
|
|
|
|
|
etcdkv "github.com/milvus-io/milvus/internal/kv/etcd"
|
|
|
|
"github.com/milvus-io/milvus/internal/util/paramtable"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"go.etcd.io/etcd/clientv3"
|
|
|
|
"golang.org/x/net/context"
|
|
|
|
)
|
|
|
|
|
|
|
|
var Params paramtable.BaseTable
|
|
|
|
|
2021-05-19 10:36:05 +00:00
|
|
|
func TestGetServerIDConcurrently(t *testing.T) {
|
|
|
|
ctx := context.Background()
|
2021-05-18 03:39:21 +00:00
|
|
|
Params.Init()
|
|
|
|
|
|
|
|
etcdAddr, err := Params.Load("_EtcdAddress")
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
cli, err := clientv3.New(clientv3.Config{Endpoints: []string{etcdAddr}})
|
|
|
|
assert.Nil(t, err)
|
2021-05-21 11:28:52 +00:00
|
|
|
etcdKV := etcdkv.NewEtcdKV(cli, "")
|
|
|
|
_, err = cli.Delete(ctx, "/session", clientv3.WithPrefix())
|
|
|
|
assert.Nil(t, err)
|
2021-05-18 03:39:21 +00:00
|
|
|
|
|
|
|
defer etcdKV.Close()
|
|
|
|
defer etcdKV.RemoveWithPrefix("")
|
|
|
|
|
|
|
|
var wg sync.WaitGroup
|
|
|
|
var muList sync.Mutex = sync.Mutex{}
|
|
|
|
|
2021-05-21 11:28:52 +00:00
|
|
|
s := NewSession(ctx, []string{etcdAddr}, "test", "testAddr", false)
|
2021-05-18 03:39:21 +00:00
|
|
|
res := make([]int64, 0)
|
|
|
|
|
|
|
|
getIDFunc := func() {
|
2021-05-21 11:28:52 +00:00
|
|
|
s.checkIDExist()
|
|
|
|
id, err := s.getServerID()
|
2021-05-18 03:39:21 +00:00
|
|
|
assert.Nil(t, err)
|
|
|
|
muList.Lock()
|
|
|
|
res = append(res, id)
|
|
|
|
muList.Unlock()
|
|
|
|
wg.Done()
|
|
|
|
}
|
|
|
|
|
|
|
|
for i := 0; i < 10; i++ {
|
|
|
|
wg.Add(1)
|
|
|
|
go getIDFunc()
|
|
|
|
}
|
|
|
|
wg.Wait()
|
2021-05-19 10:36:05 +00:00
|
|
|
for i := 1; i <= 10; i++ {
|
2021-05-18 03:39:21 +00:00
|
|
|
assert.Contains(t, res, int64(i))
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2021-05-19 10:36:05 +00:00
|
|
|
func TestInit(t *testing.T) {
|
|
|
|
ctx := context.Background()
|
2021-05-18 03:39:21 +00:00
|
|
|
Params.Init()
|
|
|
|
|
|
|
|
etcdAddr, err := Params.Load("_EtcdAddress")
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
cli, err := clientv3.New(clientv3.Config{Endpoints: []string{etcdAddr}})
|
|
|
|
assert.Nil(t, err)
|
2021-05-21 11:28:52 +00:00
|
|
|
etcdKV := etcdkv.NewEtcdKV(cli, "")
|
|
|
|
_, err = cli.Delete(ctx, "/session", clientv3.WithPrefix())
|
|
|
|
assert.Nil(t, err)
|
2021-05-18 03:39:21 +00:00
|
|
|
|
|
|
|
defer etcdKV.Close()
|
|
|
|
defer etcdKV.RemoveWithPrefix("")
|
|
|
|
|
2021-05-21 11:28:52 +00:00
|
|
|
s := NewSession(ctx, []string{etcdAddr}, "test", "testAddr", false)
|
|
|
|
assert.NotEqual(t, 0, s.leaseID)
|
|
|
|
assert.NotEqual(t, 0, s.ServerID)
|
2021-05-18 03:39:21 +00:00
|
|
|
}
|
|
|
|
|
2021-05-19 10:36:05 +00:00
|
|
|
func TestUpdateSessions(t *testing.T) {
|
|
|
|
ctx := context.Background()
|
2021-05-18 11:07:27 +00:00
|
|
|
Params.Init()
|
|
|
|
|
|
|
|
etcdAddr, err := Params.Load("_EtcdAddress")
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
cli, err := clientv3.New(clientv3.Config{Endpoints: []string{etcdAddr}})
|
|
|
|
assert.Nil(t, err)
|
2021-05-21 11:28:52 +00:00
|
|
|
etcdKV := etcdkv.NewEtcdKV(cli, "")
|
|
|
|
_, err = cli.Delete(ctx, "/session", clientv3.WithPrefix())
|
|
|
|
assert.Nil(t, err)
|
2021-05-18 11:07:27 +00:00
|
|
|
|
|
|
|
defer etcdKV.Close()
|
|
|
|
defer etcdKV.RemoveWithPrefix("")
|
|
|
|
|
2021-05-19 10:36:05 +00:00
|
|
|
var wg sync.WaitGroup
|
|
|
|
var muList sync.Mutex = sync.Mutex{}
|
|
|
|
|
2021-05-21 11:28:52 +00:00
|
|
|
s := NewSession(ctx, []string{etcdAddr}, "test", "testAddr", false)
|
2021-05-18 11:07:27 +00:00
|
|
|
|
2021-05-21 11:28:52 +00:00
|
|
|
sessions, err := s.GetSessions("test")
|
2021-05-18 11:07:27 +00:00
|
|
|
assert.Nil(t, err)
|
2021-05-21 11:28:52 +00:00
|
|
|
assert.Equal(t, len(sessions), 0)
|
|
|
|
addCh, delCh := s.WatchServices("test")
|
2021-05-18 11:07:27 +00:00
|
|
|
|
2021-05-21 11:28:52 +00:00
|
|
|
sList := []*Session{}
|
2021-05-18 03:39:21 +00:00
|
|
|
|
2021-05-19 10:36:05 +00:00
|
|
|
getIDFunc := func() {
|
2021-05-21 11:28:52 +00:00
|
|
|
singleS := NewSession(ctx, []string{etcdAddr}, "test", "testAddr", false)
|
|
|
|
singleS.Init()
|
2021-05-19 10:36:05 +00:00
|
|
|
muList.Lock()
|
2021-05-21 11:28:52 +00:00
|
|
|
sList = append(sList, singleS)
|
2021-05-19 10:36:05 +00:00
|
|
|
muList.Unlock()
|
|
|
|
wg.Done()
|
2021-05-18 03:39:21 +00:00
|
|
|
}
|
|
|
|
|
2021-05-19 10:36:05 +00:00
|
|
|
for i := 0; i < 10; i++ {
|
|
|
|
wg.Add(1)
|
|
|
|
go getIDFunc()
|
|
|
|
}
|
|
|
|
wg.Wait()
|
2021-05-18 03:39:21 +00:00
|
|
|
|
2021-05-20 07:07:25 +00:00
|
|
|
assert.Eventually(t, func() bool {
|
2021-05-21 11:28:52 +00:00
|
|
|
sessions, _ := s.GetSessions("test")
|
|
|
|
return len(sessions) == 10
|
2021-05-20 07:07:25 +00:00
|
|
|
}, 10*time.Second, 100*time.Millisecond)
|
2021-05-21 11:28:52 +00:00
|
|
|
notExistSessions, _ := s.GetSessions("testt")
|
|
|
|
assert.Equal(t, len(notExistSessions), 0)
|
2021-05-18 03:39:21 +00:00
|
|
|
|
2021-05-19 10:36:05 +00:00
|
|
|
etcdKV.RemoveWithPrefix("")
|
|
|
|
assert.Eventually(t, func() bool {
|
2021-05-21 11:28:52 +00:00
|
|
|
sessions, _ := s.GetSessions("test")
|
|
|
|
return len(sessions) == 0
|
2021-05-19 10:36:05 +00:00
|
|
|
}, 10*time.Second, 100*time.Millisecond)
|
2021-05-18 03:39:21 +00:00
|
|
|
|
2021-05-20 07:07:25 +00:00
|
|
|
addSessions := []*Session{}
|
|
|
|
for i := 0; i < 10; i++ {
|
|
|
|
session := <-addCh
|
|
|
|
addSessions = append(addSessions, session)
|
|
|
|
}
|
|
|
|
assert.Equal(t, len(addSessions), 10)
|
|
|
|
|
|
|
|
delSessions := []*Session{}
|
|
|
|
for i := 0; i < 10; i++ {
|
|
|
|
session := <-delCh
|
|
|
|
delSessions = append(delSessions, session)
|
|
|
|
}
|
|
|
|
assert.Equal(t, len(addSessions), 10)
|
2021-05-18 03:39:21 +00:00
|
|
|
}
|