Feat: support interactive mode to manually skip encountered errors (#5266)

This commit is contained in:
Somefive
2023-01-06 15:03:47 +08:00
committed by GitHub
parent 693eb3cb1d
commit 5a845104fb
13 changed files with 424 additions and 316 deletions

View File

@@ -75,9 +75,6 @@ const (
const (
// baseWorkflowBackoffWaitTime is the time to wait gc check
baseGCBackoffWaitTime = 3000 * time.Millisecond
// resourceTrackerFinalizer is to delete the resource tracker of the latest app revision.
resourceTrackerFinalizer = "app.oam.dev/resource-tracker-finalizer"
)
var (
@@ -366,18 +363,18 @@ func (r *Reconciler) result(err error) *reconcileResult {
// We must delete all resource trackers related to an application through finalizer logic.
func (r *Reconciler) handleFinalizers(ctx monitorContext.Context, app *v1beta1.Application, handler *AppHandler) (bool, ctrl.Result, error) {
if app.ObjectMeta.DeletionTimestamp.IsZero() {
if !meta.FinalizerExists(app, resourceTrackerFinalizer) {
if !meta.FinalizerExists(app, oam.FinalizerResourceTracker) {
subCtx := ctx.Fork("handle-finalizers", monitorContext.DurationMetric(func(v float64) {
metrics.HandleFinalizersDurationHistogram.WithLabelValues("application", "add").Observe(v)
}))
defer subCtx.Commit("finish add finalizers")
meta.AddFinalizer(app, resourceTrackerFinalizer)
subCtx.Info("Register new finalizer for application", "finalizer", resourceTrackerFinalizer)
meta.AddFinalizer(app, oam.FinalizerResourceTracker)
subCtx.Info("Register new finalizer for application", "finalizer", oam.FinalizerResourceTracker)
endReconcile := !EnableReconcileLoopReduction
return r.result(errors.Wrap(r.Client.Update(ctx, app), errUpdateApplicationFinalizer)).end(endReconcile)
}
} else {
if slices.Contains(app.GetFinalizers(), resourceTrackerFinalizer) {
if slices.Contains(app.GetFinalizers(), oam.FinalizerResourceTracker) {
subCtx := ctx.Fork("handle-finalizers", monitorContext.DurationMetric(func(v float64) {
metrics.HandleFinalizersDurationHistogram.WithLabelValues("application", "remove").Observe(v)
}))
@@ -391,7 +388,7 @@ func (r *Reconciler) handleFinalizers(ctx monitorContext.Context, app *v1beta1.A
return true, result, err
}
if rootRT == nil && currentRT == nil && len(historyRTs) == 0 && cvRT == nil {
meta.RemoveFinalizer(app, resourceTrackerFinalizer)
meta.RemoveFinalizer(app, oam.FinalizerResourceTracker)
meta.RemoveFinalizer(app, oam.FinalizerOrphanResource)
return r.result(errors.Wrap(r.Client.Update(ctx, app), errUpdateApplicationFinalizer)).end(true)
}

View File

@@ -21,6 +21,7 @@ import (
"encoding/json"
"fmt"
"github.com/oam-dev/kubevela/pkg/oam"
"github.com/oam-dev/kubevela/pkg/oam/testutil"
. "github.com/onsi/ginkgo"
@@ -117,7 +118,7 @@ var _ = Describe("Test application controller finalizer logic", func() {
checkApp = new(v1beta1.Application)
Expect(k8sClient.Get(ctx, appKey, checkApp)).Should(BeNil())
Expect(len(checkApp.Finalizers)).Should(BeEquivalentTo(1))
Expect(checkApp.Finalizers[0]).Should(BeEquivalentTo(resourceTrackerFinalizer))
Expect(checkApp.Finalizers[0]).Should(BeEquivalentTo(oam.FinalizerResourceTracker))
By("delete this cross workload app")
Expect(k8sClient.Delete(ctx, checkApp)).Should(BeNil())
By("delete app will delete resourceTracker")
@@ -148,7 +149,7 @@ var _ = Describe("Test application controller finalizer logic", func() {
checkApp = new(v1beta1.Application)
Expect(k8sClient.Get(ctx, appKey, checkApp)).Should(BeNil())
Expect(len(checkApp.Finalizers)).Should(BeEquivalentTo(1))
Expect(checkApp.Finalizers[0]).Should(BeEquivalentTo(resourceTrackerFinalizer))
Expect(checkApp.Finalizers[0]).Should(BeEquivalentTo(oam.FinalizerResourceTracker))
Expect(len(rt.Spec.ManagedResources)).Should(BeEquivalentTo(1))
By("Update the app, set type to normal-worker")
checkApp.Spec.Components[0].Type = "normal-worker"