Skip to content

Commit 2376006

Browse files
committed
feat(core): add indexers for slowest client.List operations
Signed-off-by: Daniil Antoshin <daniil.antoshin@flant.com>
1 parent 60ed24a commit 2376006

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

images/virtualization-artifact/pkg/controller/indexer/indexer.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ const (
3434
IndexFieldVMByVD = "spec.blockDeviceRefs.VirtualDisk"
3535
IndexFieldVMByVI = "spec.blockDeviceRefs.VirtualImage"
3636
IndexFieldVMByCVI = "spec.blockDeviceRefs.ClusterVirtualImage"
37+
IndexFieldVMByIP = "status.ipAddress"
3738
IndexFieldVMByNode = "status.node"
3839

3940
IndexFieldVDByVDSnapshot = "vd,spec.DataSource.ObjectRef.Name,.Kind=VirtualDiskSnapshot"
@@ -64,6 +65,7 @@ var IndexGetters = []IndexGetter{
6465
IndexVMByVD,
6566
IndexVMByVI,
6667
IndexVMByCVI,
68+
IndexVMByIP,
6769
IndexVMByNode,
6870
IndexVMSnapshotByVM,
6971
IndexVMSnapshotByVDSnapshot,
@@ -121,6 +123,16 @@ func IndexVMByCVI() (obj client.Object, field string, extractValue client.Indexe
121123
}
122124
}
123125

126+
func IndexVMByIP() (obj client.Object, field string, extractValue client.IndexerFunc) {
127+
return &v1alpha2.VirtualMachine{}, IndexFieldVMByIP, func(object client.Object) []string {
128+
vm, ok := object.(*v1alpha2.VirtualMachine)
129+
if !ok || vm == nil || vm.Status.IPAddress == "" {
130+
return nil
131+
}
132+
return []string{vm.Status.IPAddress}
133+
}
134+
}
135+
124136
func IndexVMByNode() (obj client.Object, field string, extractValue client.IndexerFunc) {
125137
return &v1alpha2.VirtualMachine{}, IndexFieldVMByNode, func(object client.Object) []string {
126138
vm, ok := object.(*v1alpha2.VirtualMachine)

images/virtualization-artifact/pkg/controller/vd/internal/inuse.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
"github.com/deckhouse/virtualization-controller/pkg/common/object"
3434
commonvd "github.com/deckhouse/virtualization-controller/pkg/common/vd"
3535
"github.com/deckhouse/virtualization-controller/pkg/controller/conditions"
36+
"github.com/deckhouse/virtualization-controller/pkg/controller/indexer"
3637
"github.com/deckhouse/virtualization/api/core/v1alpha2"
3738
"github.com/deckhouse/virtualization/api/core/v1alpha2/vdcondition"
3839
)
@@ -152,8 +153,8 @@ func (h InUseHandler) checkImageUsage(ctx context.Context, vd *v1alpha2.VirtualD
152153

153154
func (h InUseHandler) updateAttachedVirtualMachines(ctx context.Context, vd *v1alpha2.VirtualDisk) error {
154155
var vms v1alpha2.VirtualMachineList
155-
err := h.client.List(ctx, &vms, &client.ListOptions{
156-
Namespace: vd.GetNamespace(),
156+
err := h.client.List(ctx, &vms, &client.MatchingFields{
157+
indexer.IndexFieldVMByVD: vd.Name,
157158
})
158159
if err != nil {
159160
return fmt.Errorf("error getting virtual machines: %w", err)

images/virtualization-artifact/pkg/controller/vmip/internal/attached_handler.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"github.com/deckhouse/virtualization-controller/pkg/common/annotations"
3030
"github.com/deckhouse/virtualization-controller/pkg/common/object"
3131
"github.com/deckhouse/virtualization-controller/pkg/controller/conditions"
32+
"github.com/deckhouse/virtualization-controller/pkg/controller/indexer"
3233
"github.com/deckhouse/virtualization-controller/pkg/eventrecord"
3334
"github.com/deckhouse/virtualization/api/core/v1alpha2"
3435
"github.com/deckhouse/virtualization/api/core/v1alpha2/vmipcondition"
@@ -83,7 +84,9 @@ func (h *AttachedHandler) Handle(ctx context.Context, vmip *v1alpha2.VirtualMach
8384

8485
func (h *AttachedHandler) getAttachedVirtualMachine(ctx context.Context, vmip *v1alpha2.VirtualMachineIPAddress) (*v1alpha2.VirtualMachine, error) {
8586
var vms v1alpha2.VirtualMachineList
86-
err := h.client.List(ctx, &vms, &client.ListOptions{Namespace: vmip.Namespace})
87+
err := h.client.List(ctx, &vms, &client.MatchingFields{
88+
indexer.IndexFieldVMByIP: vmip.Status.Address,
89+
})
8790
if err != nil {
8891
return nil, fmt.Errorf("list vms: %w", err)
8992
}

0 commit comments

Comments
 (0)