finalizer

package
v1.2.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 25, 2022 License: Apache-2.0 Imports: 16 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var BlockBeforeOtherSystemsFinalized = polardbxv1reconcile.NewStepBinder("BlockBeforeOtherSystemsFinalized",
	func(rc *polardbxv1reconcile.Context, flow control.Flow) (reconcile.Result, error) {
		polardbx := rc.MustGetPolarDBX()
		if k8shelper.ContainsOnlyFinalizer(polardbx, polardbxmeta.Finalizer) {
			return flow.Pass()
		}
		return flow.Wait("Block, other finalizers detected.")
	},
)
View Source
var HandleFinalizerForStatelessPods = polardbxv1reconcile.NewStepBinder("HandleFinalizerForStatelessPods",
	func(rc *polardbxv1reconcile.Context, flow control.Flow) (reconcile.Result, error) {
		cnPods, err := rc.GetPods(polardbxmeta.RoleCN)
		if err != nil {
			return flow.Error(err, "Unable to get pods for CN")
		}

		cdcPods, err := rc.GetPods(polardbxmeta.RoleCDC)
		if err != nil {
			return flow.Error(err, "Unable to get pods for CDC")
		}

		isPodDeletedOrFailedAndContainsFinalizer := func(pod *corev1.Pod) bool {
			return k8shelper.IsPodDeletedOrFailed(pod) && controllerutil.ContainsFinalizer(pod, polardbxmeta.Finalizer)
		}

		if err := errutil.FirstNonNil(

			handleFinalizerForPods(rc, flow.Logger(),
				k8shelper.FilterPodsBy(cnPods, isPodDeletedOrFailedAndContainsFinalizer),
				polardbxmeta.RoleCN,
			),

			handleFinalizerForPods(rc, flow.Logger(),
				k8shelper.FilterPodsBy(cdcPods, isPodDeletedOrFailedAndContainsFinalizer),
				polardbxmeta.RoleCDC,
			),
		); err != nil {
			return flow.Error(err, "Failed to handle some finalizer.")
		}

		return flow.Pass()
	},
)
View Source
var RemoveFinalizersOnStores = polardbxv1reconcile.NewStepBinder("RemoveFinalizersOnStores",
	func(rc *polardbxv1reconcile.Context, flow control.Flow) (reconcile.Result, error) {
		polardbx := rc.MustGetPolarDBX()

		if !polardbx.Spec.ShareGMS {
			gms, err := rc.GetGMS()
			if client.IgnoreNotFound(err) != nil {
				return flow.Error(err, "Unable to get xstore of GMS.")
			}

			if gms != nil {
				err = removeFinalizerOnStore(rc, gms)
				if err != nil {
					return flow.Error(err, "Unable to remove finalizer on xstore of GMS.", "xstore", gms.Name)
				}
			}
		}

		dnStores, err := rc.GetDNMap()
		if err != nil {
			return flow.Error(err, "Unable to get xstores of DN.")
		}

		errCnt := int32(0)
		wg := &sync.WaitGroup{}
		for i := range dnStores {
			xstore := dnStores[i]
			wg.Add(1)
			go func() {
				defer wg.Done()
				err := removeFinalizerOnStore(rc, xstore)
				if err != nil {
					flow.Logger().Error(err, "Unable to remove finalizer on xstore of DN.", "xstore", xstore.Name)
					atomic.AddInt32(&errCnt, 1)
				}
			}()
		}
		wg.Wait()

		if errCnt > 0 {
			return flow.RetryAfter(5*time.Second, "Retry finalizer remove after 5 seconds...")
		}

		return flow.Continue("Finalizers on XStores are removed!")
	},
)
View Source
var RemoveGuardFinalizer = polardbxv1reconcile.NewStepBinder("RemoveGuardFinalizer",
	func(rc *polardbxv1reconcile.Context, flow control.Flow) (reconcile.Result, error) {
		polardbx := rc.MustGetPolarDBX()
		if controllerutil.ContainsFinalizer(polardbx, polardbxmeta.Finalizer) {
			controllerutil.RemoveFinalizer(polardbx, polardbxmeta.Finalizer)
			rc.MarkPolarDBXChanged()
			return flow.Continue("Remove guard finalizer.")
		}
		return flow.Pass()
	},
)
View Source
var RemoveResidualFinalizersOnPods = polardbxv1reconcile.NewStepBinder("RemoveResidualFinalizersOnPods",
	func(rc *polardbxv1reconcile.Context, flow control.Flow) (reconcile.Result, error) {
		cnPods, err := rc.GetPods(polardbxmeta.RoleCN)
		if err != nil {
			return flow.Error(err, "Unable to get pods for CN")
		}

		cdcPods, err := rc.GetPods(polardbxmeta.RoleCDC)
		if err != nil {
			return flow.Error(err, "Unable to get pods for CDC")
		}

		if err := errutil.FirstNonNil(
			removeFinalizers(rc, flow.Logger(), cnPods),
			removeFinalizers(rc, flow.Logger(), cdcPods),
		); err != nil {
			return flow.Error(err, "Failed to remove some finalizer.")
		}

		return flow.Pass()
	},
)
View Source
var SetupGuardFinalizer = polardbxv1reconcile.NewStepBinder("SetupGuardFinalizer",
	func(rc *polardbxv1reconcile.Context, flow control.Flow) (reconcile.Result, error) {
		polardbx := rc.MustGetPolarDBX()
		if !controllerutil.ContainsFinalizer(polardbx, polardbxmeta.Finalizer) {
			controllerutil.AddFinalizer(polardbx, polardbxmeta.Finalizer)
			rc.MarkPolarDBXChanged()
			return flow.Continue("Setup guard finalizer.")
		}
		return flow.Pass()
	},
)

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL