@@ -20,15 +20,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
2020package scheduling
2121
2222import (
23- "encoding/json"
24-
2523 corev1 "k8s.io/api/core/v1"
26- "k8s.io/apimachinery/pkg/api/equality"
2724
2825 appsv1 "github.com/apecloud/kubeblocks/apis/apps/v1"
29- "github.com/apecloud/kubeblocks/pkg/constant"
30- intctrlutil "github.com/apecloud/kubeblocks/pkg/controllerutil"
31- viper "github.com/apecloud/kubeblocks/pkg/viperx"
3226)
3327
3428// ApplySchedulingPolicyToPodSpec overrides podSpec with schedulingPolicy, if schedulingPolicy is not nil
@@ -43,122 +37,12 @@ func ApplySchedulingPolicyToPodSpec(podSpec *corev1.PodSpec, schedulingPolicy *a
4337 }
4438}
4539
46- func BuildSchedulingPolicy (cluster * appsv1.Cluster , compSpec * appsv1.ClusterComponentSpec ) (* appsv1.SchedulingPolicy , error ) {
47- if cluster .Spec .SchedulingPolicy != nil || (compSpec != nil && compSpec .SchedulingPolicy != nil ) {
48- return buildSchedulingPolicy (cluster , compSpec )
49- }
50- return nil , nil
51- }
52-
53- func buildSchedulingPolicy (cluster * appsv1.Cluster , compSpec * appsv1.ClusterComponentSpec ) (* appsv1.SchedulingPolicy , error ) {
54- schedulingPolicy := cluster .Spec .SchedulingPolicy .DeepCopy ()
55- if compSpec != nil && compSpec .SchedulingPolicy != nil {
56- schedulingPolicy = compSpec .SchedulingPolicy .DeepCopy ()
57- }
58-
59- mergeGlobalAffinity := func () error {
60- affinity , err := buildClusterWideAffinity ()
61- if err != nil {
62- return err
63- }
64- schedulingPolicy .Affinity = MergeAffinity (schedulingPolicy .Affinity , affinity )
65- return nil
66- }
67-
68- mergeGlobalTolerations := func () error {
69- tolerations , err := buildClusterWideTolerations ()
70- if err != nil {
71- return err
72- }
73- intctrlutil .MergeList (& schedulingPolicy .Tolerations , & tolerations , makeCmp [corev1.Toleration ]())
40+ func BuildSchedulingPolicy (cluster * appsv1.Cluster , compSpec * appsv1.ClusterComponentSpec ) * appsv1.SchedulingPolicy {
41+ if cluster .Spec .SchedulingPolicy == nil && (compSpec == nil || compSpec .SchedulingPolicy == nil ) {
7442 return nil
7543 }
76-
77- if err := mergeGlobalAffinity (); err != nil {
78- return nil , err
79- }
80- if err := mergeGlobalTolerations (); err != nil {
81- return nil , err
82- }
83- return schedulingPolicy , nil
84- }
85-
86- // buildClusterWideAffinity builds data plane affinity from global config
87- func buildClusterWideAffinity () (* corev1.Affinity , error ) {
88- affinity := new (corev1.Affinity )
89- if val := viper .GetString (constant .CfgKeyDataPlaneAffinity ); val != "" {
90- if err := json .Unmarshal ([]byte (val ), & affinity ); err != nil {
91- return nil , err
92- }
93- }
94- return affinity , nil
95- }
96-
97- // buildClusterWideTolerations builds data plane tolerations from global config
98- func buildClusterWideTolerations () ([]corev1.Toleration , error ) {
99- // build data plane tolerations from config
100- var tolerations []corev1.Toleration
101- if val := viper .GetString (constant .CfgKeyDataPlaneTolerations ); val != "" {
102- if err := json .Unmarshal ([]byte (val ), & tolerations ); err != nil {
103- return nil , err
104- }
105- }
106- return tolerations , nil
107- }
108-
109- func makeCmp [E any ]() func (E ) func (E ) bool {
110- return func (a E ) func (E ) bool {
111- return func (b E ) bool {
112- return equality .Semantic .DeepEqual (a , b )
113- }
114- }
115- }
116-
117- // MergeAffinity merges src to dst, return value is deepcopied
118- // Items in src will overwrite items in dst, if possible.
119- func MergeAffinity (src , dst * corev1.Affinity ) * corev1.Affinity {
120- if src == nil {
121- return dst .DeepCopy ()
122- }
123-
124- if dst == nil {
125- return src .DeepCopy ()
126- }
127-
128- rtn := dst .DeepCopy ()
129-
130- // Merge PodAffinity
131- if src .PodAffinity != nil {
132- if rtn .PodAffinity == nil {
133- rtn .PodAffinity = & corev1.PodAffinity {}
134- }
135- intctrlutil .MergeList (& src .PodAffinity .RequiredDuringSchedulingIgnoredDuringExecution , & rtn .PodAffinity .RequiredDuringSchedulingIgnoredDuringExecution , makeCmp [corev1.PodAffinityTerm ]())
136- intctrlutil .MergeList (& src .PodAffinity .PreferredDuringSchedulingIgnoredDuringExecution , & rtn .PodAffinity .PreferredDuringSchedulingIgnoredDuringExecution , makeCmp [corev1.WeightedPodAffinityTerm ]())
137- }
138-
139- // Merge PodAntiAffinity
140- if src .PodAntiAffinity != nil {
141- if rtn .PodAntiAffinity == nil {
142- rtn .PodAntiAffinity = & corev1.PodAntiAffinity {}
143- }
144- intctrlutil .MergeList (& src .PodAntiAffinity .RequiredDuringSchedulingIgnoredDuringExecution , & rtn .PodAntiAffinity .RequiredDuringSchedulingIgnoredDuringExecution , makeCmp [corev1.PodAffinityTerm ]())
145- intctrlutil .MergeList (& src .PodAntiAffinity .PreferredDuringSchedulingIgnoredDuringExecution , & rtn .PodAntiAffinity .PreferredDuringSchedulingIgnoredDuringExecution , makeCmp [corev1.WeightedPodAffinityTerm ]())
146- }
147-
148- // Merge NodeAffinity
149- if src .NodeAffinity != nil {
150- if rtn .NodeAffinity == nil {
151- rtn .NodeAffinity = & corev1.NodeAffinity {}
152- }
153- if src .NodeAffinity .RequiredDuringSchedulingIgnoredDuringExecution != nil {
154- if rtn .NodeAffinity .RequiredDuringSchedulingIgnoredDuringExecution == nil {
155- rtn .NodeAffinity .RequiredDuringSchedulingIgnoredDuringExecution = & corev1.NodeSelector {}
156- }
157- // FIXME: NodeSelectorTerms are ORed, this can be a problem
158- intctrlutil .MergeList (& src .NodeAffinity .RequiredDuringSchedulingIgnoredDuringExecution .NodeSelectorTerms , & rtn .NodeAffinity .RequiredDuringSchedulingIgnoredDuringExecution .NodeSelectorTerms , makeCmp [corev1.NodeSelectorTerm ]())
159- }
160- intctrlutil .MergeList (& src .NodeAffinity .PreferredDuringSchedulingIgnoredDuringExecution , & rtn .NodeAffinity .PreferredDuringSchedulingIgnoredDuringExecution , makeCmp [corev1.PreferredSchedulingTerm ]())
44+ if compSpec != nil && compSpec .SchedulingPolicy != nil {
45+ return compSpec .SchedulingPolicy .DeepCopy ()
16146 }
162-
163- return rtn
47+ return cluster .Spec .SchedulingPolicy .DeepCopy ()
16448}
0 commit comments