diff --git a/go.mod b/go.mod index 4870ddc681bc..2c665381bca3 100644 --- a/go.mod +++ b/go.mod @@ -16,13 +16,13 @@ require ( github.com/hashicorp/golang-lru v1.0.2 github.com/influxdata/influxdb-client-go/v2 v2.9.0 github.com/kelseyhightower/envconfig v1.4.0 - github.com/tsenart/vegeta/v12 v12.11.3 + github.com/tsenart/vegeta/v12 v12.12.0 go.opencensus.io v0.24.0 go.uber.org/atomic v1.10.0 go.uber.org/automaxprocs v1.5.3 go.uber.org/zap v1.27.0 golang.org/x/net v0.27.0 - golang.org/x/sync v0.7.0 + golang.org/x/sync v0.8.0 golang.org/x/sys v0.22.0 golang.org/x/time v0.5.0 google.golang.org/api v0.183.0 @@ -34,10 +34,10 @@ require ( k8s.io/code-generator v0.29.2 k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 k8s.io/utils v0.0.0-20240102154912-e7106e64919e - knative.dev/caching v0.0.0-20240730152355-c601f824cec3 + knative.dev/caching v0.0.0-20240805055809-0a5c1ed07f7a knative.dev/hack v0.0.0-20240801232131-441a19fc9ead - knative.dev/networking v0.0.0-20240730152525-543181c32243 - knative.dev/pkg v0.0.0-20240730131544-0e7ffe491d5e + knative.dev/networking v0.0.0-20240802083044-f1702380495f + knative.dev/pkg v0.0.0-20240805063731-c88d5dad9653 sigs.k8s.io/yaml v1.4.0 ) diff --git a/go.sum b/go.sum index a08ed974e697..199949800035 100644 --- a/go.sum +++ b/go.sum @@ -507,8 +507,8 @@ github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8 github.com/stvp/go-udp-testing v0.0.0-20201019212854-469649b16807/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc= github.com/tsenart/go-tsz v0.0.0-20180814235614-0bd30b3df1c3 h1:pcQGQzTwCg//7FgVywqge1sW9Yf8VMsMdG58MI5kd8s= github.com/tsenart/go-tsz v0.0.0-20180814235614-0bd30b3df1c3/go.mod h1:SWZznP1z5Ki7hDT2ioqiFKEse8K9tU2OUvaRI0NeGQo= -github.com/tsenart/vegeta/v12 v12.11.3 h1:U0rW+Vt/WrG2566n6YXcijvP41EoKzL8/85Xnx+f/wQ= -github.com/tsenart/vegeta/v12 v12.11.3/go.mod h1:gpdfR++WHV9/RZh4oux0f6lNPhsOH8pCjIGUlcPQe1M= +github.com/tsenart/vegeta/v12 v12.12.0 h1:FKMMNomd3auAElO/TtbXzRFXAKGee6N/GKCGweFVm2U= +github.com/tsenart/vegeta/v12 v12.12.0/go.mod h1:gpdfR++WHV9/RZh4oux0f6lNPhsOH8pCjIGUlcPQe1M= github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= @@ -662,8 +662,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -945,14 +945,14 @@ k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/A k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= k8s.io/utils v0.0.0-20240102154912-e7106e64919e h1:eQ/4ljkx21sObifjzXwlPKpdGLrCfRziVtos3ofG/sQ= k8s.io/utils v0.0.0-20240102154912-e7106e64919e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -knative.dev/caching v0.0.0-20240730152355-c601f824cec3 h1:9RVCdjbAQYkQUHPOaeubQpdY8YzUSIMeAIvcz8RAN8A= -knative.dev/caching v0.0.0-20240730152355-c601f824cec3/go.mod h1:m7oWdAp8e2iFqSpiOiyM2zUYzzlMdHc+9cULTSRuCQM= +knative.dev/caching v0.0.0-20240805055809-0a5c1ed07f7a h1:7DgOkQg8N8ZZ3JFX8ARm2x3I8a4krDRm8X7SN/XhpzM= +knative.dev/caching v0.0.0-20240805055809-0a5c1ed07f7a/go.mod h1:c3GhX20uCX8gscaPHnhicuvFU67TNwWzo+tFOrhXZiQ= knative.dev/hack v0.0.0-20240801232131-441a19fc9ead h1:ViH1OEO0LViKa6W61YKUpLzOp7CJCFL9yLyIojHIuQ8= knative.dev/hack v0.0.0-20240801232131-441a19fc9ead/go.mod h1:R0ritgYtjLDO9527h5vb5X6gfvt5LCrJ55BNbVDsWiY= -knative.dev/networking v0.0.0-20240730152525-543181c32243 h1:LD1SBebiWctT3NUTVAHcgoHYzvXeWdkgn/JfgMF2OaU= -knative.dev/networking v0.0.0-20240730152525-543181c32243/go.mod h1:bBdtfiQEMV4F3nET1NxS8OqERgo7K5DLiHDcNlXXjBw= -knative.dev/pkg v0.0.0-20240730131544-0e7ffe491d5e h1:pRbTdwG1ePdAJ+8mwFbtsY5gKFBaF+299QgY8BRn+ng= -knative.dev/pkg v0.0.0-20240730131544-0e7ffe491d5e/go.mod h1:wQoeURvX7/oMI5ZcNowGGIX4cmOUzew1cyNf3KRZdFE= +knative.dev/networking v0.0.0-20240802083044-f1702380495f h1:1mIVNRZELhQLuDDFti6R26ZQXqeL2UkS/K0cMqKzBxw= +knative.dev/networking v0.0.0-20240802083044-f1702380495f/go.mod h1:FNWuEcSif270xzNwQx5xFvEsv7wKiKGPUKzpAXkajT8= +knative.dev/pkg v0.0.0-20240805063731-c88d5dad9653 h1:VHUW124ZpkDn4EnIzMuGWvGuJte3ISIoHMmEw2kx0zU= +knative.dev/pkg v0.0.0-20240805063731-c88d5dad9653/go.mod h1:H+5rS2GEWpAZzrmQoXOEVq/1M77LLMhR7+4jZBMOQ24= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/vendor/github.com/tsenart/vegeta/v12/README.md b/vendor/github.com/tsenart/vegeta/v12/README.md index 4a9521476c6d..81e5a8dda8a9 100644 --- a/vendor/github.com/tsenart/vegeta/v12/README.md +++ b/vendor/github.com/tsenart/vegeta/v12/README.md @@ -92,6 +92,10 @@ attack command: TLS client PEM encoded certificate file -chunked Send body with chunked transfer encoding + -connect-to value + A mapping of (ip|host):port to use instead of a target URL's (ip|host):port. Can be repeated multiple times. + Identical src:port with different dst:port will round-robin over the different dst:port pairs. + Example: google.com:80:localhost:6060 -connections int Max open idle connections per target host (default 10000) -dns-ttl value @@ -178,7 +182,6 @@ examples: vegeta report -type=json results.bin > metrics.json cat results.bin | vegeta plot > plot.html cat results.bin | vegeta report -type="hist[0,100ms,200ms,300ms]" - ``` #### `-cpus` diff --git a/vendor/github.com/tsenart/vegeta/v12/attack.go b/vendor/github.com/tsenart/vegeta/v12/attack.go index f83c2cba7454..061285b5b1ee 100644 --- a/vendor/github.com/tsenart/vegeta/v12/attack.go +++ b/vendor/github.com/tsenart/vegeta/v12/attack.go @@ -62,6 +62,7 @@ func attackCmd() command { fs.StringVar(&opts.promAddr, "prometheus-addr", "", "Prometheus exporter listen address [empty = disabled]. Example: 0.0.0.0:8880") fs.Var(&dnsTTLFlag{&opts.dnsTTL}, "dns-ttl", "Cache DNS lookups for the given duration [-1 = disabled, 0 = forever]") fs.BoolVar(&opts.sessionTickets, "session-tickets", false, "Enable TLS session resumption using session tickets") + fs.Var(&connectToFlag{&opts.connectTo}, "connect-to", "A mapping of (ip|host):port to use instead of a target URL's (ip|host):port. Can be repeated multiple times.\nIdentical src:port with different dst:port will round-robin over the different dst:port pairs.\nExample: google.com:80:localhost:6060") systemSpecificFlags(fs, opts) return command{fs, func(args []string) error { @@ -108,6 +109,7 @@ type attackOpts struct { promAddr string dnsTTL time.Duration sessionTickets bool + connectTo map[string][]string } // attack validates the attack arguments, sets up the @@ -218,6 +220,7 @@ func attack(opts *attackOpts) (err error) { vegeta.ProxyHeader(proxyHdr), vegeta.ChunkedBody(opts.chunked), vegeta.DNSCaching(opts.dnsTTL), + vegeta.ConnectTo(opts.connectTo), vegeta.SessionTickets(opts.sessionTickets), ) diff --git a/vendor/github.com/tsenart/vegeta/v12/flags.go b/vendor/github.com/tsenart/vegeta/v12/flags.go index 7ac8fcb1f2c8..cbd47bbcdf7a 100644 --- a/vendor/github.com/tsenart/vegeta/v12/flags.go +++ b/vendor/github.com/tsenart/vegeta/v12/flags.go @@ -6,6 +6,7 @@ import ( "math" "net" "net/http" + "sort" "strconv" "strings" "time" @@ -153,3 +154,54 @@ func (f *dnsTTLFlag) String() string { } return f.ttl.String() } + +const connectToFormat = "src:port:dst:port" + +type connectToFlag struct { + addrMap *map[string][]string +} + +func (c *connectToFlag) String() string { + if c.addrMap == nil { + return "" + } + + addrMappings := make([]string, 0, len(*c.addrMap)) + for k, v := range *c.addrMap { + addrMappings = append(addrMappings, k+":"+strings.Join(v, ",")) + } + + sort.Strings(addrMappings) + return strings.Join(addrMappings, ";") +} + +func (c *connectToFlag) Set(s string) error { + if c.addrMap == nil { + return nil + } + + if *c.addrMap == nil { + *c.addrMap = make(map[string][]string) + } + + parts := strings.Split(s, ":") + if len(parts) != 4 { + return fmt.Errorf("invalid -connect-to %q, expected format: %s", s, connectToFormat) + } + srcAddr := parts[0] + ":" + parts[1] + dstAddr := parts[2] + ":" + parts[3] + + // Parse source address + if _, _, err := net.SplitHostPort(srcAddr); err != nil { + return fmt.Errorf("invalid source address expression [%s], expected address:port", srcAddr) + } + + // Parse destination address + if _, _, err := net.SplitHostPort(dstAddr); err != nil { + return fmt.Errorf("invalid destination address expression [%s], expected address:port", dstAddr) + } + + (*c.addrMap)[srcAddr] = append((*c.addrMap)[srcAddr], dstAddr) + + return nil +} diff --git a/vendor/github.com/tsenart/vegeta/v12/lib/attack.go b/vendor/github.com/tsenart/vegeta/v12/lib/attack.go index 0e43e91fee74..d2f1cf5a4161 100644 --- a/vendor/github.com/tsenart/vegeta/v12/lib/attack.go +++ b/vendor/github.com/tsenart/vegeta/v12/lib/attack.go @@ -28,6 +28,9 @@ type Attacker struct { maxWorkers uint64 maxBody int64 redirects int + seqmu sync.Mutex + seq uint64 + began time.Time chunked bool } @@ -272,6 +275,45 @@ func ProxyHeader(h http.Header) func(*Attacker) { } } +// ConnectTo returns a functional option which makes the attacker use the +// passed in map to translate target addr:port pairs. When used with DNSCaching, +// it must be used after it. +func ConnectTo(addrMap map[string][]string) func(*Attacker) { + return func(a *Attacker) { + if len(addrMap) == 0 { + return + } + + tr, ok := a.client.Transport.(*http.Transport) + if !ok { + return + } + + dial := tr.DialContext + if dial == nil { + dial = a.dialer.DialContext + } + + type roundRobin struct { + addrs []string + n int + } + + connectTo := make(map[string]*roundRobin, len(addrMap)) + for k, v := range addrMap { + connectTo[k] = &roundRobin{addrs: v} + } + + tr.DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) { + if cm, ok := connectTo[addr]; ok { + cm.n = (cm.n + 1) % len(cm.addrs) + addr = cm.addrs[cm.n] + } + return dial(ctx, network, addr) + } + } +} + // DNSCaching returns a functional option that enables DNS caching for // the given ttl. When ttl is zero cached entries will never expire. // When ttl is non-zero, this will start a refresh go-routine that updates diff --git a/vendor/golang.org/x/sync/LICENSE b/vendor/golang.org/x/sync/LICENSE index 6a66aea5eafe..2a7cf70da6e4 100644 --- a/vendor/golang.org/x/sync/LICENSE +++ b/vendor/golang.org/x/sync/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/modules.txt b/vendor/modules.txt index 26b8615fd412..9742b32dd18a 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -507,7 +507,7 @@ github.com/spf13/pflag ## explicit github.com/tsenart/go-tsz github.com/tsenart/go-tsz/testdata -# github.com/tsenart/vegeta/v12 v12.11.3 +# github.com/tsenart/vegeta/v12 v12.12.0 ## explicit; go 1.22 github.com/tsenart/vegeta/v12 github.com/tsenart/vegeta/v12/internal/resolver @@ -625,7 +625,7 @@ golang.org/x/oauth2/google/internal/stsexchange golang.org/x/oauth2/internal golang.org/x/oauth2/jws golang.org/x/oauth2/jwt -# golang.org/x/sync v0.7.0 +# golang.org/x/sync v0.8.0 ## explicit; go 1.18 golang.org/x/sync/errgroup golang.org/x/sync/semaphore @@ -1323,7 +1323,7 @@ k8s.io/utils/pointer k8s.io/utils/ptr k8s.io/utils/strings/slices k8s.io/utils/trace -# knative.dev/caching v0.0.0-20240730152355-c601f824cec3 +# knative.dev/caching v0.0.0-20240805055809-0a5c1ed07f7a ## explicit; go 1.22 knative.dev/caching/config knative.dev/caching/pkg/apis/caching @@ -1347,7 +1347,7 @@ knative.dev/caching/pkg/client/listers/caching/v1alpha1 # knative.dev/hack v0.0.0-20240801232131-441a19fc9ead ## explicit; go 1.21 knative.dev/hack -# knative.dev/networking v0.0.0-20240730152525-543181c32243 +# knative.dev/networking v0.0.0-20240802083044-f1702380495f ## explicit; go 1.22 knative.dev/networking/config knative.dev/networking/pkg @@ -1386,7 +1386,7 @@ knative.dev/networking/pkg/http/stats knative.dev/networking/pkg/ingress knative.dev/networking/pkg/k8s knative.dev/networking/pkg/prober -# knative.dev/pkg v0.0.0-20240730131544-0e7ffe491d5e +# knative.dev/pkg v0.0.0-20240805063731-c88d5dad9653 ## explicit; go 1.22 knative.dev/pkg/apiextensions/storageversion knative.dev/pkg/apiextensions/storageversion/cmd/migrate