diff --git a/pkg/eventshub/eventshub.go b/pkg/eventshub/eventshub.go index fab7948b..512552b8 100644 --- a/pkg/eventshub/eventshub.go +++ b/pkg/eventshub/eventshub.go @@ -23,6 +23,7 @@ import ( "golang.org/x/sync/errgroup" "knative.dev/pkg/injection" "knative.dev/pkg/logging" + "knative.dev/pkg/signals" ) type envConfig struct { @@ -39,8 +40,9 @@ type EventGeneratorStarter func(context.Context, *EventLogs) error // Start starts a new eventshub process, with the provided factories. // You can create your own eventshub providing event log factories and event generator factories. func Start(eventLogFactories map[string]EventLogFactory, eventGeneratorFactories map[string]EventGeneratorStarter) { - //nolint // nil ctx is fine here, look at the code of EnableInjectionOrDie - ctx, _ := injection.EnableInjectionOrDie(nil, nil) + ctx := signals.NewContext() + defer maybeQuitIstioProxy(ctx) // quit at exit + ctx, _ = injection.EnableInjectionOrDie(ctx, nil) ctx = ConfigureLogging(ctx, "eventshub") tracer, err := ConfigureTracing(logging.FromContext(ctx), "") diff --git a/pkg/eventshub/istio_quit.go b/pkg/eventshub/istio_quit.go new file mode 100644 index 00000000..6a16defb --- /dev/null +++ b/pkg/eventshub/istio_quit.go @@ -0,0 +1,38 @@ +/* +Copyright 2023 The Knative Authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package eventshub + +import ( + "context" + "errors" + "net/http" + "syscall" + + "knative.dev/pkg/logging" +) + +// maybeQuitIstioProxy shuts down Istio's proxy when available. +func maybeQuitIstioProxy(ctx context.Context) { + log := logging.FromContext(ctx) + req, _ := http.NewRequest(http.MethodPost, "http://localhost:15020/quitquitquit", nil) + + _, err := http.DefaultClient.Do(req) + + if err != nil && !errors.Is(err, syscall.ECONNREFUSED) { + log.Warn("Ignore this warning if Istio proxy is not used on this pod", err) + } +}