@@ -2017,11 +2017,13 @@ func TestReconcile_TrafficDistribution(t *testing.T) {
2017
2017
desc string
2018
2018
2019
2019
trafficDistributionFeatureGateEnabled bool
2020
+ preferSameFeatureGateEnabled bool
2020
2021
trafficDistribution * string
2021
2022
topologyAnnotation string
2022
2023
2023
- // Defines how many hints belong to a particular zone.
2024
+ // Defines how many hints belong to a particular zone/node
2024
2025
wantHintsDistributionByZone map [string ]int
2026
+ wantHintsDistributionByNode map [string ]int
2025
2027
// Number of endpoints where the zone hints are different from the zone of
2026
2028
// the endpoint itself.
2027
2029
wantEndpointsWithCrossZoneHints int
@@ -2123,6 +2125,62 @@ func TestReconcile_TrafficDistribution(t *testing.T) {
2123
2125
slicesChangedPerSyncTrafficDist : 0 , // 0 means trafficDistribution was not used.
2124
2126
},
2125
2127
},
2128
+ {
2129
+ name : "trafficDistribution=PreferSameNode, PSTD enabled" ,
2130
+ desc : "When trafficDistribution is PreferSameNode and PreferSameTrafficDistribution is enabled, both zone and node hints should be filled out" ,
2131
+ trafficDistributionFeatureGateEnabled : true ,
2132
+ preferSameFeatureGateEnabled : true ,
2133
+ trafficDistribution : ptr .To (corev1 .ServiceTrafficDistributionPreferSameNode ),
2134
+ topologyAnnotation : "Disabled" ,
2135
+ wantHintsDistributionByZone : map [string ]int {
2136
+ "zone-a" : 1 , // {pod-0}
2137
+ "zone-b" : 3 , // {pod-1, pod-2, pod-3}
2138
+ "zone-c" : 2 , // {pod-4, pod-5}
2139
+ },
2140
+ wantHintsDistributionByNode : map [string ]int {
2141
+ "node-0" : 1 , // {pod-0}
2142
+ "node-1" : 3 , // {pod-1, pod-2, pod-3}
2143
+ "node-2" : 2 , // {pod-4, pod-5}
2144
+ },
2145
+ wantMetrics : expectedMetrics {
2146
+ desiredSlices : 1 ,
2147
+ actualSlices : 1 ,
2148
+ desiredEndpoints : 6 ,
2149
+ addedPerSync : 6 ,
2150
+ removedPerSync : 0 ,
2151
+ numCreated : 1 ,
2152
+ numUpdated : 0 ,
2153
+ numDeleted : 0 ,
2154
+ slicesChangedPerSync : 0 , // 0 means either topologyAnnotation or trafficDistribution was used.
2155
+ slicesChangedPerSyncTopology : 0 , // 0 means topologyAnnotation was not used.
2156
+ slicesChangedPerSyncTrafficDist : 1 , // 1 EPS configured using trafficDistribution.
2157
+ servicesCountByTrafficDistribution : map [string ]int {
2158
+ "PreferSameNode" : 1 ,
2159
+ },
2160
+ },
2161
+ },
2162
+ {
2163
+ name : "trafficDistribution=PreferSameZone, PSTD disabled" ,
2164
+ desc : "When trafficDistribution is PreferSameZone and PreferSameTrafficDistribution is disabled, no hints should be set" ,
2165
+ trafficDistributionFeatureGateEnabled : true ,
2166
+ preferSameFeatureGateEnabled : false ,
2167
+ trafficDistribution : ptr .To (corev1 .ServiceTrafficDistributionPreferSameZone ),
2168
+ topologyAnnotation : "Disabled" ,
2169
+ wantHintsDistributionByZone : map [string ]int {"" : 6 }, // Equivalent to no hints.
2170
+ wantMetrics : expectedMetrics {
2171
+ desiredSlices : 1 ,
2172
+ actualSlices : 1 ,
2173
+ desiredEndpoints : 6 ,
2174
+ addedPerSync : 6 ,
2175
+ removedPerSync : 0 ,
2176
+ numCreated : 1 ,
2177
+ numUpdated : 0 ,
2178
+ numDeleted : 0 ,
2179
+ slicesChangedPerSync : 1 , // 1 means both topologyAnnotation and trafficDistribution were not used.
2180
+ slicesChangedPerSyncTopology : 0 , // 0 means topologyAnnotation was not used.
2181
+ slicesChangedPerSyncTrafficDist : 0 , // 0 means trafficDistribution was not used.
2182
+ },
2183
+ },
2126
2184
}
2127
2185
2128
2186
// Make assertions.
@@ -2135,6 +2193,7 @@ func TestReconcile_TrafficDistribution(t *testing.T) {
2135
2193
2136
2194
r := newReconciler (client , nodes , defaultMaxEndpointsPerSlice )
2137
2195
r .trafficDistributionEnabled = tc .trafficDistributionFeatureGateEnabled
2196
+ r .preferSameTrafficDistribution = tc .preferSameFeatureGateEnabled
2138
2197
r .topologyCache = topologycache .NewTopologyCache ()
2139
2198
r .topologyCache .SetNodes (logger , nodes )
2140
2199
@@ -2397,8 +2456,13 @@ func expectMetrics(t *testing.T, em expectedMetrics) {
2397
2456
t .Errorf ("Expected slicesChangedPerSyncTopology to be %d, got %v" , em .slicesChangedPerSyncTopology , actualSlicesChangedPerSyncTopology )
2398
2457
}
2399
2458
2400
- actualSlicesChangedPerSyncTrafficDist , err := testutil .GetHistogramMetricValue (metrics .EndpointSlicesChangedPerSync .WithLabelValues ("Disabled" , "PreferClose" ))
2401
- handleErr (t , err , "slicesChangedPerSyncTrafficDist" )
2459
+ actualSlicesChangedPreferClose , err := testutil .GetHistogramMetricValue (metrics .EndpointSlicesChangedPerSync .WithLabelValues ("Disabled" , "PreferClose" ))
2460
+ handleErr (t , err , "slicesChangedPreferClose" )
2461
+ actualSlicesChangedPreferSameZone , err := testutil .GetHistogramMetricValue (metrics .EndpointSlicesChangedPerSync .WithLabelValues ("Disabled" , "PreferSameZone" ))
2462
+ handleErr (t , err , "slicesChangedPreferSameZone" )
2463
+ actualSlicesChangedPreferSameNode , err := testutil .GetHistogramMetricValue (metrics .EndpointSlicesChangedPerSync .WithLabelValues ("Disabled" , "PreferSameNode" ))
2464
+ handleErr (t , err , "slicesChangedPreferSameNode" )
2465
+ actualSlicesChangedPerSyncTrafficDist := actualSlicesChangedPreferClose + actualSlicesChangedPreferSameZone + actualSlicesChangedPreferSameNode
2402
2466
if actualSlicesChangedPerSyncTrafficDist != float64 (em .slicesChangedPerSyncTrafficDist ) {
2403
2467
t .Errorf ("Expected slicesChangedPerSyncTrafficDist to be %d, got %v" , em .slicesChangedPerSyncTrafficDist , actualSlicesChangedPerSyncTopology )
2404
2468
}
0 commit comments