Ensuring passing context across fission (#2555)
Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
This commit is contained in:
@@ -258,7 +258,7 @@ func (roundTripper *RetryingRoundTripper) RoundTrip(req *http.Request) (*http.Re
|
||||
"service-entry": roundTripper.serviceURL.String()})...)
|
||||
if roundTripper.funcHandler.function.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType == fv1.ExecutorTypePoolmgr {
|
||||
defer func(ctx context.Context, fn *fv1.Function, serviceURL *url.URL) {
|
||||
go roundTripper.funcHandler.unTapService(fn, serviceURL) //nolint errcheck
|
||||
go roundTripper.funcHandler.unTapService(context.Background(), fn, serviceURL) //nolint errcheck
|
||||
}(ctx, roundTripper.funcHandler.function, roundTripper.serviceURL)
|
||||
}
|
||||
|
||||
@@ -584,9 +584,9 @@ func (roundTripper RetryingRoundTripper) addForwardedHostHeader(req *http.Reques
|
||||
}
|
||||
|
||||
// unTapservice marks the serviceURL in executor's cache as inactive, so that it can be reused
|
||||
func (fh functionHandler) unTapService(fn *fv1.Function, serviceUrl *url.URL) error {
|
||||
func (fh functionHandler) unTapService(ctx context.Context, fn *fv1.Function, serviceUrl *url.URL) error {
|
||||
fh.logger.Debug("UnTapService Called")
|
||||
ctx, cancel := context.WithTimeout(context.Background(), fh.unTapServiceTimeout)
|
||||
ctx, cancel := context.WithTimeout(ctx, fh.unTapServiceTimeout)
|
||||
defer cancel()
|
||||
err := fh.executor.UnTapService(ctx, fn.ObjectMeta, fn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType, serviceUrl)
|
||||
if err != nil {
|
||||
|
||||
@@ -283,13 +283,13 @@ func (ts *HTTPTriggerSet) addTriggerHandlers() {
|
||||
ts.triggerInformer.AddEventHandler(k8sCache.ResourceEventHandlerFuncs{
|
||||
AddFunc: func(obj interface{}) {
|
||||
trigger := obj.(*fv1.HTTPTrigger)
|
||||
go createIngress(ts.logger, trigger, ts.kubeClient)
|
||||
go createIngress(context.Background(), ts.logger, trigger, ts.kubeClient)
|
||||
ts.syncTriggers()
|
||||
},
|
||||
DeleteFunc: func(obj interface{}) {
|
||||
ts.syncTriggers()
|
||||
trigger := obj.(*fv1.HTTPTrigger)
|
||||
go deleteIngress(ts.logger, trigger, ts.kubeClient)
|
||||
go deleteIngress(context.Background(), ts.logger, trigger, ts.kubeClient)
|
||||
},
|
||||
UpdateFunc: func(oldObj interface{}, newObj interface{}) {
|
||||
oldTrigger := oldObj.(*fv1.HTTPTrigger)
|
||||
@@ -299,7 +299,7 @@ func (ts *HTTPTriggerSet) addTriggerHandlers() {
|
||||
return
|
||||
}
|
||||
|
||||
go updateIngress(ts.logger, oldTrigger, newTrigger, ts.kubeClient)
|
||||
go updateIngress(context.Background(), ts.logger, oldTrigger, newTrigger, ts.kubeClient)
|
||||
ts.syncTriggers()
|
||||
},
|
||||
})
|
||||
|
||||
+11
-11
@@ -39,11 +39,11 @@ func init() {
|
||||
}
|
||||
}
|
||||
|
||||
func createIngress(logger *zap.Logger, trigger *fv1.HTTPTrigger, kubeClient kubernetes.Interface) {
|
||||
func createIngress(ctx context.Context, logger *zap.Logger, trigger *fv1.HTTPTrigger, kubeClient kubernetes.Interface) {
|
||||
if !trigger.Spec.CreateIngress {
|
||||
return
|
||||
}
|
||||
_, err := kubeClient.NetworkingV1().Ingresses(podNamespace).Create(context.TODO(), util.GetIngressSpec(podNamespace, trigger), v1.CreateOptions{})
|
||||
_, err := kubeClient.NetworkingV1().Ingresses(podNamespace).Create(ctx, util.GetIngressSpec(podNamespace, trigger), v1.CreateOptions{})
|
||||
if err != nil && !k8serrors.IsAlreadyExists(err) {
|
||||
logger.Error("failed to create ingress", zap.Error(err))
|
||||
return
|
||||
@@ -51,18 +51,18 @@ func createIngress(logger *zap.Logger, trigger *fv1.HTTPTrigger, kubeClient kube
|
||||
logger.Debug("created ingress successfully for trigger", zap.String("trigger", trigger.ObjectMeta.Name))
|
||||
}
|
||||
|
||||
func deleteIngress(logger *zap.Logger, trigger *fv1.HTTPTrigger, kubeClient kubernetes.Interface) {
|
||||
func deleteIngress(ctx context.Context, logger *zap.Logger, trigger *fv1.HTTPTrigger, kubeClient kubernetes.Interface) {
|
||||
if !trigger.Spec.CreateIngress {
|
||||
return
|
||||
}
|
||||
|
||||
ingress, err := kubeClient.NetworkingV1().Ingresses(podNamespace).Get(context.TODO(), trigger.ObjectMeta.Name, v1.GetOptions{})
|
||||
ingress, err := kubeClient.NetworkingV1().Ingresses(podNamespace).Get(ctx, trigger.ObjectMeta.Name, v1.GetOptions{})
|
||||
if err != nil && !k8serrors.IsNotFound(err) {
|
||||
logger.Error("failed to get ingress when deleting trigger", zap.Error(err), zap.String("trigger", trigger.ObjectMeta.Name))
|
||||
return
|
||||
}
|
||||
|
||||
err = kubeClient.NetworkingV1().Ingresses(podNamespace).Delete(context.TODO(), ingress.Name, v1.DeleteOptions{})
|
||||
err = kubeClient.NetworkingV1().Ingresses(podNamespace).Delete(ctx, ingress.Name, v1.DeleteOptions{})
|
||||
if err != nil && !k8serrors.IsNotFound(err) {
|
||||
logger.Error("failed to delete ingress for trigger",
|
||||
zap.Error(err),
|
||||
@@ -71,25 +71,25 @@ func deleteIngress(logger *zap.Logger, trigger *fv1.HTTPTrigger, kubeClient kube
|
||||
}
|
||||
}
|
||||
|
||||
func updateIngress(logger *zap.Logger, oldT *fv1.HTTPTrigger, newT *fv1.HTTPTrigger, kubeClient kubernetes.Interface) {
|
||||
func updateIngress(ctx context.Context, logger *zap.Logger, oldT *fv1.HTTPTrigger, newT *fv1.HTTPTrigger, kubeClient kubernetes.Interface) {
|
||||
if !oldT.Spec.CreateIngress && !newT.Spec.CreateIngress {
|
||||
return
|
||||
}
|
||||
|
||||
if !oldT.Spec.CreateIngress && newT.Spec.CreateIngress {
|
||||
createIngress(logger, newT, kubeClient)
|
||||
createIngress(ctx, logger, newT, kubeClient)
|
||||
return
|
||||
}
|
||||
|
||||
if !newT.Spec.CreateIngress && oldT.Spec.CreateIngress {
|
||||
deleteIngress(logger, oldT, kubeClient)
|
||||
deleteIngress(ctx, logger, oldT, kubeClient)
|
||||
return
|
||||
}
|
||||
|
||||
oldIngress, err := kubeClient.NetworkingV1().Ingresses(podNamespace).Get(context.TODO(), oldT.ObjectMeta.Name, v1.GetOptions{})
|
||||
oldIngress, err := kubeClient.NetworkingV1().Ingresses(podNamespace).Get(ctx, oldT.ObjectMeta.Name, v1.GetOptions{})
|
||||
if err != nil {
|
||||
if k8serrors.IsNotFound(err) {
|
||||
createIngress(logger, newT, kubeClient)
|
||||
createIngress(ctx, logger, newT, kubeClient)
|
||||
}
|
||||
logger.Error("failed to get ingress when updating trigger",
|
||||
zap.Error(err),
|
||||
@@ -123,7 +123,7 @@ func updateIngress(logger *zap.Logger, oldT *fv1.HTTPTrigger, newT *fv1.HTTPTrig
|
||||
}
|
||||
|
||||
if changes {
|
||||
_, err = kubeClient.NetworkingV1().Ingresses(podNamespace).Update(context.TODO(), oldIngress, v1.UpdateOptions{})
|
||||
_, err = kubeClient.NetworkingV1().Ingresses(podNamespace).Update(ctx, oldIngress, v1.UpdateOptions{})
|
||||
if err != nil {
|
||||
logger.Error("failed to update ingress for trigger", zap.Error(err), zap.String("trigger", oldT.ObjectMeta.Name))
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user