Skip to content

Commit bebcff2

Browse files
authored
Performance Improvement - Reduce unstructured usages from Storage Pools (#3435)
1 parent 756dd5f commit bebcff2

File tree

9 files changed

+340
-311
lines changed

9 files changed

+340
-311
lines changed

pkg/apis/storagepool/cns/v1alpha1/storagepool_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ type StoragePoolStatus struct {
4444
Capacity *PoolCapacity `json:"capacity,omitempty"`
4545
// Error that has occurred on the storage pool. Present only when there is an error.
4646
// +optional
47-
Error StoragePoolError `json:"error,omitempty"`
47+
Error *StoragePoolError `json:"error,omitempty"`
4848
// DiskDecomm indicates the status of disk decommission for the given storagepool
4949
// +optional
5050
DiskDecomm map[string]string `json:"diskDecomm,omitempty"`

pkg/csi/service/wcp/controller_helper.go

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,8 @@ import (
3535
"google.golang.org/grpc/status"
3636
v1 "k8s.io/api/core/v1"
3737
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
38-
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
3938
"k8s.io/apimachinery/pkg/fields"
40-
"k8s.io/client-go/dynamic"
39+
"k8s.io/apimachinery/pkg/types"
4140
api "k8s.io/kubernetes/pkg/apis/core"
4241
"sigs.k8s.io/controller-runtime/pkg/client/config"
4342
spv1alpha1 "sigs.k8s.io/vsphere-csi-driver/v3/pkg/apis/storagepool/cns/v1alpha1"
@@ -399,23 +398,24 @@ func getDatastoreURLFromStoragePool(ctx context.Context, spName string) (string,
399398
}
400399

401400
// create a new StoragePool client.
402-
spclient, err := dynamic.NewForConfig(cfg)
401+
c, err := k8s.NewClientForGroup(ctx, cfg, spv1alpha1.SchemeGroupVersion.Group)
403402
if err != nil {
404403
return "", fmt.Errorf("failed to create StoragePool client using config. Err: %+v", err)
405404
}
406-
spResource := spv1alpha1.SchemeGroupVersion.WithResource("storagepools")
407405

406+
sp := &spv1alpha1.StoragePool{}
408407
// Get StoragePool with spName.
409-
sp, err := spclient.Resource(spResource).Get(ctx, spName, metav1.GetOptions{})
408+
err = c.Get(ctx, types.NamespacedName{Name: spName}, sp)
410409
if err != nil {
411410
return "", fmt.Errorf("failed to get StoragePool with name %s: %+v", spName, err)
412411
}
413412

414413
// extract the datastoreUrl field.
415-
datastoreURL, found, err := unstructured.NestedString(sp.Object, "spec", "parameters", "datastoreUrl")
416-
if !found || err != nil {
414+
datastoreURL, found := sp.Spec.Parameters["datastoreUrl"]
415+
if !found {
417416
return "", fmt.Errorf("failed to find datastoreUrl in StoragePool %s", spName)
418417
}
418+
419419
return datastoreURL, nil
420420
}
421421

@@ -429,31 +429,30 @@ func getStoragePoolInfo(ctx context.Context, spName string) ([]string, string, e
429429
}
430430

431431
// Create a new StoragePool client.
432-
spClient, err := dynamic.NewForConfig(cfg)
432+
c, err := k8s.NewClientForGroup(ctx, cfg, spv1alpha1.SchemeGroupVersion.Group)
433433
if err != nil {
434434
return nil, "", fmt.Errorf("failed to create StoragePool client using config. Err: %+v", err)
435435
}
436-
spResource := spv1alpha1.SchemeGroupVersion.WithResource("storagepools")
437436

438437
// Get StoragePool with spName.
439-
sp, err := spClient.Resource(spResource).Get(ctx, spName, metav1.GetOptions{})
438+
sp := &spv1alpha1.StoragePool{}
439+
err = c.Get(ctx, types.NamespacedName{Name: spName}, sp)
440440
if err != nil {
441441
return nil, "", fmt.Errorf("failed to get StoragePool with name %s: %+v", spName, err)
442442
}
443443

444444
// Extract the accessibleNodes field.
445-
accessibleNodes, found, err := unstructured.NestedStringSlice(sp.Object, "status", "accessibleNodes")
446-
if !found || err != nil {
447-
return nil, "", fmt.Errorf("failed to find datastoreUrl in StoragePool %s", spName)
445+
if len(sp.Status.AccessibleNodes) == 0 {
446+
return nil, "", fmt.Errorf("failed to find accessible nodes in StoragePool %s", spName)
448447
}
449448

450449
// Get the storage pool type.
451-
poolType, found, err := unstructured.NestedString(sp.Object, "metadata", "labels", spTypeKey)
452-
if !found || err != nil {
450+
poolType, found := sp.ObjectMeta.Labels[spTypeKey]
451+
if !found {
453452
return nil, "", fmt.Errorf("failed to find pool type in StoragePool %s", spName)
454453
}
455454

456-
return accessibleNodes, poolType, nil
455+
return sp.Status.AccessibleNodes, poolType, nil
457456
}
458457

459458
// isValidAccessibilityRequirements validates if the given accessibility

pkg/kubernetes/kubernetes.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import (
5656

5757
cnsoperatorv1alpha1 "sigs.k8s.io/vsphere-csi-driver/v3/pkg/apis/cnsoperator"
5858
migrationv1alpha1 "sigs.k8s.io/vsphere-csi-driver/v3/pkg/apis/migration/v1alpha1"
59+
storagepoolAPIs "sigs.k8s.io/vsphere-csi-driver/v3/pkg/apis/storagepool"
5960
wcpcapapis "sigs.k8s.io/vsphere-csi-driver/v3/pkg/apis/wcpcapabilities"
6061
cnsconfig "sigs.k8s.io/vsphere-csi-driver/v3/pkg/common/config"
6162
"sigs.k8s.io/vsphere-csi-driver/v3/pkg/csi/service/logger"
@@ -286,15 +287,21 @@ func NewClientForGroup(ctx context.Context, config *restclient.Config, groupName
286287
log.Errorf("failed to add CNSVolumeInfo to scheme with error: %+v", err)
287288
return nil, err
288289
}
290+
291+
err = storagepoolAPIs.AddToScheme(scheme)
292+
if err != nil {
293+
log.Errorf("failed to add StoragePool scheme with error :%+v", err)
294+
return nil, err
295+
}
289296
}
290-
client, err := client.New(config, client.Options{
297+
298+
c, err := client.New(config, client.Options{
291299
Scheme: scheme,
292300
})
293301
if err != nil {
294302
log.Errorf("failed to create client for group %s with err: %+v", groupName, err)
295303
}
296-
return client, err
297-
304+
return c, err
298305
}
299306

300307
// NewCnsFileAccessConfigWatcher creates a new ListWatch for VirtualMachines

0 commit comments

Comments
 (0)