in pkg/providers/gateway/gateway_httproute.go [82:180]
func (c *gatewayHTTPRouteController) 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 HTTPRoute resource with invalid key",
zap.Error(err),
zap.String("key", key),
)
return err
}
log.Debugw("sync HTTPRoute", zap.String("key", key))
httpRoute, err := c.controller.gatewayHTTPRouteLister.HTTPRoutes(namespace).Get(name)
if err != nil {
if !k8serrors.IsNotFound(err) {
log.Errorw("failed to get Gateway HTTPRoute",
zap.Error(err),
zap.String("key", key),
)
return err
}
if ev.Type != types.EventDelete {
log.Warnw("Gateway HTTPRoute was deleted before process",
zap.String("key", key),
)
// Don't need to retry.
return nil
}
}
if ev.Type == types.EventDelete {
if httpRoute != 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
}
httpRoute = ev.Tombstone.(*gatewayv1beta1.HTTPRoute)
}
err = c.controller.validator.ValidateCommonRoute(httpRoute)
if err != nil {
log.Errorw("failed to validate gateway HTTPRoute",
zap.Error(err),
zap.Any("object", httpRoute),
)
return err
}
tctx, err := c.controller.translator.TranslateGatewayHTTPRouteV1beta1(httpRoute)
if err != nil {
log.Errorw("failed to translate gateway HTTPRoute",
zap.Error(err),
zap.Any("object", httpRoute),
)
return err
}
log.Debugw("translated HTTPRoute",
zap.Any("routes", tctx.Routes),
zap.Any("upstreams", tctx.Upstreams),
)
m := &utils.Manifest{
Routes: tctx.Routes,
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.(*gatewayv1beta1.HTTPRoute)
oldCtx, _ = c.controller.translator.TranslateGatewayHTTPRouteV1beta1(oldObj)
if oldCtx != nil {
om := &utils.Manifest{
Routes: oldCtx.Routes,
Upstreams: oldCtx.Upstreams,
}
added, updated, deleted = m.Diff(om)
} else {
added = m
}
}
return utils.SyncManifests(ctx, c.controller.APISIX, c.controller.APISIXClusterName, added, updated, deleted, false)
}