in pkg/providers/gateway/gateway_tcproute.go [56:151]
func (c *gatewayTCPRouteController) 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 TCPRoute resource with invalid key",
zap.Error(err),
zap.String("key", key),
)
return err
}
log.Debugw("sync TCPRoute", zap.String("key", key))
tcpRoute, err := c.controller.gatewayTCPRouteLister.TCPRoutes(namespace).Get(name)
if err != nil {
if !k8serrors.IsNotFound(err) {
log.Errorw("failed to get Gateway TCPRoute",
zap.Error(err),
zap.String("key", key),
)
return err
}
if ev.Type != types.EventDelete {
log.Warnw("Gateway TCPRoute was deleted before process",
zap.String("key", key),
)
// Don't need to retry.
return nil
}
}
if ev.Type == types.EventDelete {
if tcpRoute != 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/TCPRoute delete event since it exists",
zap.String("key", key),
)
return nil
}
tcpRoute = ev.Tombstone.(*gatewayv1alpha2.TCPRoute)
}
err = c.controller.validator.ValidateCommonRoute(tcpRoute)
if err != nil {
log.Errorw("failed to validate gateway TCPRoute",
zap.Error(err),
zap.Any("object", tcpRoute),
)
return err
}
tctx, err := c.controller.translator.TranslateGatewayTCPRouteV1Alpha2(tcpRoute)
if err != nil {
log.Errorw("failed to translate gateway TCPRoute",
zap.Error(err),
zap.Any("object", tcpRoute),
)
return err
}
log.Debugw("translated TCPRoute",
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.TCPRoute)
oldCtx, _ = c.controller.translator.TranslateGatewayTCPRouteV1Alpha2(oldObj)
if oldCtx != nil {
om := &utils.Manifest{
StreamRoutes: oldCtx.StreamRoutes,
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)
}