Skip to content
Snippets Groups Projects
Commit 366911db authored by 382673304@qq.com's avatar 382673304@qq.com
Browse files

fix: add consul destroy timeout and test file

parent d226d63d
No related branches found
No related tags found
No related merge requests found
......@@ -37,6 +37,7 @@ import (
const (
registryConnDelay = 3
registryDestroyDefaultTimeout = time.Second
)
func init() {
......@@ -55,6 +56,9 @@ type consulRegistry struct {
// Done field represents whether
// consul registry is closed.
done chan struct{}
// time wait when destroy
timeOut time.Duration
}
func newConsulRegistry(url *common.URL) (registry.Registry, error) {
......@@ -68,6 +72,7 @@ func newConsulRegistry(url *common.URL) (registry.Registry, error) {
URL: url,
client: client,
done: make(chan struct{}),
timeOut: registryDestroyDefaultTimeout,
}
return r, nil
......@@ -188,8 +193,25 @@ func (r *consulRegistry) IsAvailable() bool {
// Destroy consul registry center
func (r *consulRegistry) Destroy() {
if r.URL != nil{
if err := r.UnRegister(*r.URL); err != nil{
logger.Errorf("consul registry unregister with err: %s", err.Error())
done := make(chan struct{}, 1)
ticker := time.NewTicker(r.timeOut)
go func(){
defer func(){
if e := recover(); e != nil{
logger.Errorf("consulRegistry destory with panic: %v", e)
}
done <- struct{}{}
}()
if err := r.UnRegister(*r.URL); err != nil{
logger.Errorf("consul registry unregister with err: %s", err.Error())
}
}()
select {
case <- done:
logger.Infof("consulRegistry unregister done")
case <- ticker.C:
logger.Errorf("consul unregister timeout")
ticker.Stop()
}
}
close(r.done)
......
......@@ -55,3 +55,19 @@ func (suite *consulRegistryTestSuite) testSubscribe() {
assert.NoError(suite.t, err)
suite.listener = listener
}
func (suite *consulRegistryTestSuite) testDestroy(){
consumerRegistryUrl := newConsumerRegistryUrl(registryHost, registryPort)
consumerRegistry, _ := newConsulRegistry(consumerRegistryUrl)
consulRegistryImp := consumerRegistry.(*consulRegistry)
assert.True(suite.t, consulRegistryImp.IsAvailable())
consulRegistryImp.Destroy()
assert.False(suite.t, consulRegistryImp.IsAvailable())
consumerRegistry, _ = newConsulRegistry(consumerRegistryUrl)
consulRegistryImp = consumerRegistry.(*consulRegistry)
consulRegistryImp.URL = nil
assert.True(suite.t, consulRegistryImp.IsAvailable())
consulRegistryImp.Destroy()
assert.False(suite.t, consulRegistryImp.IsAvailable())
}
......@@ -163,6 +163,7 @@ func test1(t *testing.T) {
suite.testListener(remoting.EventTypeAdd)
suite.testUnregister()
suite.testListener(remoting.EventTypeDel)
suite.testDestroy()
}
// subscribe -> register -> unregister
......@@ -183,8 +184,11 @@ func test2(t *testing.T) {
suite.testListener(remoting.EventTypeAdd)
suite.testUnregister()
suite.testListener(remoting.EventTypeDel)
suite.testDestroy()
}
func TestConsulRegistry(t *testing.T) {
t.Run("test1", test1)
t.Run("test2", test2)
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment