From 225cf9ed5b3349262f70b6525993a26645935ef7 Mon Sep 17 00:00:00 2001 From: fangyincheng <fangyincheng@sina.com> Date: Mon, 23 Sep 2019 11:59:06 +0800 Subject: [PATCH] Fix: failover_cluster_invoker.go --- cluster/cluster_impl/failover_cluster_invoker.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cluster/cluster_impl/failover_cluster_invoker.go b/cluster/cluster_impl/failover_cluster_invoker.go index 70db6d4c1..3595a04c7 100644 --- a/cluster/cluster_impl/failover_cluster_invoker.go +++ b/cluster/cluster_impl/failover_cluster_invoker.go @@ -72,6 +72,9 @@ func (invoker *failoverClusterInvoker) Invoke(invocation protocol.Invocation) pr invoked := []protocol.Invoker{} providers := []string{} var result protocol.Result + if retries > len(invokers) { + retries = len(invokers) + } for i := 0; i <= retries; i++ { //Reselect before retry to avoid a change of candidate `invokers`. //NOTE: if `invokers` changed, then `invoked` also lose accuracy. @@ -87,6 +90,9 @@ func (invoker *failoverClusterInvoker) Invoke(invocation protocol.Invocation) pr } } ivk := invoker.doSelect(loadbalance, invocation, invokers, invoked) + if ivk == nil { + continue + } invoked = append(invoked, ivk) //DO INVOKE result = ivk.Invoke(invocation) -- GitLab