From ab19ec1bfcb35079944108b0b5df6074675d10f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=8F=AF10140699?= Date: Thu, 25 Dec 2025 16:24:46 +0800 Subject: [PATCH] Fix:globalmount path may be residual while pod creation-deletion --- pkg/volume/csi/csi_client.go | 3 +++ pkg/volume/csi/csi_client_test.go | 23 +++++++++++++++++++++++ pkg/volume/csi/fake/fake_client.go | 9 +++++++++ 3 files changed, 35 insertions(+) diff --git a/pkg/volume/csi/csi_client.go b/pkg/volume/csi/csi_client.go index 79731928033..068a7ccc350 100644 --- a/pkg/volume/csi/csi_client.go +++ b/pkg/volume/csi/csi_client.go @@ -703,6 +703,9 @@ func (c *csiDriverClient) nodeGetCapabilities(ctx context.Context) ([]*csipbv1.N req := &csipbv1.NodeGetCapabilitiesRequest{} resp, err := nodeClient.NodeGetCapabilities(ctx, req) if err != nil { + if !isFinalError(err) { + return []*csipbv1.NodeServiceCapability{}, volumetypes.NewUncertainProgressError(err.Error()) + } return []*csipbv1.NodeServiceCapability{}, err } return resp.GetCapabilities(), nil diff --git a/pkg/volume/csi/csi_client_test.go b/pkg/volume/csi/csi_client_test.go index cd86f0505e5..0b753779f1f 100644 --- a/pkg/volume/csi/csi_client_test.go +++ b/pkg/volume/csi/csi_client_test.go @@ -28,6 +28,8 @@ import ( csipbv1 "github.com/container-storage-interface/spec/lib/go/csi" "github.com/stretchr/testify/assert" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" api "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" @@ -698,6 +700,27 @@ func TestClientNodeUnstageVolume(t *testing.T) { } } +func TestNodeSupportsStageUnstageReturnNewUncertainProgressError(t *testing.T) { + fakeCloser := fake.NewCloser(t) + client := &csiDriverClient{ + driverName: "Fake Driver Name", + nodeV1ClientCreator: func(addr csiAddr, m *MetricsManager) (csipbv1.NodeClient, io.Closer, error) { + nodeClient := fake.NewNodeClient(true) + nodeClient.SetGetCapabilitiesErr(status.Errorf(codes.Unavailable, "connection error")) + return nodeClient, fakeCloser, nil + }, + } + + _, err := client.NodeSupportsStageUnstage(context.Background()) + + uncertainProgressError := volumetypes.IsUncertainProgressError(err) + if !uncertainProgressError { + t.Errorf("Expected IsUncertainProgressError to be true, got %v", uncertainProgressError) + } + + fakeCloser.Check() +} + func TestClientNodeSupportsStageUnstage(t *testing.T) { testClientNodeSupportsCapabilities(t, func(client *csiDriverClient) (bool, error) { diff --git a/pkg/volume/csi/fake/fake_client.go b/pkg/volume/csi/fake/fake_client.go index 28a284ff1ef..ba87e8b9641 100644 --- a/pkg/volume/csi/fake/fake_client.go +++ b/pkg/volume/csi/fake/fake_client.go @@ -89,6 +89,7 @@ type NodeClient struct { nodeVolumeStatsResp *csipb.NodeGetVolumeStatsResponse FakeNodeExpansionRequest *csipb.NodeExpandVolumeRequest nextErr error + getCapabilitiesErr error } // NewNodeClient returns fake node client @@ -150,6 +151,10 @@ func (f *NodeClient) SetNextError(err error) { f.nextErr = err } +func (f *NodeClient) SetGetCapabilitiesErr(err error) { + f.getCapabilitiesErr = err +} + func (f *NodeClient) SetNodeGetInfoResp(resp *csipb.NodeGetInfoResponse) { f.nodeGetInfoResp = resp } @@ -354,6 +359,10 @@ func (f *NodeClient) NodeGetCapabilities(ctx context.Context, in *csipb.NodeGetC resp := &csipb.NodeGetCapabilitiesResponse{ Capabilities: []*csipb.NodeServiceCapability{}, } + if f.getCapabilitiesErr != nil { + return resp, f.getCapabilitiesErr + } + if f.stageUnstageSet { resp.Capabilities = append(resp.Capabilities, &csipb.NodeServiceCapability{ Type: &csipb.NodeServiceCapability_Rpc{