diff --git a/go.mod b/go.mod index b9b6085956..fc8d8e12d9 100644 --- a/go.mod +++ b/go.mod @@ -28,9 +28,9 @@ require ( k8s.io/api v0.18.8 k8s.io/apimachinery v0.18.8 k8s.io/client-go v11.0.1-0.20190805182717-6502b5e7b1b5+incompatible - knative.dev/eventing v0.18.4-0.20201027215333-ca80ac848fd5 + knative.dev/eventing v0.18.5-0.20201106045707-8dc624a41781 knative.dev/pkg v0.0.0-20201026165741-2f75016c1368 - knative.dev/serving v0.18.1 + knative.dev/serving v0.18.2 sigs.k8s.io/yaml v1.2.0 ) diff --git a/go.sum b/go.sum index 7e7e36a4ff..44be65b588 100644 --- a/go.sum +++ b/go.sum @@ -1945,8 +1945,8 @@ k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/ knative.dev/caching v0.0.0-20190719140829-2032732871ff/go.mod h1:dHXFU6CGlLlbzaWc32g80cR92iuBSpsslDNBWI8C7eg= knative.dev/caching v0.0.0-20200116200605-67bca2c83dfa/go.mod h1:dHXFU6CGlLlbzaWc32g80cR92iuBSpsslDNBWI8C7eg= knative.dev/caching v0.0.0-20200922173540-a6b8bbd6999a/go.mod h1:P624eQ2AZLjwPBRuSqlnkWjRYoVeGdZ/uGXPrYP/USk= -knative.dev/eventing v0.18.4-0.20201027215333-ca80ac848fd5 h1:n0H3hC9XYjWwwaPduqpedDqz6kxgsjtHjaRgB137K/4= -knative.dev/eventing v0.18.4-0.20201027215333-ca80ac848fd5/go.mod h1:Rv5V1Sk/XeG6vdEpRu+zDhEUDg2SgbkOJWRNssUyt50= +knative.dev/eventing v0.18.5-0.20201106045707-8dc624a41781 h1:t3wVIbKYkznLVsT+l+LlUM47Q5iMf+/b9eIojd4UwYo= +knative.dev/eventing v0.18.5-0.20201106045707-8dc624a41781/go.mod h1:iL4L4Y2RDWBA7bpMrvFPOS8NhB5nCtkyRLWH89LqK2s= knative.dev/eventing-contrib v0.6.1-0.20190723221543-5ce18048c08b/go.mod h1:SnXZgSGgMSMLNFTwTnpaOH7hXDzTFtw0J8OmHflNx3g= knative.dev/eventing-contrib v0.11.2/go.mod h1:SnXZgSGgMSMLNFTwTnpaOH7hXDzTFtw0J8OmHflNx3g= knative.dev/networking v0.0.0-20200922180040-a71b40c69b15 h1:UhUyfzy5VTEdkWXlkJAKLDPkPK9MKNpENfn17rlYtcs= @@ -1963,8 +1963,8 @@ knative.dev/pkg v0.0.0-20200922164940-4bf40ad82aab h1:4Q+sGqdN4ecLPZnIJcLDdQArEE knative.dev/pkg v0.0.0-20200922164940-4bf40ad82aab/go.mod h1:MCyt5KqLaai6ENUitOgRAQsu7Gw7cAIIiXQ2IS+O0NI= knative.dev/pkg v0.0.0-20201026165741-2f75016c1368 h1:KzDx2IerB4km4TG4PunacQvuSeWv4TJXTzjZ3ryKZ9o= knative.dev/pkg v0.0.0-20201026165741-2f75016c1368/go.mod h1:MCyt5KqLaai6ENUitOgRAQsu7Gw7cAIIiXQ2IS+O0NI= -knative.dev/serving v0.18.1 h1:Q0ip/VA0xyWRgQeuAlcxOxhKMB6z1T0UntYsIRnVyuw= -knative.dev/serving v0.18.1/go.mod h1:9U9j3D5yT7nPyVQFp4cnYugbqxF9LbHZVaxCOhNajFI= +knative.dev/serving v0.18.2 h1:04NhU2WsXRP04vSGjfjl+q8UFWUWKzvJq9KDZ8Kdz6Q= +knative.dev/serving v0.18.2/go.mod h1:vZJNXztc4G9kNaSF9yNUpBDljCmxaQ2VQd681cd+M+o= knative.dev/test-infra v0.0.0-20200407185800-1b88cb3b45a5/go.mod h1:xcdUkMJrLlBswIZqL5zCuBFOC22WIPMQoVX1L35i0vQ= knative.dev/test-infra v0.0.0-20200505052144-5ea2f705bb55/go.mod h1:WqF1Azka+FxPZ20keR2zCNtiQA1MP9ZB4BH4HuI+SIU= knative.dev/test-infra v0.0.0-20200513011557-d03429a76034/go.mod h1:aMif0KXL4g19YCYwsy4Ocjjz5xgPlseYV+B95Oo4JGE= diff --git a/vendor/knative.dev/eventing/pkg/client/injection/reconciler/eventing/v1/broker/reconciler.go b/vendor/knative.dev/eventing/pkg/client/injection/reconciler/eventing/v1/broker/reconciler.go index 48f0aaa1b3..ff00e5c1b3 100644 --- a/vendor/knative.dev/eventing/pkg/client/injection/reconciler/eventing/v1/broker/reconciler.go +++ b/vendor/knative.dev/eventing/pkg/client/injection/reconciler/eventing/v1/broker/reconciler.go @@ -403,15 +403,15 @@ func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource patcher := r.Client.EventingV1().Brokers(resource.Namespace) resourceName := resource.Name - resource, err = patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) + updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", + r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", "Failed to update finalizers for %q: %v", resourceName, err) } else { - r.Recorder.Eventf(resource, corev1.EventTypeNormal, "FinalizerUpdate", + r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) } - return resource, err + return updated, err } func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource *v1.Broker) (*v1.Broker, error) { diff --git a/vendor/knative.dev/eventing/pkg/client/injection/reconciler/eventing/v1beta1/broker/reconciler.go b/vendor/knative.dev/eventing/pkg/client/injection/reconciler/eventing/v1beta1/broker/reconciler.go index 42cc213fc1..508fdd3e91 100644 --- a/vendor/knative.dev/eventing/pkg/client/injection/reconciler/eventing/v1beta1/broker/reconciler.go +++ b/vendor/knative.dev/eventing/pkg/client/injection/reconciler/eventing/v1beta1/broker/reconciler.go @@ -403,15 +403,15 @@ func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource patcher := r.Client.EventingV1beta1().Brokers(resource.Namespace) resourceName := resource.Name - resource, err = patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) + updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", + r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", "Failed to update finalizers for %q: %v", resourceName, err) } else { - r.Recorder.Eventf(resource, v1.EventTypeNormal, "FinalizerUpdate", + r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) } - return resource, err + return updated, err } func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource *v1beta1.Broker) (*v1beta1.Broker, error) { diff --git a/vendor/knative.dev/eventing/pkg/kncloudevents/http_client.go b/vendor/knative.dev/eventing/pkg/kncloudevents/http_client.go new file mode 100644 index 0000000000..d9d938f737 --- /dev/null +++ b/vendor/knative.dev/eventing/pkg/kncloudevents/http_client.go @@ -0,0 +1,106 @@ +/* +Copyright 2020 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 + + http://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 kncloudevents + +import ( + nethttp "net/http" + "sync" + "time" + + "go.opencensus.io/plugin/ochttp" + "knative.dev/pkg/tracing/propagation/tracecontextb3" +) + +const ( + defaultRetryWaitMin = 1 * time.Second + defaultRetryWaitMax = 30 * time.Second +) + +type holder struct { + clientMutex sync.Mutex + connectionArgs *ConnectionArgs + client **nethttp.Client +} + +var clientHolder = holder{} + +// The used HTTP client is a singleton, so the same http client is reused across all the application. +// If connection args is modified, client is cleaned and a new one is created. +func getClient() *nethttp.Client { + clientHolder.clientMutex.Lock() + defer clientHolder.clientMutex.Unlock() + + if clientHolder.client == nil { + // Add connection options to the default transport. + var base = nethttp.DefaultTransport.(*nethttp.Transport).Clone() + clientHolder.connectionArgs.configureTransport(base) + c := &nethttp.Client{ + // Add output tracing. + Transport: &ochttp.Transport{ + Base: base, + Propagation: tracecontextb3.TraceContextEgress, + }, + } + clientHolder.client = &c + } + + return *clientHolder.client +} + +// ConfigureConnectionArgs configures the new connection args. +// The existing client won't be affected, but a new one will be created. +// Use sparingly, because it might lead to creating a lot of clients, none of them sharing their connection pool! +func ConfigureConnectionArgs(ca *ConnectionArgs) { + clientHolder.clientMutex.Lock() + defer clientHolder.clientMutex.Unlock() + + // Check if same config + if clientHolder.connectionArgs != nil && + ca != nil && + ca.MaxIdleConns == clientHolder.connectionArgs.MaxIdleConns && + ca.MaxIdleConnsPerHost == clientHolder.connectionArgs.MaxIdleConnsPerHost { + return + } + + if clientHolder.client != nil { + // Let's try to clean up a bit the existing client + // Note: this won't remove it nor close it + (*clientHolder.client).CloseIdleConnections() + + // Setting client to nil + clientHolder.client = nil + } + + clientHolder.connectionArgs = ca +} + +// ConnectionArgs allow to configure connection parameters to the underlying +// HTTP Client transport. +type ConnectionArgs struct { + // MaxIdleConns refers to the max idle connections, as in net/http/transport. + MaxIdleConns int + // MaxIdleConnsPerHost refers to the max idle connections per host, as in net/http/transport. + MaxIdleConnsPerHost int +} + +func (ca *ConnectionArgs) configureTransport(transport *nethttp.Transport) { + if ca == nil { + return + } + transport.MaxIdleConns = ca.MaxIdleConns + transport.MaxIdleConnsPerHost = ca.MaxIdleConnsPerHost +} diff --git a/vendor/knative.dev/eventing/pkg/kncloudevents/message_sender.go b/vendor/knative.dev/eventing/pkg/kncloudevents/message_sender.go index 1a425cd601..ae6d5f54c0 100644 --- a/vendor/knative.dev/eventing/pkg/kncloudevents/message_sender.go +++ b/vendor/knative.dev/eventing/pkg/kncloudevents/message_sender.go @@ -25,17 +25,10 @@ import ( "github.com/hashicorp/go-retryablehttp" "github.com/rickb777/date/period" - "go.opencensus.io/plugin/ochttp" - "knative.dev/pkg/tracing/propagation/tracecontextb3" duckv1 "knative.dev/eventing/pkg/apis/duck/v1" ) -const ( - defaultRetryWaitMin = 1 * time.Second - defaultRetryWaitMax = 30 * time.Second -) - var noRetries = RetryConfig{ RetryMax: 0, CheckRetry: func(ctx context.Context, resp *nethttp.Response, err error) (bool, error) { @@ -46,41 +39,15 @@ var noRetries = RetryConfig{ }, } -// ConnectionArgs allow to configure connection parameters to the underlying -// HTTP Client transport. -type ConnectionArgs struct { - // MaxIdleConns refers to the max idle connections, as in net/http/transport. - MaxIdleConns int - // MaxIdleConnsPerHost refers to the max idle connections per host, as in net/http/transport. - MaxIdleConnsPerHost int -} - -func (ca *ConnectionArgs) ConfigureTransport(transport *nethttp.Transport) { - if ca == nil { - return - } - transport.MaxIdleConns = ca.MaxIdleConns - transport.MaxIdleConnsPerHost = ca.MaxIdleConnsPerHost -} - type HttpMessageSender struct { Client *nethttp.Client Target string } -func NewHttpMessageSender(connectionArgs *ConnectionArgs, target string) (*HttpMessageSender, error) { - // Add connection options to the default transport. - var base = nethttp.DefaultTransport.(*nethttp.Transport).Clone() - connectionArgs.ConfigureTransport(base) - // Add output tracing. - client := &nethttp.Client{ - Transport: &ochttp.Transport{ - Base: base, - Propagation: tracecontextb3.TraceContextEgress, - }, - } - - return &HttpMessageSender{Client: client, Target: target}, nil +// Deprecated: Don't use this anymore, now it has the same effect of NewHTTPMessageSenderWithTarget +// If you need to modify the connection args, use ConfigureConnectionArgs sparingly. +func NewHttpMessageSender(ca *ConnectionArgs, target string) (*HttpMessageSender, error) { + return &HttpMessageSender{Client: getClient(), Target: target}, nil } func (s *HttpMessageSender) NewCloudEventRequest(ctx context.Context) (*nethttp.Request, error) { @@ -139,7 +106,12 @@ func (s *HttpMessageSender) SendWithRetries(req *nethttp.Request, config *RetryC }, } - return retryableClient.Do(&retryablehttp.Request{Request: req}) + retryableReq, err := retryablehttp.FromRequest(req) + if err != nil { + return nil, err + } + + return retryableClient.Do(retryableReq) } func NoRetries() RetryConfig { @@ -179,6 +151,6 @@ func RetryConfigFromDeliverySpec(spec duckv1.DeliverySpec) (RetryConfig, error) return retryConfig, nil } -func checkRetry(_ context.Context, resp *nethttp.Response, _ error) (bool, error) { - return resp != nil && resp.StatusCode >= 300, nil +func checkRetry(_ context.Context, resp *nethttp.Response, err error) (bool, error) { + return !(resp != nil && resp.StatusCode < 300), err } diff --git a/vendor/modules.txt b/vendor/modules.txt index fa2d1abcee..9f6d39e7df 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1027,7 +1027,7 @@ k8s.io/utils/buffer k8s.io/utils/integer k8s.io/utils/pointer k8s.io/utils/trace -# knative.dev/eventing v0.18.4-0.20201027215333-ca80ac848fd5 +# knative.dev/eventing v0.18.5-0.20201106045707-8dc624a41781 ## explicit knative.dev/eventing/pkg/apis/config knative.dev/eventing/pkg/apis/configs @@ -1261,7 +1261,7 @@ knative.dev/pkg/webhook/resourcesemantics knative.dev/pkg/webhook/resourcesemantics/conversion knative.dev/pkg/webhook/resourcesemantics/defaulting knative.dev/pkg/webhook/resourcesemantics/validation -# knative.dev/serving v0.18.1 +# knative.dev/serving v0.18.2 ## explicit knative.dev/serving/pkg/apis/autoscaling knative.dev/serving/pkg/apis/autoscaling/v1alpha1