Ctrl K
ComunidadGuías…

api/controller/cleanup_registry_readiness.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package controller

import (
	"context"
	"reflect"

	guard "github.com/goodrain/rainbond/pkg/cleanup"
	"github.com/goodrain/rainbond/pkg/cleanup/kubeidentity"
)

// certifyRegistry derives coverage from the configured system Registry and
// current platform instances. No deployment facts come from caller claims.
func (h *CleanupCoordinationHandler) certifyRegistry(ctx context.Context, binding guard.StorageRegistration, self *guard.CoordinationRequest) (guard.StorageObservation, bool, error) {
	if h.inspectRegistryCoverage == nil {
		return guard.StorageObservation{}, false, guard.ErrCoordinationUnavailable
	}
	return guard.CertifyRegistry(h.database(), binding, self, func(records []guard.ParticipantRegistration) (guard.RegistryCoverage, error) {
		return h.inspectRegistryCoverage(ctx, binding, records)
	})
}

func (h *CleanupCoordinationHandler) observeRegistryCoverage(ctx context.Context, binding guard.StorageRegistration, records []guard.ParticipantRegistration) (guard.RegistryCoverage, error) {
	if h.gcTarget == nil || h.inspectReferenceWriters == nil || h.clusterReferences == nil {
		return guard.RegistryCoverage{}, guard.ErrCoordinationUnavailable
	}
	client, namespace, service, err := h.gcTarget()
	if err != nil {
		return guard.RegistryCoverage{}, guard.ErrCoordinationUnavailable
	}
	ingress, err := kubeidentity.InspectRegistryParticipantCoverage(ctx, client, namespace, service, binding, records)
	if err != nil {
		return guard.RegistryCoverage{}, err
	}
	writers, err := h.inspectReferenceWriters(ctx)
	if err != nil {
		return guard.RegistryCoverage{}, err
	}
	references, err := h.clusterReferences(ctx)
	if err != nil {
		return guard.RegistryCoverage{}, err
	}
	// Recheck ingress after the other remote sources, under the same DB storage
	// lock. The inspector requires exact identities from the original records.
	ingress, err = kubeidentity.InspectRegistryParticipantCoverage(ctx, client, namespace, service, binding, ingress)
	if err != nil {
		return guard.RegistryCoverage{}, err
	}
	currentWriters, err := h.inspectReferenceWriters(ctx)
	if err != nil || !reflect.DeepEqual(writers, currentWriters) {
		return guard.RegistryCoverage{}, guard.ErrCoordinationChanged
	}
	if err := ctx.Err(); err != nil {
		return guard.RegistryCoverage{}, err
	}
	return guard.RegistryCoverage{Ingress: ingress, Writers: writers, References: references}, nil
}