Merge pull request #87818 from tedyu/node-info-err

Check getNodeInfoError against nil
This commit is contained in:
Kubernetes Prow Robot 2020-02-06 17:47:13 -08:00 committed by GitHub
commit ef4e2c9f04
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 5 deletions

View File

@ -22,7 +22,6 @@ import (
"fmt" "fmt"
"io" "io"
"net" "net"
"strings"
"sync" "sync"
"time" "time"
@ -161,9 +160,8 @@ func (c *csiDriverClient) NodeGetInfo(ctx context.Context) (
if nodeID != "" { if nodeID != "" {
return true, nil return true, nil
} }
// kubelet plugin registration service not implemented is a terminal error, no need to retry if getNodeInfoError != nil {
if strings.Contains(getNodeInfoError.Error(), "no handler registered for plugin type") { klog.Warningf("Error calling CSI NodeGetInfo(): %v", getNodeInfoError.Error())
return false, getNodeInfoError
} }
// Continue with exponential backoff // Continue with exponential backoff
return false, nil return false, nil

View File

@ -26,6 +26,7 @@ import (
csipbv1 "github.com/container-storage-interface/spec/lib/go/csi" csipbv1 "github.com/container-storage-interface/spec/lib/go/csi"
api "k8s.io/api/core/v1" api "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/api/resource"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume"
"k8s.io/kubernetes/pkg/volume/csi/fake" "k8s.io/kubernetes/pkg/volume/csi/fake"
volumetypes "k8s.io/kubernetes/pkg/volume/util/types" volumetypes "k8s.io/kubernetes/pkg/volume/util/types"
@ -313,6 +314,7 @@ func TestClientNodeGetInfo(t *testing.T) {
expectedMaxVolumePerNode int64 expectedMaxVolumePerNode int64
expectedAccessibleTopology map[string]string expectedAccessibleTopology map[string]string
mustFail bool mustFail bool
mustTimeout bool
err error err error
}{ }{
{ {
@ -326,6 +328,13 @@ func TestClientNodeGetInfo(t *testing.T) {
mustFail: true, mustFail: true,
err: errors.New("grpc error"), err: errors.New("grpc error"),
}, },
{
name: "test empty nodeId",
mustTimeout: true,
expectedNodeID: "",
expectedMaxVolumePerNode: 16,
expectedAccessibleTopology: map[string]string{"com.example.csi-topology/zone": "zone1"},
},
} }
for _, tc := range testCases { for _, tc := range testCases {
@ -349,7 +358,13 @@ func TestClientNodeGetInfo(t *testing.T) {
} }
nodeID, maxVolumePerNode, accessibleTopology, err := client.NodeGetInfo(context.Background()) nodeID, maxVolumePerNode, accessibleTopology, err := client.NodeGetInfo(context.Background())
checkErr(t, tc.mustFail, err) if tc.mustTimeout {
if wait.ErrWaitTimeout.Error() != err.Error() {
t.Errorf("should have timed out : %s", tc.name)
}
} else {
checkErr(t, tc.mustFail, err)
}
if nodeID != tc.expectedNodeID { if nodeID != tc.expectedNodeID {
t.Errorf("expected nodeID: %v; got: %v", tc.expectedNodeID, nodeID) t.Errorf("expected nodeID: %v; got: %v", tc.expectedNodeID, nodeID)