@@ -44,14 +44,18 @@ func ApplySchedulingPolicyToPodSpec(podSpec *corev1.PodSpec, schedulingPolicy *a
4444}
4545
4646func BuildSchedulingPolicy (cluster * appsv1.Cluster , compSpec * appsv1.ClusterComponentSpec ) (* appsv1.SchedulingPolicy , error ) {
47- if cluster .Spec .SchedulingPolicy != nil || (compSpec != nil && compSpec .SchedulingPolicy != nil ) {
47+ if cluster .Spec .SchedulingPolicy != nil ||
48+ (compSpec != nil && compSpec .SchedulingPolicy != nil ) || hasClusterAffinityOrTolerations () {
4849 return buildSchedulingPolicy (cluster , compSpec )
4950 }
5051 return nil , nil
5152}
5253
5354func buildSchedulingPolicy (cluster * appsv1.Cluster , compSpec * appsv1.ClusterComponentSpec ) (* appsv1.SchedulingPolicy , error ) {
54- schedulingPolicy := cluster .Spec .SchedulingPolicy .DeepCopy ()
55+ schedulingPolicy := & appsv1.SchedulingPolicy {}
56+ if cluster .Spec .SchedulingPolicy != nil {
57+ schedulingPolicy = cluster .Spec .SchedulingPolicy .DeepCopy ()
58+ }
5559 if compSpec != nil && compSpec .SchedulingPolicy != nil {
5660 schedulingPolicy = compSpec .SchedulingPolicy .DeepCopy ()
5761 }
@@ -61,7 +65,7 @@ func buildSchedulingPolicy(cluster *appsv1.Cluster, compSpec *appsv1.ClusterComp
6165 if err != nil {
6266 return err
6367 }
64- schedulingPolicy .Affinity = MergeAffinity (schedulingPolicy .Affinity , affinity )
68+ schedulingPolicy .Affinity = mergeAffinity (schedulingPolicy .Affinity , affinity )
6569 return nil
6670 }
6771
@@ -70,7 +74,7 @@ func buildSchedulingPolicy(cluster *appsv1.Cluster, compSpec *appsv1.ClusterComp
7074 if err != nil {
7175 return err
7276 }
73- intctrlutil .MergeList (& schedulingPolicy . Tolerations , & tolerations , makeCmp [corev1.Toleration ]())
77+ intctrlutil .MergeList (& tolerations , & schedulingPolicy . Tolerations , makeCmp [corev1.Toleration ]())
7478 return nil
7579 }
7680
@@ -83,25 +87,31 @@ func buildSchedulingPolicy(cluster *appsv1.Cluster, compSpec *appsv1.ClusterComp
8387 return schedulingPolicy , nil
8488}
8589
86- // buildClusterWideAffinity builds data plane affinity from global config
90+ func hasClusterAffinityOrTolerations () bool {
91+ return viper .GetString (constant .CfgKeyDataPlaneAffinity ) != "" ||
92+ viper .GetString (constant .CfgKeyDataPlaneTolerations ) != ""
93+ }
94+
8795func buildClusterWideAffinity () (* corev1.Affinity , error ) {
96+ val := viper .GetString (constant .CfgKeyDataPlaneAffinity )
97+ if val == "" {
98+ return nil , nil
99+ }
88100 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- }
101+ if err := json .Unmarshal ([]byte (val ), & affinity ); err != nil {
102+ return nil , err
93103 }
94104 return affinity , nil
95105}
96106
97- // buildClusterWideTolerations builds data plane tolerations from global config
98107func buildClusterWideTolerations () ([]corev1.Toleration , error ) {
99- // build data plane tolerations from config
108+ val := viper .GetString (constant .CfgKeyDataPlaneTolerations )
109+ if val == "" {
110+ return nil , nil
111+ }
100112 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- }
113+ if err := json .Unmarshal ([]byte (val ), & tolerations ); err != nil {
114+ return nil , err
105115 }
106116 return tolerations , nil
107117}
@@ -114,9 +124,7 @@ func makeCmp[E any]() func(E) func(E) bool {
114124 }
115125}
116126
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 {
127+ func mergeAffinity (src , dst * corev1.Affinity ) * corev1.Affinity {
120128 if src == nil {
121129 return dst .DeepCopy ()
122130 }
@@ -127,7 +135,7 @@ func MergeAffinity(src, dst *corev1.Affinity) *corev1.Affinity {
127135
128136 rtn := dst .DeepCopy ()
129137
130- // Merge PodAffinity
138+ // merge PodAffinity
131139 if src .PodAffinity != nil {
132140 if rtn .PodAffinity == nil {
133141 rtn .PodAffinity = & corev1.PodAffinity {}
@@ -136,7 +144,7 @@ func MergeAffinity(src, dst *corev1.Affinity) *corev1.Affinity {
136144 intctrlutil .MergeList (& src .PodAffinity .PreferredDuringSchedulingIgnoredDuringExecution , & rtn .PodAffinity .PreferredDuringSchedulingIgnoredDuringExecution , makeCmp [corev1.WeightedPodAffinityTerm ]())
137145 }
138146
139- // Merge PodAntiAffinity
147+ // merge PodAntiAffinity
140148 if src .PodAntiAffinity != nil {
141149 if rtn .PodAntiAffinity == nil {
142150 rtn .PodAntiAffinity = & corev1.PodAntiAffinity {}
@@ -145,7 +153,7 @@ func MergeAffinity(src, dst *corev1.Affinity) *corev1.Affinity {
145153 intctrlutil .MergeList (& src .PodAntiAffinity .PreferredDuringSchedulingIgnoredDuringExecution , & rtn .PodAntiAffinity .PreferredDuringSchedulingIgnoredDuringExecution , makeCmp [corev1.WeightedPodAffinityTerm ]())
146154 }
147155
148- // Merge NodeAffinity
156+ // merge NodeAffinity
149157 if src .NodeAffinity != nil {
150158 if rtn .NodeAffinity == nil {
151159 rtn .NodeAffinity = & corev1.NodeAffinity {}
0 commit comments