Skip to content

Commit fcbf12c

Browse files
authored
Add subordinate volume support for autogrow in concurrent core
1 parent ddafdc7 commit fcbf12c

File tree

4 files changed

+1470
-91
lines changed

4 files changed

+1470
-91
lines changed

core/concurrent_cache/subordinate_volume.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package concurrent_cache
22

33
import (
4+
"strings"
5+
46
"github.com/netapp/trident/storage"
57
)
68

@@ -27,6 +29,76 @@ func ListSubordinateVolumesForVolume(volumeID string) Subquery {
2729
}
2830
}
2931

32+
// ListSubordinateVolumesForAutogrowPolicy returns all subordinate volumes using a specific autogrow policy
33+
func ListSubordinateVolumesForAutogrowPolicy(autogrowPolicyName string) Subquery {
34+
return Subquery{
35+
res: subordinateVolume,
36+
op: list,
37+
setResults: listSubordinateVolumesSetResults(func(v *storage.Volume) bool {
38+
return v.EffectiveAGPolicy.PolicyName == autogrowPolicyName
39+
}),
40+
}
41+
}
42+
43+
// ListSubordinateVolumesForStorageClass returns all subordinate volumes using a specific storage class
44+
func ListSubordinateVolumesForStorageClass(scName string) Subquery {
45+
return Subquery{
46+
res: subordinateVolume,
47+
op: list,
48+
setResults: listSubordinateVolumesSetResults(func(v *storage.Volume) bool {
49+
return v.Config.StorageClass == scName
50+
}),
51+
}
52+
}
53+
54+
// ListSubordinateVolumesForStorageClassWithoutAutogrowOverride returns subordinate volumes using a specific storage
55+
// class
56+
// that have NO volume-level autogrow policy (i.e., they inherit from StorageClass)
57+
func ListSubordinateVolumesForStorageClassWithoutAutogrowOverride(scName string) Subquery {
58+
return Subquery{
59+
res: subordinateVolume,
60+
op: list,
61+
setResults: listSubordinateVolumesSetResults(func(v *storage.Volume) bool {
62+
return v.Config.StorageClass == scName && v.Config.RequestedAutogrowPolicy == ""
63+
}),
64+
}
65+
}
66+
67+
// ListSubordinateVolumesForAutogrowPolicyReevaluation returns subordinate volumes that might need to use the given
68+
// policy.
69+
// This includes subordinate volumes that:
70+
// 1. Have a volume-level autogrow policy matching the policy name (case-insensitive), OR
71+
// 2. Have no volume-level autogrow policy (might inherit from StorageClass)
72+
// AND are not already using the policy.
73+
func ListSubordinateVolumesForAutogrowPolicyReevaluation(policyName string) Subquery {
74+
return Subquery{
75+
res: subordinateVolume,
76+
op: list,
77+
setResults: listSubordinateVolumesSetResults(func(v *storage.Volume) bool {
78+
requestedAutogrowPolicy := v.Config.RequestedAutogrowPolicy
79+
80+
// Skip if requestedAutogrowPolicy is "none" (any case variation)
81+
if strings.EqualFold(requestedAutogrowPolicy, "none") {
82+
return false
83+
}
84+
85+
// Skip if requestedAutogrowPolicy explicitly references a different policy
86+
if requestedAutogrowPolicy != "" && !strings.EqualFold(requestedAutogrowPolicy, policyName) {
87+
return false
88+
}
89+
90+
// Skip if already using this policy
91+
if v.EffectiveAGPolicy.PolicyName == policyName {
92+
return false
93+
}
94+
95+
// Include: no requestedAutogrowPolicy OR requestedAutogrowPolicy matches policy,
96+
// and not currently using it
97+
return true
98+
}),
99+
}
100+
}
101+
30102
func listSubordinateVolumesSetResults(filter func(*storage.Volume) bool) func(*Subquery, *Result) error {
31103
return func(_ *Subquery, r *Result) error {
32104
subordinateVolumes.rlock()

0 commit comments

Comments
 (0)