-
Notifications
You must be signed in to change notification settings - Fork 770
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature/revision index #1733
base: master
Are you sure you want to change the base?
Feature/revision index #1733
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,6 +9,7 @@ import ( | |
appsv1alpha1 "github.com/openkruise/kruise/apis/apps/v1alpha1" | ||
"github.com/openkruise/kruise/pkg/control/sidecarcontrol" | ||
|
||
"github.com/openkruise/kruise/pkg/util/fieldindex" | ||
appsv1 "k8s.io/api/apps/v1" | ||
corev1 "k8s.io/api/core/v1" | ||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
|
@@ -17,6 +18,7 @@ import ( | |
"k8s.io/apimachinery/pkg/util/intstr" | ||
clientgoscheme "k8s.io/client-go/kubernetes/scheme" | ||
"k8s.io/client-go/tools/record" | ||
"k8s.io/kubernetes/pkg/apis/apps" | ||
utilpointer "k8s.io/utils/pointer" | ||
"sigs.k8s.io/controller-runtime/pkg/client" | ||
"sigs.k8s.io/controller-runtime/pkg/client/fake" | ||
|
@@ -137,6 +139,7 @@ func init() { | |
utilruntime.Must(appsv1.AddToScheme(scheme)) | ||
utilruntime.Must(appsv1alpha1.AddToScheme(scheme)) | ||
utilruntime.Must(corev1.AddToScheme(scheme)) | ||
utilruntime.Must(apps.AddToScheme(scheme)) | ||
} | ||
|
||
func getLatestPod(client client.Client, pod *corev1.Pod) (*corev1.Pod, error) { | ||
|
@@ -184,6 +187,13 @@ func testUpdateWhenUseNotUpdateStrategy(t *testing.T, sidecarSetInput *appsv1alp | |
|
||
fakeClient := fake.NewClientBuilder().WithScheme(scheme). | ||
WithObjects(sidecarSetInput, podInput). | ||
WithIndex(&apps.ControllerRevision{}, fieldindex.IndexNameForOwnerRefUID, func(obj client.Object) []string { | ||
var owners []string | ||
for _, ref := range obj.GetOwnerReferences() { | ||
owners = append(owners, string(ref.UID)) | ||
} | ||
return owners | ||
}). | ||
WithStatusSubresource(&appsv1alpha1.SidecarSet{}).Build() | ||
reconciler := ReconcileSidecarSet{ | ||
Client: fakeClient, | ||
|
@@ -219,6 +229,13 @@ func testUpdateWhenSidecarSetPaused(t *testing.T, sidecarSetInput *appsv1alpha1. | |
|
||
fakeClient := fake.NewClientBuilder().WithScheme(scheme). | ||
WithObjects(sidecarSetInput, podInput). | ||
WithIndex(&apps.ControllerRevision{}, fieldindex.IndexNameForOwnerRefUID, func(obj client.Object) []string { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. use appsv1.ControllerRevision{} |
||
var owners []string | ||
for _, ref := range obj.GetOwnerReferences() { | ||
owners = append(owners, string(ref.UID)) | ||
} | ||
return owners | ||
}). | ||
WithStatusSubresource(&appsv1alpha1.SidecarSet{}).Build() | ||
reconciler := ReconcileSidecarSet{ | ||
Client: fakeClient, | ||
|
@@ -254,6 +271,13 @@ func testUpdateWhenMaxUnavailableNotZero(t *testing.T, sidecarSetInput *appsv1al | |
|
||
fakeClient := fake.NewClientBuilder().WithScheme(scheme). | ||
WithObjects(sidecarSetInput, podInput). | ||
WithIndex(&apps.ControllerRevision{}, fieldindex.IndexNameForOwnerRefUID, func(obj client.Object) []string { | ||
var owners []string | ||
for _, ref := range obj.GetOwnerReferences() { | ||
owners = append(owners, string(ref.UID)) | ||
} | ||
return owners | ||
}). | ||
WithStatusSubresource(&appsv1alpha1.SidecarSet{}).Build() | ||
reconciler := ReconcileSidecarSet{ | ||
Client: fakeClient, | ||
|
@@ -289,6 +313,13 @@ func testUpdateWhenPartitionFinished(t *testing.T, sidecarSetInput *appsv1alpha1 | |
} | ||
|
||
fakeClient := fake.NewClientBuilder().WithScheme(scheme).WithObjects(sidecarSetInput, podInput). | ||
WithIndex(&apps.ControllerRevision{}, fieldindex.IndexNameForOwnerRefUID, func(obj client.Object) []string { | ||
var owners []string | ||
for _, ref := range obj.GetOwnerReferences() { | ||
owners = append(owners, string(ref.UID)) | ||
} | ||
return owners | ||
}). | ||
WithStatusSubresource(&appsv1alpha1.SidecarSet{}).Build() | ||
reconciler := ReconcileSidecarSet{ | ||
Client: fakeClient, | ||
|
@@ -324,6 +355,13 @@ func testRemoveSidecarSet(t *testing.T, sidecarSetInput *appsv1alpha1.SidecarSet | |
} | ||
|
||
fakeClient := fake.NewClientBuilder().WithScheme(scheme).WithObjects(sidecarSetInput, podInput). | ||
WithIndex(&apps.ControllerRevision{}, fieldindex.IndexNameForOwnerRefUID, func(obj client.Object) []string { | ||
var owners []string | ||
for _, ref := range obj.GetOwnerReferences() { | ||
owners = append(owners, string(ref.UID)) | ||
} | ||
return owners | ||
}). | ||
WithStatusSubresource(&appsv1alpha1.SidecarSet{}).Build() | ||
reconciler := ReconcileSidecarSet{ | ||
Client: fakeClient, | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -24,12 +24,16 @@ import ( | |
apps "k8s.io/api/apps/v1" | ||
"k8s.io/apimachinery/pkg/api/errors" | ||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
"k8s.io/apimachinery/pkg/fields" | ||
"k8s.io/apimachinery/pkg/labels" | ||
"k8s.io/apimachinery/pkg/runtime/schema" | ||
"k8s.io/apimachinery/pkg/types" | ||
"k8s.io/client-go/util/retry" | ||
"k8s.io/kubernetes/pkg/controller/history" | ||
"sigs.k8s.io/controller-runtime/pkg/client" | ||
|
||
utilclient "github.com/openkruise/kruise/pkg/util/client" | ||
"github.com/openkruise/kruise/pkg/util/fieldindex" | ||
) | ||
|
||
// NewHistory returns an an instance of Interface that uses client to communicate with the API Server and lister to list ControllerRevisions. | ||
|
@@ -44,16 +48,14 @@ type realHistory struct { | |
func (rh *realHistory) ListControllerRevisions(parent metav1.Object, selector labels.Selector) ([]*apps.ControllerRevision, error) { | ||
// List all revisions in the namespace that match the selector | ||
revisions := apps.ControllerRevisionList{} | ||
err := rh.List(context.TODO(), &revisions, &client.ListOptions{Namespace: parent.GetNamespace(), LabelSelector: selector}) | ||
if err != nil { | ||
return nil, err | ||
opts := &client.ListOptions{ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. consider add DisableDeepCopy option There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. When use DisableDeepCopy, kruise will panic in e2e because some update codes in cloneset VCTHashEqual handler. pkg/controller/cloneset/cloneset_controller.go:453 lastEqualRevision := equalRevisions[equalCount-1]
if !VCTHashEqual(lastEqualRevision, updateRevision) {
klog.InfoS("Revision vct hash will be updated", "revisionName", lastEqualRevision.Name, "lastRevisionVCTHash", lastEqualRevision.Annotations[volumeclaimtemplate.HashAnnotation], "updateRevisionVCTHash", updateRevision.Annotations[volumeclaimtemplate.HashAnnotation])
lastEqualRevision.Annotations[volumeclaimtemplate.HashAnnotation] = updateRevision.Annotations[volumeclaimtemplate.HashAnnotation]
}
// if the equivalent revision is not immediately prior we will roll back by incrementing the
// Revision of the equivalent revision
updateRevision, err = r.controllerHistory.UpdateControllerRevision(equalRevisions[equalCount-1], updateRevision.Revision) |
||
Namespace: parent.GetNamespace(), | ||
FieldSelector: fields.SelectorFromSet(fields.Set{fieldindex.IndexNameForOwnerRefUID: string(parent.GetUID())}), | ||
} | ||
err := rh.List(context.TODO(), &revisions, opts, utilclient.DisableDeepCopy) | ||
var owned []*apps.ControllerRevision | ||
for i := range revisions.Items { | ||
ref := metav1.GetControllerOf(&revisions.Items[i]) | ||
if ref == nil || ref.UID == parent.GetUID() { | ||
owned = append(owned, &revisions.Items[i]) | ||
} | ||
owned = append(owned, &revisions.Items[i]) | ||
} | ||
return owned, err | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,12 +22,14 @@ import ( | |
|
||
appsv1alpha1 "github.com/openkruise/kruise/apis/apps/v1alpha1" | ||
"github.com/openkruise/kruise/pkg/util" | ||
"github.com/openkruise/kruise/pkg/util/fieldindex" | ||
apps "k8s.io/api/apps/v1" | ||
v1 "k8s.io/api/core/v1" | ||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
"k8s.io/apimachinery/pkg/runtime" | ||
"k8s.io/apimachinery/pkg/util/uuid" | ||
"k8s.io/kubernetes/pkg/controller/history" | ||
"sigs.k8s.io/controller-runtime/pkg/client" | ||
"sigs.k8s.io/controller-runtime/pkg/client/fake" | ||
) | ||
|
||
|
@@ -69,7 +71,13 @@ func TestRevisionHistory(t *testing.T) { | |
t.Fatalf("Failed to new controller revision: %v", err) | ||
} | ||
|
||
fakeClient := fake.NewClientBuilder().Build() | ||
fakeClient := fake.NewClientBuilder().WithIndex(&apps.ControllerRevision{}, fieldindex.IndexNameForOwnerRefUID, func(obj client.Object) []string { | ||
var owners []string | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There are so many errors in other uts and can be fixed by using client with index. |
||
for _, ref := range obj.GetOwnerReferences() { | ||
owners = append(owners, string(ref.UID)) | ||
} | ||
return owners | ||
}).Build() | ||
historyControl := NewHistory(fakeClient) | ||
|
||
newCR, err := historyControl.CreateControllerRevision(parent, cr, parent.Status.CollisionCount) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there is no need to add unversioned scheme here, L139 already do the job