mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-02 00:07:50 +00:00
Incrementing EndpointSlice generation when labels change
EndpointSlice labels can be quite meaningful. They are used to indicate the controller they are managed by and the Service they are associated with. Changing these labels can have significant affects on how the EndpointSlice is consumed so incrementing generation seems appropriate.
This commit is contained in:
parent
4f9317596c
commit
b1434d1ea3
@ -65,7 +65,7 @@ func (endpointSliceStrategy) PrepareForUpdate(ctx context.Context, obj, old runt
|
||||
newEPS.ObjectMeta = v1.ObjectMeta{}
|
||||
oldEPS.ObjectMeta = v1.ObjectMeta{}
|
||||
|
||||
if !apiequality.Semantic.DeepEqual(newEPS, oldEPS) {
|
||||
if !apiequality.Semantic.DeepEqual(newEPS, oldEPS) || !apiequality.Semantic.DeepEqual(ogNewMeta.Labels, ogOldMeta.Labels) {
|
||||
ogNewMeta.Generation = ogOldMeta.Generation + 1
|
||||
}
|
||||
|
||||
|
@ -17,9 +17,11 @@ limitations under the License.
|
||||
package endpointslice
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||
featuregatetesting "k8s.io/component-base/featuregate/testing"
|
||||
"k8s.io/kubernetes/pkg/apis/discovery"
|
||||
@ -600,3 +602,94 @@ func Test_dropDisabledFieldsOnUpdate(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestPrepareForUpdate(t *testing.T) {
|
||||
testCases := []struct {
|
||||
name string
|
||||
oldEPS *discovery.EndpointSlice
|
||||
newEPS *discovery.EndpointSlice
|
||||
expectedEPS *discovery.EndpointSlice
|
||||
}{
|
||||
{
|
||||
name: "unchanged EPS should not increment generation",
|
||||
oldEPS: &discovery.EndpointSlice{
|
||||
ObjectMeta: metav1.ObjectMeta{Generation: 1},
|
||||
Endpoints: []discovery.Endpoint{{
|
||||
Addresses: []string{"1.2.3.4"},
|
||||
}},
|
||||
},
|
||||
newEPS: &discovery.EndpointSlice{
|
||||
ObjectMeta: metav1.ObjectMeta{Generation: 1},
|
||||
Endpoints: []discovery.Endpoint{{
|
||||
Addresses: []string{"1.2.3.4"},
|
||||
}},
|
||||
},
|
||||
expectedEPS: &discovery.EndpointSlice{
|
||||
ObjectMeta: metav1.ObjectMeta{Generation: 1},
|
||||
Endpoints: []discovery.Endpoint{{
|
||||
Addresses: []string{"1.2.3.4"},
|
||||
}},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "changed endpoints should increment generation",
|
||||
oldEPS: &discovery.EndpointSlice{
|
||||
ObjectMeta: metav1.ObjectMeta{Generation: 1},
|
||||
Endpoints: []discovery.Endpoint{{
|
||||
Addresses: []string{"1.2.3.4"},
|
||||
}},
|
||||
},
|
||||
newEPS: &discovery.EndpointSlice{
|
||||
ObjectMeta: metav1.ObjectMeta{Generation: 1},
|
||||
Endpoints: []discovery.Endpoint{{
|
||||
Addresses: []string{"1.2.3.5"},
|
||||
}},
|
||||
},
|
||||
expectedEPS: &discovery.EndpointSlice{
|
||||
ObjectMeta: metav1.ObjectMeta{Generation: 2},
|
||||
Endpoints: []discovery.Endpoint{{
|
||||
Addresses: []string{"1.2.3.5"},
|
||||
}},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "changed labels should increment generation",
|
||||
oldEPS: &discovery.EndpointSlice{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Generation: 1,
|
||||
Labels: map[string]string{"example": "one"},
|
||||
},
|
||||
Endpoints: []discovery.Endpoint{{
|
||||
Addresses: []string{"1.2.3.4"},
|
||||
}},
|
||||
},
|
||||
newEPS: &discovery.EndpointSlice{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Generation: 1,
|
||||
Labels: map[string]string{"example": "two"},
|
||||
},
|
||||
Endpoints: []discovery.Endpoint{{
|
||||
Addresses: []string{"1.2.3.4"},
|
||||
}},
|
||||
},
|
||||
expectedEPS: &discovery.EndpointSlice{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Generation: 2,
|
||||
Labels: map[string]string{"example": "two"},
|
||||
},
|
||||
Endpoints: []discovery.Endpoint{{
|
||||
Addresses: []string{"1.2.3.4"},
|
||||
}},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
Strategy.PrepareForUpdate(context.TODO(), tc.newEPS, tc.oldEPS)
|
||||
if !apiequality.Semantic.DeepEqual(tc.newEPS, tc.expectedEPS) {
|
||||
t.Errorf("Expected %+v\nGot: %+v", tc.expectedEPS, tc.newEPS)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user