diff --git a/golang/client.go b/golang/client.go index 52f7eac0..71c48198 100644 --- a/golang/client.go +++ b/golang/client.go @@ -504,16 +504,19 @@ func (cli *defaultClient) startUp() error { f := func() { cli.router.Range(func(k, v interface{}) bool { topic := k.(string) - oldRoute := v newRoute, err := cli.queryRoute(context.TODO(), topic, cli.opts.timeout) if err != nil { cli.log.Errorf("scheduled queryRoute err=%v", err) } - if newRoute == nil && oldRoute != nil { + if newRoute == nil && v != nil { cli.log.Info("newRoute is nil, but oldRoute is not. do not update") return true } - if oldRoute == nil && len(newRoute) > 0 || oldRoute != nil && !routeEqual(oldRoute.([]*v2.MessageQueue), newRoute) { + var oldRoute []*v2.MessageQueue + if v != nil { + oldRoute = v.([]*v2.MessageQueue) + } + if !routeEqual(oldRoute, newRoute) { cli.router.Store(k, newRoute) switch impl := cli.clientImpl.(type) { case *defaultProducer: diff --git a/golang/client_test.go b/golang/client_test.go index 3733affd..4549bdfe 100644 --- a/golang/client_test.go +++ b/golang/client_test.go @@ -334,4 +334,8 @@ func Test_routeEqual(t *testing.T) { assert.Equal(t, false, reflect.DeepEqual(oldRoute, newRoute)) assert.Equal(t, true, routeEqual(oldRoute, newRoute)) + assert.Equal(t, true, routeEqual(nil, nil)) + assert.Equal(t, false, routeEqual(nil, newRoute)) + assert.Equal(t, false, routeEqual(oldRoute, nil)) + assert.Equal(t, true, routeEqual(nil, []*v2.MessageQueue{})) }