in pkg/providers/gateway/gateway_tlsroute.go [99:201]
func (c *gatewayTLSRouteController) sync(ctx context.Context, ev *types.Event) error {
key := ev.Object.(string)
namespace, name, err := cache.SplitMetaNamespaceKey(key)
if err != nil {
log.Errorw("found Gateway TLSRoute resource with invalid key",
zap.Error(err),
zap.String("key", key),
)
return err
}
log.Debugw("sync TLSRoute", zap.String("key", key))
tlsRoute, err := c.controller.gatewayTLSRouteLister.TLSRoutes(namespace).Get(name)
if err != nil {
if !k8serrors.IsNotFound(err) {
log.Errorw("failed to get Gateway TLSRoute",
zap.Error(err),
zap.String("key", key),
)
return err
}
if ev.Type != types.EventDelete {
log.Warnw("Gateway TLSRoute was deleted before process",
zap.String("key", key),
)
// Don't need to retry.
return nil
}
}
if ev.Type == types.EventDelete {
if tlsRoute != nil {
// We still find the resource while we are processing the DELETE event,
// that means object with same namespace and name was created, discarding
// this stale DELETE event.
log.Warnw("discard the stale Gateway delete event since it exists",
zap.String("key", key),
)
return nil
}
tlsRoute = ev.Tombstone.(*gatewayv1alpha2.TLSRoute)
}
err = c.controller.validator.ValidateCommonRoute(tlsRoute)
if err != nil {
log.Errorw("failed to validate gateway HTTPRoute",
zap.Error(err),
zap.Any("object", tlsRoute),
)
return err
}
tctx, err := c.controller.translator.TranslateGatewayTLSRouteV1Alpha2(tlsRoute)
if err != nil {
log.Warnw("failed to translate gateway TLSRoute",
zap.Error(err),
zap.Any("object", tlsRoute),
)
return err
}
log.Debugw("translated TLSRoute",
zap.Any("stream_routes", tctx.StreamRoutes),
zap.Any("upstreams", tctx.Upstreams),
)
m := &utils.Manifest{
StreamRoutes: tctx.StreamRoutes,
Upstreams: tctx.Upstreams,
}
var (
added *utils.Manifest
updated *utils.Manifest
deleted *utils.Manifest
)
if ev.Type == types.EventDelete {
deleted = m
} else if ev.Type == types.EventAdd {
added = m
} else {
var oldCtx *translation.TranslateContext
oldObj := ev.OldObject.(*gatewayv1alpha2.TLSRoute)
oldCtx, err = c.controller.translator.TranslateGatewayTLSRouteV1Alpha2(oldObj)
if err != nil {
log.Errorw("failed to translate old TLSRoute",
zap.String("version", oldObj.APIVersion),
zap.String("event_type", "update"),
zap.Any("TLSRoute", oldObj),
zap.Error(err),
)
return err
}
om := &utils.Manifest{
StreamRoutes: oldCtx.StreamRoutes,
Upstreams: oldCtx.Upstreams,
}
added, updated, deleted = m.Diff(om)
}
return utils.SyncManifests(ctx, c.controller.APISIX, c.controller.APISIXClusterName, added, updated, deleted, false)
}