11package concurrent_cache
22
33import (
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+
30102func listSubordinateVolumesSetResults (filter func (* storage.Volume ) bool ) func (* Subquery , * Result ) error {
31103 return func (_ * Subquery , r * Result ) error {
32104 subordinateVolumes .rlock ()
0 commit comments