Skip to content

Commit 47fa964

Browse files
authored
added support to restore cross account snapshot (#198)
* added support to restore cross account snapshot Signed-off-by: Arashad Ahamad <[email protected]> * fixed lint issue Signed-off-by: Arashad Ahamad <[email protected]> * fixed travis fmt and unit tests related with snapshot Signed-off-by: Arashad Ahamad <[email protected]> * fixed unit tests code coverage Signed-off-by: Arashad Ahamad <[email protected]> --------- Signed-off-by: Arashad Ahamad <[email protected]>
1 parent 088d0a7 commit 47fa964

File tree

87 files changed

+6296
-498
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+6296
-498
lines changed

go.mod

+6-6
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/kubernetes-sigs/ibm-vpc-block-csi-driver
33
go 1.22.0
44

55
require (
6-
github.com/IBM/ibm-csi-common v1.1.15
6+
github.com/IBM/ibm-csi-common v1.1.18
77
github.com/IBM/ibmcloud-volume-interface v1.2.6
88
github.com/IBM/ibmcloud-volume-vpc v1.1.11
99
github.com/IBM/secret-utils-lib v1.1.11
@@ -14,8 +14,8 @@ require (
1414
github.com/prometheus/client_golang v1.19.1
1515
github.com/stretchr/testify v1.9.0
1616
go.uber.org/zap v1.26.0
17-
golang.org/x/net v0.26.0
18-
golang.org/x/sys v0.21.0
17+
golang.org/x/net v0.28.0
18+
golang.org/x/sys v0.23.0
1919
google.golang.org/grpc v1.65.0
2020
google.golang.org/protobuf v1.34.2
2121
k8s.io/klog/v2 v2.130.1
@@ -82,10 +82,10 @@ require (
8282
github.com/spf13/pflag v1.0.5 // indirect
8383
go.mongodb.org/mongo-driver v1.14.0 // indirect
8484
go.uber.org/multierr v1.11.0 // indirect
85-
golang.org/x/crypto v0.24.0 // indirect
85+
golang.org/x/crypto v0.26.0 // indirect
8686
golang.org/x/oauth2 v0.21.0 // indirect
87-
golang.org/x/term v0.21.0 // indirect
88-
golang.org/x/text v0.16.0 // indirect
87+
golang.org/x/term v0.23.0 // indirect
88+
golang.org/x/text v0.17.0 // indirect
8989
golang.org/x/time v0.3.0 // indirect
9090
google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect
9191
gopkg.in/inf.v0 v0.9.1 // indirect

go.sum

+16-16
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ github.com/IBM-Cloud/ibm-cloud-cli-sdk v0.6.7 h1:eHgfQl6IeSmzWUyiSi13CvoFYsovoyq
66
github.com/IBM-Cloud/ibm-cloud-cli-sdk v0.6.7/go.mod h1:RiUvKuHKTBmBApDMUQzBL14pQUGKcx/IioKQPIcRQjs=
77
github.com/IBM/go-sdk-core/v5 v5.17.4 h1:VGb9+mRrnS2HpHZFM5hy4J6ppIWnwNrw0G+tLSgcJLc=
88
github.com/IBM/go-sdk-core/v5 v5.17.4/go.mod h1:KsAAI7eStAWwQa4F96MLy+whYSh39JzNjklZRbN/8ns=
9-
github.com/IBM/ibm-csi-common v1.1.15 h1:oJ0NsrVBqfXKCZXSc/EI+s7/RlUK/TpzTI+jcdoAqpI=
10-
github.com/IBM/ibm-csi-common v1.1.15/go.mod h1:oKYsmovJ4HAmbHfhQvVn1dJ+xeQHqaa3hQsN/Z5itlc=
9+
github.com/IBM/ibm-csi-common v1.1.18 h1:CbzoONFN6vdmPLoXGxygiq3sbr2xtAcVUb0Vqj3/HNI=
10+
github.com/IBM/ibm-csi-common v1.1.18/go.mod h1:bDs9CLfr09kFpSMcR35e9AmyR2pSydx8goHjagFPrHs=
1111
github.com/IBM/ibmcloud-volume-interface v1.2.6 h1:OLumrSQ0XTOp6gW+k0z2X53uTYOIt1wWSkTCXzK/vAM=
1212
github.com/IBM/ibmcloud-volume-interface v1.2.6/go.mod h1:sDeQiPuN8k9yTRl9FbE2GZCXPNg4cV3oldUfL8wwGNA=
1313
github.com/IBM/ibmcloud-volume-vpc v1.1.11 h1:HnDPi7ZN+iAPVLZ29sLeQnJ7y0lvorc8/q4csDnxht4=
@@ -121,8 +121,8 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
121121
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
122122
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
123123
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
124-
github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af h1:kmjWCqn2qkEml422C2Rrd27c3VGxi6a/6HNq8QmHRKM=
125-
github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo=
124+
github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k=
125+
github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo=
126126
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
127127
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
128128
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -231,8 +231,8 @@ go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
231231
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
232232
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
233233
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
234-
golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI=
235-
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
234+
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
235+
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
236236
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
237237
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
238238
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -251,8 +251,8 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/
251251
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
252252
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
253253
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
254-
golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ=
255-
golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
254+
golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
255+
golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
256256
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
257257
golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=
258258
golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
@@ -276,17 +276,17 @@ golang.org/x/sys v0.0.0-20201207223542-d4d67f95c62d/go.mod h1:h1NjWce9XRLGQEsW7w
276276
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
277277
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
278278
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
279-
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
280-
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
279+
golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM=
280+
golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
281281
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
282-
golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA=
283-
golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
282+
golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
283+
golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk=
284284
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
285285
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
286286
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
287287
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
288-
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
289-
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
288+
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
289+
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
290290
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
291291
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
292292
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -299,8 +299,8 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
299299
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
300300
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
301301
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
302-
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
303-
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
302+
golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
303+
golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
304304
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
305305
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
306306
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

pkg/ibmcsidriver/controller.go

+32-17
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Copyright 2021 The Kubernetes Authors.
2+
Copyright 2024 The Kubernetes Authors.
33
44
Licensed under the Apache License, Version 2.0 (the "License");
55
you may not use this file except in compliance with the License.
@@ -527,7 +527,7 @@ func (csiCS *CSIControllerServer) DeleteSnapshot(ctx context.Context, req *csi.D
527527
}
528528

529529
snapshot := &provider.Snapshot{}
530-
snapshot.SnapshotID = getSnapshotIDFromCRN(snapshotID)
530+
snapshot.SnapshotID, _ = getSnapshotAndAccountIDsFromCRN(snapshotID)
531531

532532
err = session.DeleteSnapshot(snapshot)
533533
if err != nil {
@@ -561,24 +561,39 @@ func (csiCS *CSIControllerServer) ListSnapshots(ctx context.Context, req *csi.Li
561561

562562
entries := []*csi.ListSnapshotsResponse_Entry{}
563563
snapshotID := req.GetSnapshotId()
564-
if len(snapshotID) != 0 {
565-
snapshot, err := session.GetSnapshot(snapshotID)
566-
if snapshot == nil {
567-
return &csi.ListSnapshotsResponse{}, nil
564+
snapID, snapshotAccountID := getSnapshotAndAccountIDsFromCRN(snapshotID)
565+
if len(snapID) != 0 {
566+
if csiCS.Driver.accountID == snapshotAccountID { // in case snapshotID's account and cluster account ID is same
567+
snapshot, err := session.GetSnapshot(snapID)
568+
if snapshot == nil {
569+
return &csi.ListSnapshotsResponse{}, nil
570+
}
571+
if providerError.RetrivalFailed == providerError.GetErrorType(err) {
572+
ctxLogger.Info("Snapshot not found. Returning success ...")
573+
return &csi.ListSnapshotsResponse{}, nil
574+
}
575+
return &csi.ListSnapshotsResponse{
576+
Entries: append(entries, &csi.ListSnapshotsResponse_Entry{
577+
Snapshot: createCSISnapshotResponse(*snapshot).Snapshot,
578+
}),
579+
NextToken: "",
580+
}, nil
581+
} else { // In case of cross account volume snapshot
582+
return &csi.ListSnapshotsResponse{
583+
Entries: append(entries, &csi.ListSnapshotsResponse_Entry{
584+
Snapshot: &csi.Snapshot{
585+
SnapshotId: snapshotID,
586+
SourceVolumeId: "",
587+
ReadyToUse: true,
588+
},
589+
}),
590+
NextToken: "",
591+
}, nil
568592
}
569-
if providerError.RetrivalFailed == providerError.GetErrorType(err) {
570-
ctxLogger.Info("Snapshot not found. Returning success ...")
571-
return &csi.ListSnapshotsResponse{}, nil
572-
}
573-
return &csi.ListSnapshotsResponse{
574-
Entries: append(entries, &csi.ListSnapshotsResponse_Entry{
575-
Snapshot: createCSISnapshotResponse(*snapshot).Snapshot,
576-
}),
577-
NextToken: "",
578-
}, nil
593+
579594
}
580595

581-
maxEntries := int(req.MaxEntries)
596+
maxEntries := int(req.GetMaxEntries())
582597
tags := map[string]string{}
583598
sourceVolumeID := req.GetSourceVolumeId()
584599
if len(sourceVolumeID) != 0 {

pkg/ibmcsidriver/controller_helper.go

+19-4
Original file line numberDiff line numberDiff line change
@@ -461,13 +461,28 @@ func createCSIVolumeResponse(vol provider.Volume, capBytes int64, zones []string
461461
return volResp
462462
}
463463

464-
// getSnapshotIDFromCRN ...
465-
func getSnapshotIDFromCRN(crn string) string {
464+
// getAccountID ...
465+
func getAccountID(input string) string {
466+
tokens := strings.Split(input, "/")
467+
468+
if len(tokens) > 1 {
469+
return tokens[1]
470+
} else {
471+
return ""
472+
}
473+
}
474+
475+
// getSnapshotAndAccountIDsFromCRN ...
476+
func getSnapshotAndAccountIDsFromCRN(crn string) (string, string) {
466477
// This method will be able to handle either crn is actual crn or caller passed snapshot ID also
467478
// expected CRN -> crn:v1:service:public:is:us-south:a/c468d8642937fecd8a0860fe0f379bf9::snapshot:r006-1234fe0c-3d9b-4c95-a6d1-8e0d4bcb6ecb
468479
// or crn passed as sanpshotID like r006-1234fe0c-3d9b-4c95-a6d1-8e0d4bcb6ecb
469-
crnParts := strings.Split(crn, ":")
470-
return crnParts[len(crnParts)-1]
480+
crnTokens := strings.Split(crn, ":")
481+
482+
if len(crnTokens) > 9 {
483+
return crnTokens[len(crnTokens)-1], getAccountID(crnTokens[len(crnTokens)-4])
484+
}
485+
return crn, "" // assuming that crn will contain only snapshotID
471486
}
472487

473488
// createCSISnapshotResponse ...

pkg/ibmcsidriver/controller_test.go

+8
Original file line numberDiff line numberDiff line change
@@ -1474,6 +1474,14 @@ func TestListSnapshots(t *testing.T) {
14741474
expErrCode: codes.OK,
14751475
libSnapshotError: nil,
14761476
},
1477+
{
1478+
name: "List snapshot with snapshotID as CRN",
1479+
snapshotID: "crn:v1:staging:public:is:us-south:a/77f2bcedd73fe82c1c::snapshot:r134-1ad4-4852-b24a-b65050e42429",
1480+
expectedEntries: 1,
1481+
libGetSnapshotErr: false,
1482+
expErrCode: codes.OK,
1483+
libSnapshotError: nil,
1484+
},
14771485
}
14781486
timeNow := time.Now()
14791487
// Creating test logger

pkg/ibmcsidriver/ibm_csi_driver.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Copyright 2021 The Kubernetes Authors.
2+
Copyright 2024 The Kubernetes Authors.
33
44
Licensed under the Apache License, Version 2.0 (the "License");
55
you may not use this file except in compliance with the License.
@@ -35,6 +35,7 @@ type IBMCSIDriver struct {
3535
vendorVersion string
3636
logger *zap.Logger
3737
region string
38+
accountID string
3839
ids *CSIIdentityServer
3940
ns *CSINodeServer
4041
cs *CSIControllerServer
@@ -111,6 +112,7 @@ func (icDriver *IBMCSIDriver) SetupIBMCSIDriver(provider cloudProvider.CloudProv
111112
return fmt.Errorf("Controller_Helper: Failed to initialize node metadata: error: %v", err)
112113
}
113114
icDriver.region = regionMetadata.GetRegion()
115+
icDriver.accountID = regionMetadata.GetAccountID()
114116

115117
return nil
116118
}

pkg/ibmcsidriver/server.go

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Copyright 2021 The Kubernetes Authors.
2+
Copyright 2024 The Kubernetes Authors.
33
44
Licensed under the Apache License, Version 2.0 (the "License");
55
you may not use this file except in compliance with the License.
@@ -19,18 +19,17 @@ package ibmcsidriver
1919

2020
import (
2121
"errors"
22+
csi "github.com/container-storage-interface/spec/lib/go/csi"
23+
"github.com/golang/glog"
24+
"go.uber.org/zap"
25+
"golang.org/x/net/context"
26+
"google.golang.org/grpc"
2227
"net"
2328
"net/url"
2429
"os"
2530
"os/signal"
2631
"sync"
2732
"syscall"
28-
29-
csi "github.com/container-storage-interface/spec/lib/go/csi"
30-
"github.com/golang/glog"
31-
"go.uber.org/zap"
32-
"golang.org/x/net/context"
33-
"google.golang.org/grpc"
3433
)
3534

3635
// NonBlockingGRPCServer Defines Non blocking GRPC server interfaces

0 commit comments

Comments
 (0)