diff --git a/cluster/cluster_impl/base_cluster_invoker.go b/cluster/cluster_impl/base_cluster_invoker.go index d58a2de57ec7541e39e48289a69d6a43a11cabff..0d39bff13ee3a917268dd2ee82e8f6aff7ccecbc 100644 --- a/cluster/cluster_impl/base_cluster_invoker.go +++ b/cluster/cluster_impl/base_cluster_invoker.go @@ -143,8 +143,7 @@ func (invoker *baseClusterInvoker) doSelectInvoker(lb cluster.LoadBalance, invoc for i := 0; i < 3; i++ { if len(otherInvokers) == 0 { // no other ivk to reselect, return to fallback - logger.Errorf("all %d invokers is unavailable for %s.", len(invokers), selectedInvoker.GetUrl().String()) - return nil + break } reselectedInvoker := lb.Select(otherInvokers, invocation) if isInvoked(reselectedInvoker, invoked) { @@ -158,11 +157,13 @@ func (invoker *baseClusterInvoker) doSelectInvoker(lb cluster.LoadBalance, invoc otherInvokers = getOtherInvokers(otherInvokers, reselectedInvoker) continue } - selectedInvoker = reselectedInvoker - break + return reselectedInvoker } + } else { + return selectedInvoker } - return selectedInvoker + logger.Errorf("all %d invokers is unavailable for %s.", len(invokers), selectedInvoker.GetUrl().String()) + return nil } func (invoker *baseClusterInvoker) Invoke(ctx context.Context, invocation protocol.Invocation) protocol.Result { diff --git a/protocol/rpc_status.go b/protocol/rpc_status.go index ee4d74ffeeb5648f73268acdb4bea24fb5de4308..8fc5ddd76e84a7de87ba8a9f09aa2adfa09e434b 100644 --- a/protocol/rpc_status.go +++ b/protocol/rpc_status.go @@ -264,10 +264,8 @@ func TryRefreshBlackList() { go func(ivks []Invoker, i int) { defer wg.Done() for j, _ := range ivks { - if j%3-i == 0 { - if ivks[j].(Invoker).IsAvailable() { - RemoveInvokerUnhealthyStatus(ivks[i]) - } + if j%3-i == 0 && ivks[j].(Invoker).IsAvailable() { + RemoveInvokerUnhealthyStatus(ivks[i]) } } }(ivks, i)