From ad72215936015da3aea040ebd34ed9a2069231d4 Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Thu, 8 Jul 2021 15:03:48 -0400 Subject: [PATCH 01/21] Initial sketch for Go --- go-many-resources/Pulumi.yaml | 3 + go-many-resources/dummy.go | 28 +++ go-many-resources/go.mod | 7 + go-many-resources/go.sum | 431 ++++++++++++++++++++++++++++++++++ go-many-resources/main.go | 45 ++++ misc/test/performance_test.go | 18 ++ 6 files changed, 532 insertions(+) create mode 100644 go-many-resources/Pulumi.yaml create mode 100644 go-many-resources/dummy.go create mode 100644 go-many-resources/go.mod create mode 100644 go-many-resources/go.sum create mode 100644 go-many-resources/main.go diff --git a/go-many-resources/Pulumi.yaml b/go-many-resources/Pulumi.yaml new file mode 100644 index 000000000..54e194276 --- /dev/null +++ b/go-many-resources/Pulumi.yaml @@ -0,0 +1,3 @@ +name: go-many-resources +runtime: go +description: A benchmark to test performance of stacks with many resources diff --git a/go-many-resources/dummy.go b/go-many-resources/dummy.go new file mode 100644 index 000000000..e89f5d270 --- /dev/null +++ b/go-many-resources/dummy.go @@ -0,0 +1,28 @@ +package main + +import ( + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type Dummy struct { + pulumi.ResourceState + + Deadweight pulumi.StringOutput `pulumi:"deadweight"` +} + +type DummyArgs struct { + Deadweight pulumi.StringInput +} + +func NewDummy(ctx *pulumi.Context, name string, args *DummyArgs, opts ...pulumi.ResourceOption) (*Dummy, error) { + dummy := &Dummy{} + err := ctx.RegisterComponentResource("examples:dummy:Dummy", name, dummy, opts...) + if err != nil { + return nil, err + } + dummy.Deadweight = args.Deadweight.ToStringOutput() + ctx.RegisterResourceOutputs(dummy, pulumi.Map{ + "deadweight": dummy.Deadweight, + }) + return dummy, nil +} diff --git a/go-many-resources/go.mod b/go-many-resources/go.mod new file mode 100644 index 000000000..4c55bacd1 --- /dev/null +++ b/go-many-resources/go.mod @@ -0,0 +1,7 @@ +module go-many-resources + +go 1.14 + +require ( + github.com/pulumi/pulumi/sdk/v3 v3.6.1 +) diff --git a/go-many-resources/go.sum b/go-many-resources/go.sum new file mode 100644 index 000000000..f862101cb --- /dev/null +++ b/go-many-resources/go.sum @@ -0,0 +1,431 @@ +cloud.google.com/go v0.26.0 h1:e0WKqKTd5BnrG8aKH3J3h+QvEIQtSUcf2n5UZ5ZgLtQ= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Microsoft/go-winio v0.4.14 h1:+hMXMk01us9KgxGb7ftKQt2Xpf5hH/yky+TDA+qxleU= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cheggaaa/pb v1.0.18 h1:G/DgkKaBP0V5lnBg/vx61nVxxAU+VqU5yMzSc0f2PPE= +github.com/cheggaaa/pb v1.0.18/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f h1:WBZRG4aNOuI15bLRrCgN8fCq8E5Xuty6jGbmSNEvSsU= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/coreos/bbolt v1.3.2 h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazuY= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954 h1:RMLoZVzv4GliuWafOuPuQDKSm1SJph7uCRnnS61JAn4= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/djherbis/times v1.2.0 h1:xANXjsC/iBqbO00vkWlYwPWgBgEVU6m6AFYg0Pic+Mc= +github.com/djherbis/times v1.2.0/go.mod h1:CGMZlo255K5r4Yw0b9RRfFQpM2y7uOmxg4jm9HsaVf8= +github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4 h1:rEvIZUSZ3fx39WIi3JkQqQBitGwpELBIYWeBVh6wn+E= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gofrs/flock v0.7.1 h1:DP+LD/t0njgoPBvT5MJLeliUIVQR03hiKR6vezdwHlc= +github.com/gofrs/flock v0.7.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/uuid v3.3.0+incompatible h1:8K4tyRfvU1CYPgJsveYFQMhpFd/wXNM7iK6rR7UHz84= +github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef h1:veQD95Isof8w9/WXiA+pa3tz3fJXkt5B7QaRBrM62gk= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1 h1:G5FRp8JnTd7RQH5kemVNlMeyXQAztQ3mOWV95KxsXH8= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0 h1:bM6ZAFZmc/wPFaRDi0d5L7hGEZEx/2u+Tmr2evNHDiI= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= +github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v2wtGp9Gmz1Ze3eVRAWJMLokvN3QjdzCHLY= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0 h1:reN85Pxc5larApoH1keMBiu2GWtPqXQ1nc9gx+jOU+E= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-runewidth v0.0.8 h1:3tS41NlGYSmhhe/8fhGRzc+z3AYCw1Fe1WAyLuujKs0= +github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223 h1:F9x/1yl3T2AeKLr2AMdilSD8+f9bvMnNN8VS5iDtovc= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/pelletier/go-buffruneio v0.2.0 h1:U4t4R6YkofJ5xHm3dJzuRpPZ0mr5MMCoAWooScCR7aA= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= +github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3 h1:9iH4JKXLzFbOAdtqv/a+j8aewx2Y8lAjAydhbaScPF8= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0 h1:7etb9YClo3a6HjLzfl6rIQaU+FDfi0VSX39io3aQ+DM= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084 h1:sofwID9zm4tzrgykg80hfFph1mryUeLRsUfoocVVmRY= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/pulumi/pulumi/sdk/v3 v3.6.1 h1:ko6YqYL8qtnYzFcbLvmJQhHTQp290/MZ8i77TxX5op0= +github.com/pulumi/pulumi/sdk/v3 v3.6.1/go.mod h1:GBHyQ7awNQSRmiKp/p8kIKrGrMOZeA/k2czoM/GOqds= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af h1:gu+uRPtBe88sKxUCEXRoeCvVG90TJmwhiqRpvdhQFng= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94 h1:G04eS0JkAIVZfaJLjla9dNxkJCPiKIGZlw9AfOhzOD0= +github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94/go.mod h1:b18R55ulyQ/h3RaWyloPyER7fWQVZvimKKhnI5OfrJQ= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.4.0 h1:yXHLWeravcrgGyFSyCgdYpXQ9dR9c/WED3pg1RhxqEU= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4= +github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6 h1:9VTskZOIRf2vKF3UL8TuWElry5pgUpV1tFSe/e/0m/E= +github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 h1:X9dsIWPuuEJlPX//UmRKophhOKCGXc46RVIGuttks68= +github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7/go.mod h1:UxoP3EypF8JfGEjAII8jx1q8rQyDnX8qdTCs/UQBVIE= +github.com/uber/jaeger-client-go v2.22.1+incompatible h1:NHcubEkVbahf9t3p75TOCR83gdUHXjRJvjoBh1yACsM= +github.com/uber/jaeger-client-go v2.22.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.2.0+incompatible h1:MxZXOiR2JuoANZ3J6DE/U0kSFv/eJ/GfSYVCjK7dyaw= +github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= +github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yuin/goldmark v1.1.27 h1:nqDD4MMMQA0lmWq03Z2/myGPYLQoXtmi0rGVs95ntbo= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.etcd.io/bbolt v1.3.2 h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200317142112-1b76d66859c6 h1:TjszyFsQsyZNHwdVdZ5m7bjmreu0znc2kRYsEml9/Ww= +golang.org/x/crypto v0.0.0-20200317142112-1b76d66859c6/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4 h1:c2HOrn5iMezYjSlGPncknSEr/8x5LELb/ilJbXi9DEA= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +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-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980 h1:OjiUf46hAmXblsZdnoSXsEUSKU8r1UEzcL5RVZ4gO9Y= +golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200608174601-1b747fd94509 h1:MI14dOfl3OG6Zd32w3ugsrvcUO810fDZdWakTq39dH4= +golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482 h1:i+Aiej6cta/Frzp13/swvwz5O00kYcSe0A/C5Wd7zX8= +google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/src-d/go-billy.v4 v4.3.2 h1:0SQA1pRztfTFx2miS8sA97XvooFeNOmvUenF4o0EcVg= +gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= +gopkg.in/src-d/go-git-fixtures.v3 v3.5.0 h1:ivZFOIltbce2Mo8IjzUHAFoq/IylO9WHhNOAJK+LsJg= +gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.13.1 h1:SRtFyV8Kxc0UP7aCHcijOMQGPxHSmMOPrzulQWolkYE= +gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc h1:/hemPrYIhOhy8zYrNj+069zDB68us2sMGsfkFJO0iZs= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/go-many-resources/main.go b/go-many-resources/main.go new file mode 100644 index 000000000..5330d1844 --- /dev/null +++ b/go-many-resources/main.go @@ -0,0 +1,45 @@ +package main + +import ( + "fmt" + "os" + "strconv" + "strings" + + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +func main() { + resourceCount := getEnvInt("RESOURCE_COUNT", 64) + resourcePayloadBytes := getEnvInt("RESOURCE_PAYLOAD_BYTES", 1024) + + pulumi.Run(func(ctx *pulumi.Context) error { + for i := 0; i < resourceCount; i++ { + deadweight := strings.Repeat(fmt.Sprintf("%08d", i), resourcePayloadBytes/8) + + dummy, err := NewDummy(ctx, fmt.Sprintf("dummy-%d", i), &DummyArgs{ + Deadweight: pulumi.String(deadweight), + }) + if err != nil { + return err + } + + ctx.Export(fmt.Sprintf("output-%d", i), dummy.Deadweight) + } + return nil + }) +} + +func getEnvInt(name string, defaultValue int) int { + v := os.Getenv(name) + if v == "" { + return defaultValue + } + + intv, err := strconv.Atoi(v) + if err != nil { + return defaultValue + } + + return intv +} diff --git a/misc/test/performance_test.go b/misc/test/performance_test.go index 8e5d2d53a..5a6106112 100644 --- a/misc/test/performance_test.go +++ b/misc/test/performance_test.go @@ -3,6 +3,7 @@ package test import ( + "fmt" "log" "os" "path" @@ -99,6 +100,23 @@ func TestAccAwsPyS3Folder(t *testing.T) { integration.ProgramTest(t, &test) } +func TestGoManyResources(t *testing.T) { + for _, resourceCount := range []int{64, 256} { + t.Run(fmt.Sprintf("with-%d-resources", resourceCount), func(t *testing.T) { + folder := "go-many-resources" + benchmark := bench(fmt.Sprintf("%s-%d-ALPHA", folder, resourceCount), "", "go", "go") + opts := integration.ProgramTestOptions{ + Dir: path.Join(getCwd(t), "..", "..", folder), + ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { + assert.Equal(t, "ok", stack.Outputs["result"].(string)) + }, + } + test := getBaseOptions(t).With(opts).With(benchmark.ProgramTestOptions()) + integration.ProgramTest(t, &test) + }) + } +} + func TestMain(m *testing.M) { code := m.Run() From 626d58fece8d803dc918617a43f2c79a226b307c Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Thu, 8 Jul 2021 15:21:32 -0400 Subject: [PATCH 02/21] Fix test expectations --- misc/test/performance_test.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/misc/test/performance_test.go b/misc/test/performance_test.go index 5a6106112..2668adac4 100644 --- a/misc/test/performance_test.go +++ b/misc/test/performance_test.go @@ -108,7 +108,13 @@ func TestGoManyResources(t *testing.T) { opts := integration.ProgramTestOptions{ Dir: path.Join(getCwd(t), "..", "..", folder), ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { - assert.Equal(t, "ok", stack.Outputs["result"].(string)) + output1, gotOutput1 := stack.Outputs["output-1"] + assert.True(t, gotOutput1) + output1str, isStr := output1.(string) + assert.True(t, isStr) + if gotOutput1 && isStr { + assert.Equal(t, 1024, len(output1str)) + } }, } test := getBaseOptions(t).With(opts).With(benchmark.ProgramTestOptions()) From fce6b1d110041cc40edfa9c427614576652b5a44 Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Thu, 8 Jul 2021 15:58:20 -0400 Subject: [PATCH 03/21] Make sure we are actually scaling resource counts --- misc/test/performance_test.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/misc/test/performance_test.go b/misc/test/performance_test.go index 2668adac4..a5fd691d5 100644 --- a/misc/test/performance_test.go +++ b/misc/test/performance_test.go @@ -101,13 +101,15 @@ func TestAccAwsPyS3Folder(t *testing.T) { } func TestGoManyResources(t *testing.T) { - for _, resourceCount := range []int{64, 256} { + for _, resourceCount := range []int{64, 128, 256} { t.Run(fmt.Sprintf("with-%d-resources", resourceCount), func(t *testing.T) { folder := "go-many-resources" - benchmark := bench(fmt.Sprintf("%s-%d-ALPHA", folder, resourceCount), "", "go", "go") + benchmark := bench(fmt.Sprintf("%s-%d-ALPHA-V1", folder, resourceCount), "", "go", "go") opts := integration.ProgramTestOptions{ Dir: path.Join(getCwd(t), "..", "..", folder), + Env: map[string]string{"RESOURCE_COUNT": fmt.Sprintf("%d", resourceCount)}, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { + assert.Equal(t, stack.Outputs, resourceCount) output1, gotOutput1 := stack.Outputs["output-1"] assert.True(t, gotOutput1) output1str, isStr := output1.(string) From 0fbf00d867feb1b084e447bf40612def3bb18077 Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Thu, 8 Jul 2021 16:03:54 -0400 Subject: [PATCH 04/21] Fix test compilation --- misc/test/performance_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/test/performance_test.go b/misc/test/performance_test.go index a5fd691d5..3ed0ee94c 100644 --- a/misc/test/performance_test.go +++ b/misc/test/performance_test.go @@ -107,7 +107,7 @@ func TestGoManyResources(t *testing.T) { benchmark := bench(fmt.Sprintf("%s-%d-ALPHA-V1", folder, resourceCount), "", "go", "go") opts := integration.ProgramTestOptions{ Dir: path.Join(getCwd(t), "..", "..", folder), - Env: map[string]string{"RESOURCE_COUNT": fmt.Sprintf("%d", resourceCount)}, + Env: []string{fmt.Sprintf("RESOURCE_COUNT=%d", resourceCount)}, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { assert.Equal(t, stack.Outputs, resourceCount) output1, gotOutput1 := stack.Outputs["output-1"] From e253f43b46bdefff437093f4c0da71bc461c2c45 Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Thu, 8 Jul 2021 16:16:52 -0400 Subject: [PATCH 05/21] Int of course --- misc/test/performance_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/test/performance_test.go b/misc/test/performance_test.go index 3ed0ee94c..5cb7671c5 100644 --- a/misc/test/performance_test.go +++ b/misc/test/performance_test.go @@ -109,7 +109,7 @@ func TestGoManyResources(t *testing.T) { Dir: path.Join(getCwd(t), "..", "..", folder), Env: []string{fmt.Sprintf("RESOURCE_COUNT=%d", resourceCount)}, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { - assert.Equal(t, stack.Outputs, resourceCount) + assert.Equal(t, len(stack.Outputs), resourceCount) output1, gotOutput1 := stack.Outputs["output-1"] assert.True(t, gotOutput1) output1str, isStr := output1.(string) From b5a2da1670b81e22356e8ba769ac6141fe0cd0d7 Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Thu, 8 Jul 2021 16:28:53 -0400 Subject: [PATCH 06/21] Avoid loop var closure capture --- misc/test/performance_test.go | 40 +++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/misc/test/performance_test.go b/misc/test/performance_test.go index 5cb7671c5..85e1a39f0 100644 --- a/misc/test/performance_test.go +++ b/misc/test/performance_test.go @@ -101,26 +101,30 @@ func TestAccAwsPyS3Folder(t *testing.T) { } func TestGoManyResources(t *testing.T) { + check := func(t *testing.T, resourceCount int) { + folder := "go-many-resources" + benchmark := bench(fmt.Sprintf("%s-%d-ALPHA-V1", folder, resourceCount), "", "go", "go") + opts := integration.ProgramTestOptions{ + Dir: path.Join(getCwd(t), "..", "..", folder), + Env: []string{fmt.Sprintf("RESOURCE_COUNT=%d", resourceCount)}, + ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { + assert.Equal(t, len(stack.Outputs), resourceCount) + output1, gotOutput1 := stack.Outputs["output-1"] + assert.True(t, gotOutput1) + output1str, isStr := output1.(string) + assert.True(t, isStr) + if gotOutput1 && isStr { + assert.Equal(t, 1024, len(output1str)) + } + }, + } + test := getBaseOptions(t).With(opts).With(benchmark.ProgramTestOptions()) + integration.ProgramTest(t, &test) + } + for _, resourceCount := range []int{64, 128, 256} { t.Run(fmt.Sprintf("with-%d-resources", resourceCount), func(t *testing.T) { - folder := "go-many-resources" - benchmark := bench(fmt.Sprintf("%s-%d-ALPHA-V1", folder, resourceCount), "", "go", "go") - opts := integration.ProgramTestOptions{ - Dir: path.Join(getCwd(t), "..", "..", folder), - Env: []string{fmt.Sprintf("RESOURCE_COUNT=%d", resourceCount)}, - ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { - assert.Equal(t, len(stack.Outputs), resourceCount) - output1, gotOutput1 := stack.Outputs["output-1"] - assert.True(t, gotOutput1) - output1str, isStr := output1.(string) - assert.True(t, isStr) - if gotOutput1 && isStr { - assert.Equal(t, 1024, len(output1str)) - } - }, - } - test := getBaseOptions(t).With(opts).With(benchmark.ProgramTestOptions()) - integration.ProgramTest(t, &test) + check(t, resourceCount) }) } } From 4f46cbf0379a84c6a7e558cddbe9b67dd32288f8 Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Thu, 8 Jul 2021 17:49:17 -0400 Subject: [PATCH 07/21] Add configurations with smaller deadweight, more resources --- misc/test/performance_test.go | 42 +++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/misc/test/performance_test.go b/misc/test/performance_test.go index 85e1a39f0..4dbe3e537 100644 --- a/misc/test/performance_test.go +++ b/misc/test/performance_test.go @@ -100,21 +100,45 @@ func TestAccAwsPyS3Folder(t *testing.T) { integration.ProgramTest(t, &test) } +type manyResourcesConfig struct { + suffix string + resources int + payloadBytes int +} + func TestGoManyResources(t *testing.T) { - check := func(t *testing.T, resourceCount int) { - folder := "go-many-resources" - benchmark := bench(fmt.Sprintf("%s-%d-ALPHA-V1", folder, resourceCount), "", "go", "go") + folder := "go-many-resources" + + configurations := []manyResourcesConfig{ + {suffix: "-64-ALPHA-V1", resources: 64, payloadBytes: 1024}, + {suffix: "-128-ALPHA-V1", resources: 128, payloadBytes: 1024}, + {suffix: "-256-ALPHA-V1", resources: 256, payloadBytes: 1024}, + + {suffix: "-64-ALPHA-V2", resources: 64, payloadBytes: 8}, + {suffix: "-128-ALPHA-V2", resources: 128, payloadBytes: 8}, + {suffix: "-256-ALPHA-V2", resources: 256, payloadBytes: 8}, + {suffix: "-512-ALPHA-V2", resources: 512, payloadBytes: 8}, + {suffix: "-1024-ALPHA-V2", resources: 1024, payloadBytes: 8}, + {suffix: "-2028-ALPHA-V2", resources: 2048, payloadBytes: 8}, + {suffix: "-4096-ALPHA-V2", resources: 4096, payloadBytes: 8}, + } + + check := func(t *testing.T, cfg manyResourcesConfig) { + benchmark := bench(fmt.Sprintf("%s%s", folder, cfg.suffix), "", "go", "go") opts := integration.ProgramTestOptions{ Dir: path.Join(getCwd(t), "..", "..", folder), - Env: []string{fmt.Sprintf("RESOURCE_COUNT=%d", resourceCount)}, + Env: []string{ + fmt.Sprintf("RESOURCE_COUNT=%d", cfg.resources), + fmt.Sprintf("RESOURCE_PAYLOAD_BYTES=%d", cfg.payloadBytes), + }, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { - assert.Equal(t, len(stack.Outputs), resourceCount) + assert.Equal(t, len(stack.Outputs), cfg.resources) output1, gotOutput1 := stack.Outputs["output-1"] assert.True(t, gotOutput1) output1str, isStr := output1.(string) assert.True(t, isStr) if gotOutput1 && isStr { - assert.Equal(t, 1024, len(output1str)) + assert.Equal(t, cfg.payloadBytes, len(output1str)) } }, } @@ -122,9 +146,9 @@ func TestGoManyResources(t *testing.T) { integration.ProgramTest(t, &test) } - for _, resourceCount := range []int{64, 128, 256} { - t.Run(fmt.Sprintf("with-%d-resources", resourceCount), func(t *testing.T) { - check(t, resourceCount) + for _, configuration := range configurations { + t.Run(fmt.Sprintf("%s%s", folder, configuration.suffix), func(t *testing.T) { + check(t, configuration) }) } } From c6088b04bb1daf8f1ea4e2904dc5b3855d7c4936 Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Thu, 8 Jul 2021 18:26:52 -0400 Subject: [PATCH 08/21] 4096 was too slow, try lower settings first --- misc/test/performance_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/misc/test/performance_test.go b/misc/test/performance_test.go index 4dbe3e537..94cf0814f 100644 --- a/misc/test/performance_test.go +++ b/misc/test/performance_test.go @@ -117,10 +117,10 @@ func TestGoManyResources(t *testing.T) { {suffix: "-64-ALPHA-V2", resources: 64, payloadBytes: 8}, {suffix: "-128-ALPHA-V2", resources: 128, payloadBytes: 8}, {suffix: "-256-ALPHA-V2", resources: 256, payloadBytes: 8}, - {suffix: "-512-ALPHA-V2", resources: 512, payloadBytes: 8}, - {suffix: "-1024-ALPHA-V2", resources: 1024, payloadBytes: 8}, - {suffix: "-2028-ALPHA-V2", resources: 2048, payloadBytes: 8}, - {suffix: "-4096-ALPHA-V2", resources: 4096, payloadBytes: 8}, + // {suffix: "-512-ALPHA-V2", resources: 512, payloadBytes: 8}, + // {suffix: "-1024-ALPHA-V2", resources: 1024, payloadBytes: 8}, + // {suffix: "-2028-ALPHA-V2", resources: 2048, payloadBytes: 8}, + // {suffix: "-4096-ALPHA-V2", resources: 4096, payloadBytes: 8}, } check := func(t *testing.T, cfg manyResourcesConfig) { From dbe98d996fb2ddadf9bc41d7857901a528bd40b2 Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Fri, 9 Jul 2021 09:58:53 -0400 Subject: [PATCH 09/21] 4096 timed out in 4h but can we have 512? --- misc/test/performance_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/test/performance_test.go b/misc/test/performance_test.go index 94cf0814f..eddf4256f 100644 --- a/misc/test/performance_test.go +++ b/misc/test/performance_test.go @@ -117,7 +117,7 @@ func TestGoManyResources(t *testing.T) { {suffix: "-64-ALPHA-V2", resources: 64, payloadBytes: 8}, {suffix: "-128-ALPHA-V2", resources: 128, payloadBytes: 8}, {suffix: "-256-ALPHA-V2", resources: 256, payloadBytes: 8}, - // {suffix: "-512-ALPHA-V2", resources: 512, payloadBytes: 8}, + {suffix: "-512-ALPHA-V2", resources: 512, payloadBytes: 8}, // {suffix: "-1024-ALPHA-V2", resources: 1024, payloadBytes: 8}, // {suffix: "-2028-ALPHA-V2", resources: 2048, payloadBytes: 8}, // {suffix: "-4096-ALPHA-V2", resources: 4096, payloadBytes: 8}, From f0cb297439b733b2e1a160a6796e626524e7383c Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Fri, 9 Jul 2021 10:43:02 -0400 Subject: [PATCH 10/21] Python version --- py-many-resources/.gitignore | 2 ++ py-many-resources/Pulumi.yaml | 6 ++++++ py-many-resources/__main__.py | 12 ++++++++++++ py-many-resources/dummy.py | 10 ++++++++++ py-many-resources/requirements.txt | 1 + 5 files changed, 31 insertions(+) create mode 100644 py-many-resources/.gitignore create mode 100644 py-many-resources/Pulumi.yaml create mode 100644 py-many-resources/__main__.py create mode 100644 py-many-resources/dummy.py create mode 100644 py-many-resources/requirements.txt diff --git a/py-many-resources/.gitignore b/py-many-resources/.gitignore new file mode 100644 index 000000000..a3807e5bd --- /dev/null +++ b/py-many-resources/.gitignore @@ -0,0 +1,2 @@ +*.pyc +venv/ diff --git a/py-many-resources/Pulumi.yaml b/py-many-resources/Pulumi.yaml new file mode 100644 index 000000000..0c3f94e05 --- /dev/null +++ b/py-many-resources/Pulumi.yaml @@ -0,0 +1,6 @@ +name: py-many-resources +runtime: + name: python + options: + virtualenv: venv +description: A benchmark to test performance of stacks with many resources diff --git a/py-many-resources/__main__.py b/py-many-resources/__main__.py new file mode 100644 index 000000000..46b4a8178 --- /dev/null +++ b/py-many-resources/__main__.py @@ -0,0 +1,12 @@ +import os +import pulumi + +from dummy import Dummy + +resource_count = int(os.environ.get('RESOURCE_COUNT', 64)) +resource_payload_bytes = int(os.environ.get('RESOURCE_PAYLOAD_BYTES', 1024)) + +for i in range(0, resource_count): + deadweight = '{:08}'.format(i) * int(resource_payload_bytes / 8) + dummy = Dummy(f'dummy-{i}', deadweight=deadweight) + pulumi.export(f'output-{i}', dummy.deadweight) diff --git a/py-many-resources/dummy.py b/py-many-resources/dummy.py new file mode 100644 index 000000000..4075f25b3 --- /dev/null +++ b/py-many-resources/dummy.py @@ -0,0 +1,10 @@ +import pulumi + + +class Dummy(pulumi.ComponentResource): + + def __init__(self, name, deadweight, opts=None): + super().__init__('examples:dummy:Dummy', name, {'deadweight': deadweight}, opts) + + self.deadweight = pulumi.Output.from_input(deadweight) + self.register_outputs({'deadweight': self.deadweight}) diff --git a/py-many-resources/requirements.txt b/py-many-resources/requirements.txt new file mode 100644 index 000000000..bc4e43087 --- /dev/null +++ b/py-many-resources/requirements.txt @@ -0,0 +1 @@ +pulumi>=3.0.0,<4.0.0 From 36992c43d1335ac1dee69625faf01ed4b790bb7d Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Fri, 9 Jul 2021 10:59:47 -0400 Subject: [PATCH 11/21] TypeScript version --- ts-many-resources/.gitignore | 2 ++ ts-many-resources/Pulumi.yaml | 3 +++ ts-many-resources/dummy.ts | 11 +++++++++++ ts-many-resources/index.ts | 22 ++++++++++++++++++++++ ts-many-resources/package.json | 9 +++++++++ ts-many-resources/tsconfig.json | 18 ++++++++++++++++++ 6 files changed, 65 insertions(+) create mode 100644 ts-many-resources/.gitignore create mode 100644 ts-many-resources/Pulumi.yaml create mode 100644 ts-many-resources/dummy.ts create mode 100644 ts-many-resources/index.ts create mode 100644 ts-many-resources/package.json create mode 100644 ts-many-resources/tsconfig.json diff --git a/ts-many-resources/.gitignore b/ts-many-resources/.gitignore new file mode 100644 index 000000000..c6958891d --- /dev/null +++ b/ts-many-resources/.gitignore @@ -0,0 +1,2 @@ +/bin/ +/node_modules/ diff --git a/ts-many-resources/Pulumi.yaml b/ts-many-resources/Pulumi.yaml new file mode 100644 index 000000000..0cf587bdf --- /dev/null +++ b/ts-many-resources/Pulumi.yaml @@ -0,0 +1,3 @@ +name: ts-many-resources +runtime: nodejs +description: A minimal TypeScript Pulumi program diff --git a/ts-many-resources/dummy.ts b/ts-many-resources/dummy.ts new file mode 100644 index 000000000..29c3048fa --- /dev/null +++ b/ts-many-resources/dummy.ts @@ -0,0 +1,11 @@ +import * as pulumi from "@pulumi/pulumi"; + +export class Dummy extends pulumi.ComponentResource { + public deadweight: pulumi.Output; + + constructor(name: string, deadweight: pulumi.Input, opts: pulumi.ComponentResourceOptions = {}) { + super("examples:dummy:Dummy", name, {'deadweight': deadweight}, opts); + + this.deadweight = pulumi.Output.create(deadweight); + } +} diff --git a/ts-many-resources/index.ts b/ts-many-resources/index.ts new file mode 100644 index 000000000..c6103d7d0 --- /dev/null +++ b/ts-many-resources/index.ts @@ -0,0 +1,22 @@ +import * as pulumi from "@pulumi/pulumi"; + +import { Dummy } from "./dummy"; + +const resourceCount: number = Number(process.env.RESOURCE_COUNT || 64); +const resourcePayloadBytes: number = Number(process.env.RESOURCE_PAYLOAD_BYTES || 1024); + +function pad8(num: number): string { + return ('00000000' + num).slice(-8); +} + +export = async () => { + const out: { [name: string]: pulumi.Output } = {}; + + for (var i = 0; i < resourceCount; i++) { + const deadweight = pad8(i).repeat(resourcePayloadBytes/8); + const dummy = new Dummy(`dummy-${i}`, deadweight); + out[`output-${i}`] = dummy.deadweight; + } + + return out; +} diff --git a/ts-many-resources/package.json b/ts-many-resources/package.json new file mode 100644 index 000000000..7d60e4c2a --- /dev/null +++ b/ts-many-resources/package.json @@ -0,0 +1,9 @@ +{ + "name": "ts-many-resources", + "devDependencies": { + "@types/node": "^10.0.0" + }, + "dependencies": { + "@pulumi/pulumi": "^3.0.0" + } +} diff --git a/ts-many-resources/tsconfig.json b/ts-many-resources/tsconfig.json new file mode 100644 index 000000000..ab65afa61 --- /dev/null +++ b/ts-many-resources/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "strict": true, + "outDir": "bin", + "target": "es2016", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "experimentalDecorators": true, + "pretty": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.ts" + ] +} From 10bcc980b72bb2e0d68472ca791fc8de04c854b4 Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Fri, 9 Jul 2021 11:47:55 -0400 Subject: [PATCH 12/21] Add C# version --- cs-many-resources/.gitignore | 353 +++++++++++++++++++++ cs-many-resources/Dummy.cs | 12 + cs-many-resources/MyStack.cs | 45 +++ cs-many-resources/Program.cs | 7 + cs-many-resources/Pulumi.yaml | 3 + cs-many-resources/cs-many-resources.csproj | 13 + 6 files changed, 433 insertions(+) create mode 100644 cs-many-resources/.gitignore create mode 100644 cs-many-resources/Dummy.cs create mode 100644 cs-many-resources/MyStack.cs create mode 100644 cs-many-resources/Program.cs create mode 100644 cs-many-resources/Pulumi.yaml create mode 100644 cs-many-resources/cs-many-resources.csproj diff --git a/cs-many-resources/.gitignore b/cs-many-resources/.gitignore new file mode 100644 index 000000000..e64527066 --- /dev/null +++ b/cs-many-resources/.gitignore @@ -0,0 +1,353 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ diff --git a/cs-many-resources/Dummy.cs b/cs-many-resources/Dummy.cs new file mode 100644 index 000000000..e1e3eb5d1 --- /dev/null +++ b/cs-many-resources/Dummy.cs @@ -0,0 +1,12 @@ +using Pulumi; + +public class Dummy : ComponentResource +{ + public Output Deadweight { get; private set; } = null!; + + public Dummy(string name, Input deadweight, ComponentResourceOptions? options = null) + : base("examples:dummy:Dummy", name, options) + { + this.Deadweight = deadweight; + } +} diff --git a/cs-many-resources/MyStack.cs b/cs-many-resources/MyStack.cs new file mode 100644 index 000000000..d290d9eed --- /dev/null +++ b/cs-many-resources/MyStack.cs @@ -0,0 +1,45 @@ +using System; +using System.Linq; +using System.Collections.Generic; +using System.Collections.Immutable; + +using Pulumi; + +class MyStack : Stack +{ + [Output] + public Output> Outputs { get; set; } + + public MyStack() + { + int resourceCount = GetEnv("RESOURCE_COUNT", 64); + int resourcePayloadBytes = GetEnv("RESOURCE_PAYLOAD_BYTES", 1024); + + var builder = ImmutableDictionary.CreateBuilder>(); + + for (var i = 0; i < resourceCount; i++) { + string deadweight = String.Concat(Enumerable.Repeat( + String.Format("{0:00000000}", i), + resourcePayloadBytes/8)); + Dummy dummy = new Dummy($"dummy-{i}", deadweight); + builder.Add($"output-{i}", dummy.Deadweight); + } + + this.Outputs = Unroll(builder.ToImmutable()); + } + + private static int GetEnv(string name, int defaultValue) + { + var v = System.Environment.GetEnvironmentVariable(name); + return v == null ? defaultValue : int.Parse(v); + } + + private static Output> Unroll( + ImmutableDictionary> dict) + { + return Output.All( + from kv in dict + select kv.Value.Apply(v => new KeyValuePair(kv.Key, v)) + ).Apply(pairs => ImmutableDictionary.CreateRange(pairs)); + } +} diff --git a/cs-many-resources/Program.cs b/cs-many-resources/Program.cs new file mode 100644 index 000000000..b5c1d038b --- /dev/null +++ b/cs-many-resources/Program.cs @@ -0,0 +1,7 @@ +using System.Threading.Tasks; +using Pulumi; + +class Program +{ + static Task Main() => Deployment.RunAsync(); +} diff --git a/cs-many-resources/Pulumi.yaml b/cs-many-resources/Pulumi.yaml new file mode 100644 index 000000000..346a334b1 --- /dev/null +++ b/cs-many-resources/Pulumi.yaml @@ -0,0 +1,3 @@ +name: cs-many-resources +runtime: dotnet +description: A minimal C# Pulumi program diff --git a/cs-many-resources/cs-many-resources.csproj b/cs-many-resources/cs-many-resources.csproj new file mode 100644 index 000000000..86dfcd085 --- /dev/null +++ b/cs-many-resources/cs-many-resources.csproj @@ -0,0 +1,13 @@ + + + + Exe + netcoreapp3.1 + enable + + + + + + + From d73f3bd4ead376548a000e8f59d010eb00eeaf5f Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Fri, 9 Jul 2021 12:20:24 -0400 Subject: [PATCH 13/21] Add all langauge versions --- misc/test/performance_test.go | 79 +++++++++++++++++++++++------------ 1 file changed, 52 insertions(+), 27 deletions(-) diff --git a/misc/test/performance_test.go b/misc/test/performance_test.go index eddf4256f..75684f1bc 100644 --- a/misc/test/performance_test.go +++ b/misc/test/performance_test.go @@ -101,54 +101,79 @@ func TestAccAwsPyS3Folder(t *testing.T) { } type manyResourcesConfig struct { - suffix string + folder string + bench traces.Benchmark resources int payloadBytes int } func TestGoManyResources(t *testing.T) { - folder := "go-many-resources" - - configurations := []manyResourcesConfig{ - {suffix: "-64-ALPHA-V1", resources: 64, payloadBytes: 1024}, - {suffix: "-128-ALPHA-V1", resources: 128, payloadBytes: 1024}, - {suffix: "-256-ALPHA-V1", resources: 256, payloadBytes: 1024}, - - {suffix: "-64-ALPHA-V2", resources: 64, payloadBytes: 8}, - {suffix: "-128-ALPHA-V2", resources: 128, payloadBytes: 8}, - {suffix: "-256-ALPHA-V2", resources: 256, payloadBytes: 8}, - {suffix: "-512-ALPHA-V2", resources: 512, payloadBytes: 8}, - // {suffix: "-1024-ALPHA-V2", resources: 1024, payloadBytes: 8}, - // {suffix: "-2028-ALPHA-V2", resources: 2048, payloadBytes: 8}, - // {suffix: "-4096-ALPHA-V2", resources: 4096, payloadBytes: 8}, + var configurations []manyResourcesConfig + + for _, resources := range []int{64, 128} { // TODO 256 + confs := []manyResourcesConfig{ + { + folder: "go-many-resources", + bench: bench(fmt.Sprintf("go-many-resources-%d-ALPHA-V3", resources), "", "go", "go"), + resources: resources, + payloadBytes: 8, + }, + { + folder: "cs-many-resources", + bench: bench(fmt.Sprintf("cs-many-resources-%d-ALPHA-V3", resources), "", "dotnet", "csharp"), + resources: resources, + payloadBytes: 8, + }, + { + folder: "ts-many-resources", + bench: bench(fmt.Sprintf("ts-many-resources-%d-ALPHA-V3", resources), "", "nodejs", "typescript"), + resources: resources, + payloadBytes: 8, + }, + { + folder: "py-many-resources", + bench: bench(fmt.Sprintf("py-many-resources-%d-ALPHA-V3", resources), "", "python", "python"), + resources: resources, + payloadBytes: 8, + }, + } + configurations = append(configurations, confs...) } check := func(t *testing.T, cfg manyResourcesConfig) { - benchmark := bench(fmt.Sprintf("%s%s", folder, cfg.suffix), "", "go", "go") opts := integration.ProgramTestOptions{ - Dir: path.Join(getCwd(t), "..", "..", folder), + Dir: path.Join(getCwd(t), "..", "..", cfg.folder), Env: []string{ fmt.Sprintf("RESOURCE_COUNT=%d", cfg.resources), fmt.Sprintf("RESOURCE_PAYLOAD_BYTES=%d", cfg.payloadBytes), }, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { - assert.Equal(t, len(stack.Outputs), cfg.resources) - output1, gotOutput1 := stack.Outputs["output-1"] - assert.True(t, gotOutput1) - output1str, isStr := output1.(string) - assert.True(t, isStr) - if gotOutput1 && isStr { + checkMap := func(outputs map[string]interface{}) { + assert.Equal(t, len(outputs), cfg.resources) + output1, gotOutput1 := outputs["output-1"] + assert.True(t, gotOutput1) + output1str, isStr := output1.(string) + assert.True(t, isStr) assert.Equal(t, cfg.payloadBytes, len(output1str)) } + + outputs, gotOutputs := stack.Outputs["Outputs"] + if gotOutputs { + outputMap, isOutputMap := outputs.(map[string]interface{}) + assert.True(t, isOutputMap) + checkMap(outputMap) + } else { + checkMap(stack.Outputs) + } }, } - test := getBaseOptions(t).With(opts).With(benchmark.ProgramTestOptions()) + test := getBaseOptions(t).With(opts).With(cfg.bench.ProgramTestOptions()) integration.ProgramTest(t, &test) } - for _, configuration := range configurations { - t.Run(fmt.Sprintf("%s%s", folder, configuration.suffix), func(t *testing.T) { - check(t, configuration) + for _, cfg := range configurations { + t.Run(cfg.bench.Name, func(t *testing.T) { + check(t, cfg) }) } } From b60ffb8c0e5cb3287f5ebbfe2bc0071e214fe1a7 Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Fri, 9 Jul 2021 13:10:41 -0400 Subject: [PATCH 14/21] Eliminate N stack outputs as that seems to skew the benchmark --- cs-many-resources/MyStack.cs | 23 +++++++++-------------- go-many-resources/main.go | 8 +++++++- misc/test/performance_test.go | 29 +++++++---------------------- py-many-resources/__main__.py | 5 ++++- ts-many-resources/index.ts | 19 +++++++++++-------- 5 files changed, 38 insertions(+), 46 deletions(-) diff --git a/cs-many-resources/MyStack.cs b/cs-many-resources/MyStack.cs index d290d9eed..32647098d 100644 --- a/cs-many-resources/MyStack.cs +++ b/cs-many-resources/MyStack.cs @@ -8,24 +8,28 @@ class MyStack : Stack { [Output] - public Output> Outputs { get; set; } + public Output ResourceCount { get; set; } + + [Output] + public Output ResourcePayloadBytes { get; set; } public MyStack() { int resourceCount = GetEnv("RESOURCE_COUNT", 64); int resourcePayloadBytes = GetEnv("RESOURCE_PAYLOAD_BYTES", 1024); - var builder = ImmutableDictionary.CreateBuilder>(); + Output resourcePayloadBytesOutput = Output.Create(resourcePayloadBytes); for (var i = 0; i < resourceCount; i++) { string deadweight = String.Concat(Enumerable.Repeat( - String.Format("{0:00000000}", i), + String.Format("{0:00000000}", i), resourcePayloadBytes/8)); Dummy dummy = new Dummy($"dummy-{i}", deadweight); - builder.Add($"output-{i}", dummy.Deadweight); + resourcePayloadBytesOutput = dummy.Deadweight.Apply(w => w.Length); } - this.Outputs = Unroll(builder.ToImmutable()); + this.ResourceCount = Output.Create(resourceCount); + this.ResourcePayloadBytes = resourcePayloadBytesOutput; } private static int GetEnv(string name, int defaultValue) @@ -33,13 +37,4 @@ private static int GetEnv(string name, int defaultValue) var v = System.Environment.GetEnvironmentVariable(name); return v == null ? defaultValue : int.Parse(v); } - - private static Output> Unroll( - ImmutableDictionary> dict) - { - return Output.All( - from kv in dict - select kv.Value.Apply(v => new KeyValuePair(kv.Key, v)) - ).Apply(pairs => ImmutableDictionary.CreateRange(pairs)); - } } diff --git a/go-many-resources/main.go b/go-many-resources/main.go index 5330d1844..e2003a37e 100644 --- a/go-many-resources/main.go +++ b/go-many-resources/main.go @@ -24,8 +24,14 @@ func main() { return err } - ctx.Export(fmt.Sprintf("output-%d", i), dummy.Deadweight) + if i == 0 { + ctx.Export("ResourcePayloadBytes", dummy.Deadweight.ApplyT(func(x string) int { + return len(x) + })) + } } + + ctx.Export("ResourceCount", pulumi.Int(resourceCount)) return nil }) } diff --git a/misc/test/performance_test.go b/misc/test/performance_test.go index 75684f1bc..95e584c0e 100644 --- a/misc/test/performance_test.go +++ b/misc/test/performance_test.go @@ -110,29 +110,29 @@ type manyResourcesConfig struct { func TestGoManyResources(t *testing.T) { var configurations []manyResourcesConfig - for _, resources := range []int{64, 128} { // TODO 256 + for _, resources := range []int{64, 128, 256} { confs := []manyResourcesConfig{ { folder: "go-many-resources", - bench: bench(fmt.Sprintf("go-many-resources-%d-ALPHA-V3", resources), "", "go", "go"), + bench: bench(fmt.Sprintf("go-many-resources-%d-ALPHA-V4", resources), "", "go", "go"), resources: resources, payloadBytes: 8, }, { folder: "cs-many-resources", - bench: bench(fmt.Sprintf("cs-many-resources-%d-ALPHA-V3", resources), "", "dotnet", "csharp"), + bench: bench(fmt.Sprintf("cs-many-resources-%d-ALPHA-V4", resources), "", "dotnet", "csharp"), resources: resources, payloadBytes: 8, }, { folder: "ts-many-resources", - bench: bench(fmt.Sprintf("ts-many-resources-%d-ALPHA-V3", resources), "", "nodejs", "typescript"), + bench: bench(fmt.Sprintf("ts-many-resources-%d-ALPHA-V4", resources), "", "nodejs", "typescript"), resources: resources, payloadBytes: 8, }, { folder: "py-many-resources", - bench: bench(fmt.Sprintf("py-many-resources-%d-ALPHA-V3", resources), "", "python", "python"), + bench: bench(fmt.Sprintf("py-many-resources-%d-ALPHA-V4", resources), "", "python", "python"), resources: resources, payloadBytes: 8, }, @@ -148,23 +148,8 @@ func TestGoManyResources(t *testing.T) { fmt.Sprintf("RESOURCE_PAYLOAD_BYTES=%d", cfg.payloadBytes), }, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { - checkMap := func(outputs map[string]interface{}) { - assert.Equal(t, len(outputs), cfg.resources) - output1, gotOutput1 := outputs["output-1"] - assert.True(t, gotOutput1) - output1str, isStr := output1.(string) - assert.True(t, isStr) - assert.Equal(t, cfg.payloadBytes, len(output1str)) - } - - outputs, gotOutputs := stack.Outputs["Outputs"] - if gotOutputs { - outputMap, isOutputMap := outputs.(map[string]interface{}) - assert.True(t, isOutputMap) - checkMap(outputMap) - } else { - checkMap(stack.Outputs) - } + assert.Equal(t, stack.Outputs["ResourceCount"], cfg.resources) + assert.Equal(t, stack.Outputs["ResourcePayloadBytes"], cfg.payloadBytes) }, } test := getBaseOptions(t).With(opts).With(cfg.bench.ProgramTestOptions()) diff --git a/py-many-resources/__main__.py b/py-many-resources/__main__.py index 46b4a8178..af4efae74 100644 --- a/py-many-resources/__main__.py +++ b/py-many-resources/__main__.py @@ -9,4 +9,7 @@ for i in range(0, resource_count): deadweight = '{:08}'.format(i) * int(resource_payload_bytes / 8) dummy = Dummy(f'dummy-{i}', deadweight=deadweight) - pulumi.export(f'output-{i}', dummy.deadweight) + if i == 0: + pulumi.export('ResourcePayloadBytes', dummy.deadweight.apply(lambda s: len(s))) + +pulumi.export('ResourceCount', resource_count) diff --git a/ts-many-resources/index.ts b/ts-many-resources/index.ts index c6103d7d0..4e50e8492 100644 --- a/ts-many-resources/index.ts +++ b/ts-many-resources/index.ts @@ -9,14 +9,17 @@ function pad8(num: number): string { return ('00000000' + num).slice(-8); } -export = async () => { - const out: { [name: string]: pulumi.Output } = {}; +function newDummy(i: number): Dummy { + const deadweight = pad8(i).repeat(resourcePayloadBytes/8); + return new Dummy(`dummy-${i}`, deadweight); +} + +export const ResourceCount = resourceCount; + +const dummy0 = newDummy(0); - for (var i = 0; i < resourceCount; i++) { - const deadweight = pad8(i).repeat(resourcePayloadBytes/8); - const dummy = new Dummy(`dummy-${i}`, deadweight); - out[`output-${i}`] = dummy.deadweight; - } +export const ResourcePayloadBytes = dummy0.deadweight.apply(x => x.length); - return out; +for (var i = 1; i < resourceCount; i++) { + newDummy(i) } From c99977c7ed77961ed258a471abc1cccf89a63fbc Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Fri, 9 Jul 2021 13:44:40 -0400 Subject: [PATCH 15/21] Fix asserts --- misc/test/performance_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/misc/test/performance_test.go b/misc/test/performance_test.go index 95e584c0e..0aa0602a2 100644 --- a/misc/test/performance_test.go +++ b/misc/test/performance_test.go @@ -148,8 +148,8 @@ func TestGoManyResources(t *testing.T) { fmt.Sprintf("RESOURCE_PAYLOAD_BYTES=%d", cfg.payloadBytes), }, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { - assert.Equal(t, stack.Outputs["ResourceCount"], cfg.resources) - assert.Equal(t, stack.Outputs["ResourcePayloadBytes"], cfg.payloadBytes) + assert.Equal(t, float64(cfg.resources), stack.Outputs["ResourceCount"]) + assert.Equal(t, float64(cfg.payloadBytes), stack.Outputs["ResourcePayloadBytes"]) }, } test := getBaseOptions(t).With(opts).With(cfg.bench.ProgramTestOptions()) From 7b7a5579584861f984a363fdf6e29f4d59e658c1 Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Fri, 9 Jul 2021 15:59:22 -0400 Subject: [PATCH 16/21] Fix the real reason C# came out different --- cs-many-resources/Dummy.cs | 3 +++ misc/test/performance_test.go | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/cs-many-resources/Dummy.cs b/cs-many-resources/Dummy.cs index e1e3eb5d1..3408e2c57 100644 --- a/cs-many-resources/Dummy.cs +++ b/cs-many-resources/Dummy.cs @@ -2,11 +2,14 @@ public class Dummy : ComponentResource { + [Output] public Output Deadweight { get; private set; } = null!; public Dummy(string name, Input deadweight, ComponentResourceOptions? options = null) : base("examples:dummy:Dummy", name, options) { this.Deadweight = deadweight; + + this.RegisterOutputs(); } } diff --git a/misc/test/performance_test.go b/misc/test/performance_test.go index 0aa0602a2..363670c80 100644 --- a/misc/test/performance_test.go +++ b/misc/test/performance_test.go @@ -114,25 +114,25 @@ func TestGoManyResources(t *testing.T) { confs := []manyResourcesConfig{ { folder: "go-many-resources", - bench: bench(fmt.Sprintf("go-many-resources-%d-ALPHA-V4", resources), "", "go", "go"), + bench: bench(fmt.Sprintf("go-many-resources-%d-ALPHA-V5", resources), "", "go", "go"), resources: resources, payloadBytes: 8, }, { folder: "cs-many-resources", - bench: bench(fmt.Sprintf("cs-many-resources-%d-ALPHA-V4", resources), "", "dotnet", "csharp"), + bench: bench(fmt.Sprintf("cs-many-resources-%d-ALPHA-V5", resources), "", "dotnet", "csharp"), resources: resources, payloadBytes: 8, }, { folder: "ts-many-resources", - bench: bench(fmt.Sprintf("ts-many-resources-%d-ALPHA-V4", resources), "", "nodejs", "typescript"), + bench: bench(fmt.Sprintf("ts-many-resources-%d-ALPHA-V5", resources), "", "nodejs", "typescript"), resources: resources, payloadBytes: 8, }, { folder: "py-many-resources", - bench: bench(fmt.Sprintf("py-many-resources-%d-ALPHA-V4", resources), "", "python", "python"), + bench: bench(fmt.Sprintf("py-many-resources-%d-ALPHA-V5", resources), "", "python", "python"), resources: resources, payloadBytes: 8, }, From 2a0bb7933fe54ec1e61ce1bc13c61035b0477d6f Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Fri, 9 Jul 2021 16:29:46 -0400 Subject: [PATCH 17/21] Commit to these settings --- misc/test/performance_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/misc/test/performance_test.go b/misc/test/performance_test.go index 363670c80..8c4d05fc8 100644 --- a/misc/test/performance_test.go +++ b/misc/test/performance_test.go @@ -114,25 +114,25 @@ func TestGoManyResources(t *testing.T) { confs := []manyResourcesConfig{ { folder: "go-many-resources", - bench: bench(fmt.Sprintf("go-many-resources-%d-ALPHA-V5", resources), "", "go", "go"), + bench: bench(fmt.Sprintf("go-many-resources-%d", resources), "", "go", "go"), resources: resources, payloadBytes: 8, }, { folder: "cs-many-resources", - bench: bench(fmt.Sprintf("cs-many-resources-%d-ALPHA-V5", resources), "", "dotnet", "csharp"), + bench: bench(fmt.Sprintf("cs-many-resources-%d", resources), "", "dotnet", "csharp"), resources: resources, payloadBytes: 8, }, { folder: "ts-many-resources", - bench: bench(fmt.Sprintf("ts-many-resources-%d-ALPHA-V5", resources), "", "nodejs", "typescript"), + bench: bench(fmt.Sprintf("ts-many-resources-%d", resources), "", "nodejs", "typescript"), resources: resources, payloadBytes: 8, }, { folder: "py-many-resources", - bench: bench(fmt.Sprintf("py-many-resources-%d-ALPHA-V5", resources), "", "python", "python"), + bench: bench(fmt.Sprintf("py-many-resources-%d", resources), "", "python", "python"), resources: resources, payloadBytes: 8, }, From 5e15cb5e155dcaa05fb07b9b0c815b321b13941f Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Mon, 12 Jul 2021 14:45:18 -0400 Subject: [PATCH 18/21] Move from root to misc/benchmarks --- .../benchmarks/cs-many-resources}/.gitignore | 0 .../cs-many-resources/.vscode/launch.json | 26 ++++++++++++ .../cs-many-resources/.vscode/tasks.json | 42 +++++++++++++++++++ .../benchmarks/cs-many-resources}/Dummy.cs | 0 .../benchmarks/cs-many-resources}/MyStack.cs | 0 .../benchmarks/cs-many-resources}/Program.cs | 0 .../benchmarks/cs-many-resources}/Pulumi.yaml | 0 .../cs-many-resources.csproj | 0 .../benchmarks/go-many-resources}/Pulumi.yaml | 0 .../benchmarks/go-many-resources}/dummy.go | 0 .../benchmarks/go-many-resources}/go.mod | 0 .../benchmarks/go-many-resources}/go.sum | 0 .../benchmarks/go-many-resources}/main.go | 0 .../benchmarks/py-many-resources}/.gitignore | 0 .../benchmarks/py-many-resources}/Pulumi.yaml | 0 .../benchmarks/py-many-resources}/__main__.py | 0 .../benchmarks/py-many-resources}/dummy.py | 0 .../py-many-resources}/requirements.txt | 0 .../benchmarks/ts-many-resources}/.gitignore | 0 .../benchmarks/ts-many-resources}/Pulumi.yaml | 0 .../benchmarks/ts-many-resources}/dummy.ts | 0 .../benchmarks/ts-many-resources}/index.ts | 0 .../ts-many-resources}/package.json | 0 .../ts-many-resources}/tsconfig.json | 0 misc/test/performance_test.go | 2 +- 25 files changed, 69 insertions(+), 1 deletion(-) rename {cs-many-resources => misc/benchmarks/cs-many-resources}/.gitignore (100%) create mode 100644 misc/benchmarks/cs-many-resources/.vscode/launch.json create mode 100644 misc/benchmarks/cs-many-resources/.vscode/tasks.json rename {cs-many-resources => misc/benchmarks/cs-many-resources}/Dummy.cs (100%) rename {cs-many-resources => misc/benchmarks/cs-many-resources}/MyStack.cs (100%) rename {cs-many-resources => misc/benchmarks/cs-many-resources}/Program.cs (100%) rename {cs-many-resources => misc/benchmarks/cs-many-resources}/Pulumi.yaml (100%) rename {cs-many-resources => misc/benchmarks/cs-many-resources}/cs-many-resources.csproj (100%) rename {go-many-resources => misc/benchmarks/go-many-resources}/Pulumi.yaml (100%) rename {go-many-resources => misc/benchmarks/go-many-resources}/dummy.go (100%) rename {go-many-resources => misc/benchmarks/go-many-resources}/go.mod (100%) rename {go-many-resources => misc/benchmarks/go-many-resources}/go.sum (100%) rename {go-many-resources => misc/benchmarks/go-many-resources}/main.go (100%) rename {py-many-resources => misc/benchmarks/py-many-resources}/.gitignore (100%) rename {py-many-resources => misc/benchmarks/py-many-resources}/Pulumi.yaml (100%) rename {py-many-resources => misc/benchmarks/py-many-resources}/__main__.py (100%) rename {py-many-resources => misc/benchmarks/py-many-resources}/dummy.py (100%) rename {py-many-resources => misc/benchmarks/py-many-resources}/requirements.txt (100%) rename {ts-many-resources => misc/benchmarks/ts-many-resources}/.gitignore (100%) rename {ts-many-resources => misc/benchmarks/ts-many-resources}/Pulumi.yaml (100%) rename {ts-many-resources => misc/benchmarks/ts-many-resources}/dummy.ts (100%) rename {ts-many-resources => misc/benchmarks/ts-many-resources}/index.ts (100%) rename {ts-many-resources => misc/benchmarks/ts-many-resources}/package.json (100%) rename {ts-many-resources => misc/benchmarks/ts-many-resources}/tsconfig.json (100%) diff --git a/cs-many-resources/.gitignore b/misc/benchmarks/cs-many-resources/.gitignore similarity index 100% rename from cs-many-resources/.gitignore rename to misc/benchmarks/cs-many-resources/.gitignore diff --git a/misc/benchmarks/cs-many-resources/.vscode/launch.json b/misc/benchmarks/cs-many-resources/.vscode/launch.json new file mode 100644 index 000000000..08abb7187 --- /dev/null +++ b/misc/benchmarks/cs-many-resources/.vscode/launch.json @@ -0,0 +1,26 @@ +{ + "version": "0.2.0", + "configurations": [ + { + // Use IntelliSense to find out which attributes exist for C# debugging + // Use hover for the description of the existing attributes + // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md + "name": ".NET Core Launch (console)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + // If you have changed target frameworks, make sure to update the program path. + "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/cs-many-resources.dll", + "args": [], + "cwd": "${workspaceFolder}", + // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console + "console": "internalConsole", + "stopAtEntry": false + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach" + } + ] +} \ No newline at end of file diff --git a/misc/benchmarks/cs-many-resources/.vscode/tasks.json b/misc/benchmarks/cs-many-resources/.vscode/tasks.json new file mode 100644 index 000000000..017e42ae1 --- /dev/null +++ b/misc/benchmarks/cs-many-resources/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/cs-many-resources.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/cs-many-resources.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "${workspaceFolder}/cs-many-resources.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/cs-many-resources/Dummy.cs b/misc/benchmarks/cs-many-resources/Dummy.cs similarity index 100% rename from cs-many-resources/Dummy.cs rename to misc/benchmarks/cs-many-resources/Dummy.cs diff --git a/cs-many-resources/MyStack.cs b/misc/benchmarks/cs-many-resources/MyStack.cs similarity index 100% rename from cs-many-resources/MyStack.cs rename to misc/benchmarks/cs-many-resources/MyStack.cs diff --git a/cs-many-resources/Program.cs b/misc/benchmarks/cs-many-resources/Program.cs similarity index 100% rename from cs-many-resources/Program.cs rename to misc/benchmarks/cs-many-resources/Program.cs diff --git a/cs-many-resources/Pulumi.yaml b/misc/benchmarks/cs-many-resources/Pulumi.yaml similarity index 100% rename from cs-many-resources/Pulumi.yaml rename to misc/benchmarks/cs-many-resources/Pulumi.yaml diff --git a/cs-many-resources/cs-many-resources.csproj b/misc/benchmarks/cs-many-resources/cs-many-resources.csproj similarity index 100% rename from cs-many-resources/cs-many-resources.csproj rename to misc/benchmarks/cs-many-resources/cs-many-resources.csproj diff --git a/go-many-resources/Pulumi.yaml b/misc/benchmarks/go-many-resources/Pulumi.yaml similarity index 100% rename from go-many-resources/Pulumi.yaml rename to misc/benchmarks/go-many-resources/Pulumi.yaml diff --git a/go-many-resources/dummy.go b/misc/benchmarks/go-many-resources/dummy.go similarity index 100% rename from go-many-resources/dummy.go rename to misc/benchmarks/go-many-resources/dummy.go diff --git a/go-many-resources/go.mod b/misc/benchmarks/go-many-resources/go.mod similarity index 100% rename from go-many-resources/go.mod rename to misc/benchmarks/go-many-resources/go.mod diff --git a/go-many-resources/go.sum b/misc/benchmarks/go-many-resources/go.sum similarity index 100% rename from go-many-resources/go.sum rename to misc/benchmarks/go-many-resources/go.sum diff --git a/go-many-resources/main.go b/misc/benchmarks/go-many-resources/main.go similarity index 100% rename from go-many-resources/main.go rename to misc/benchmarks/go-many-resources/main.go diff --git a/py-many-resources/.gitignore b/misc/benchmarks/py-many-resources/.gitignore similarity index 100% rename from py-many-resources/.gitignore rename to misc/benchmarks/py-many-resources/.gitignore diff --git a/py-many-resources/Pulumi.yaml b/misc/benchmarks/py-many-resources/Pulumi.yaml similarity index 100% rename from py-many-resources/Pulumi.yaml rename to misc/benchmarks/py-many-resources/Pulumi.yaml diff --git a/py-many-resources/__main__.py b/misc/benchmarks/py-many-resources/__main__.py similarity index 100% rename from py-many-resources/__main__.py rename to misc/benchmarks/py-many-resources/__main__.py diff --git a/py-many-resources/dummy.py b/misc/benchmarks/py-many-resources/dummy.py similarity index 100% rename from py-many-resources/dummy.py rename to misc/benchmarks/py-many-resources/dummy.py diff --git a/py-many-resources/requirements.txt b/misc/benchmarks/py-many-resources/requirements.txt similarity index 100% rename from py-many-resources/requirements.txt rename to misc/benchmarks/py-many-resources/requirements.txt diff --git a/ts-many-resources/.gitignore b/misc/benchmarks/ts-many-resources/.gitignore similarity index 100% rename from ts-many-resources/.gitignore rename to misc/benchmarks/ts-many-resources/.gitignore diff --git a/ts-many-resources/Pulumi.yaml b/misc/benchmarks/ts-many-resources/Pulumi.yaml similarity index 100% rename from ts-many-resources/Pulumi.yaml rename to misc/benchmarks/ts-many-resources/Pulumi.yaml diff --git a/ts-many-resources/dummy.ts b/misc/benchmarks/ts-many-resources/dummy.ts similarity index 100% rename from ts-many-resources/dummy.ts rename to misc/benchmarks/ts-many-resources/dummy.ts diff --git a/ts-many-resources/index.ts b/misc/benchmarks/ts-many-resources/index.ts similarity index 100% rename from ts-many-resources/index.ts rename to misc/benchmarks/ts-many-resources/index.ts diff --git a/ts-many-resources/package.json b/misc/benchmarks/ts-many-resources/package.json similarity index 100% rename from ts-many-resources/package.json rename to misc/benchmarks/ts-many-resources/package.json diff --git a/ts-many-resources/tsconfig.json b/misc/benchmarks/ts-many-resources/tsconfig.json similarity index 100% rename from ts-many-resources/tsconfig.json rename to misc/benchmarks/ts-many-resources/tsconfig.json diff --git a/misc/test/performance_test.go b/misc/test/performance_test.go index 8c4d05fc8..75bd56a30 100644 --- a/misc/test/performance_test.go +++ b/misc/test/performance_test.go @@ -142,7 +142,7 @@ func TestGoManyResources(t *testing.T) { check := func(t *testing.T, cfg manyResourcesConfig) { opts := integration.ProgramTestOptions{ - Dir: path.Join(getCwd(t), "..", "..", cfg.folder), + Dir: path.Join(getCwd(t), "..", "benchmarks", cfg.folder), Env: []string{ fmt.Sprintf("RESOURCE_COUNT=%d", cfg.resources), fmt.Sprintf("RESOURCE_PAYLOAD_BYTES=%d", cfg.payloadBytes), From 06e18c3963f9a4bb87ecfeebe9fa6b40924650e8 Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Mon, 12 Jul 2021 14:50:23 -0400 Subject: [PATCH 19/21] Remove redundant gitignores --- misc/benchmarks/cs-many-resources/.gitignore | 353 ------------------- misc/benchmarks/py-many-resources/.gitignore | 2 - misc/benchmarks/ts-many-resources/.gitignore | 2 - 3 files changed, 357 deletions(-) delete mode 100644 misc/benchmarks/cs-many-resources/.gitignore delete mode 100644 misc/benchmarks/py-many-resources/.gitignore delete mode 100644 misc/benchmarks/ts-many-resources/.gitignore diff --git a/misc/benchmarks/cs-many-resources/.gitignore b/misc/benchmarks/cs-many-resources/.gitignore deleted file mode 100644 index e64527066..000000000 --- a/misc/benchmarks/cs-many-resources/.gitignore +++ /dev/null @@ -1,353 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ diff --git a/misc/benchmarks/py-many-resources/.gitignore b/misc/benchmarks/py-many-resources/.gitignore deleted file mode 100644 index a3807e5bd..000000000 --- a/misc/benchmarks/py-many-resources/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.pyc -venv/ diff --git a/misc/benchmarks/ts-many-resources/.gitignore b/misc/benchmarks/ts-many-resources/.gitignore deleted file mode 100644 index c6958891d..000000000 --- a/misc/benchmarks/ts-many-resources/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/bin/ -/node_modules/ From 5cd467bd5dc3a9e7fcc9386ede917c47ad043254 Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Mon, 12 Jul 2021 15:10:18 -0400 Subject: [PATCH 20/21] Remove env vars in favor of Pulumi config --- misc/benchmarks/cs-many-resources/MyStack.cs | 5 ++-- misc/benchmarks/go-many-resources/main.go | 24 ++++--------------- misc/benchmarks/py-many-resources/__main__.py | 6 +++-- misc/benchmarks/ts-many-resources/index.ts | 6 +++-- misc/test/performance_test.go | 8 +++---- 5 files changed, 20 insertions(+), 29 deletions(-) diff --git a/misc/benchmarks/cs-many-resources/MyStack.cs b/misc/benchmarks/cs-many-resources/MyStack.cs index 32647098d..45d7b7d5d 100644 --- a/misc/benchmarks/cs-many-resources/MyStack.cs +++ b/misc/benchmarks/cs-many-resources/MyStack.cs @@ -15,8 +15,9 @@ class MyStack : Stack public MyStack() { - int resourceCount = GetEnv("RESOURCE_COUNT", 64); - int resourcePayloadBytes = GetEnv("RESOURCE_PAYLOAD_BYTES", 1024); + var config = new Config(); + int resourceCount = config.RequireInt32("resource_count"); + int resourcePayloadBytes = config.RequireInt32("resource_payload_bytes"); Output resourcePayloadBytesOutput = Output.Create(resourcePayloadBytes); diff --git a/misc/benchmarks/go-many-resources/main.go b/misc/benchmarks/go-many-resources/main.go index e2003a37e..5009899a6 100644 --- a/misc/benchmarks/go-many-resources/main.go +++ b/misc/benchmarks/go-many-resources/main.go @@ -2,18 +2,18 @@ package main import ( "fmt" - "os" - "strconv" "strings" "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi/config" ) func main() { - resourceCount := getEnvInt("RESOURCE_COUNT", 64) - resourcePayloadBytes := getEnvInt("RESOURCE_PAYLOAD_BYTES", 1024) - pulumi.Run(func(ctx *pulumi.Context) error { + conf := config.New(ctx, "") + resourceCount := conf.RequireInt("resource_count") + resourcePayloadBytes := conf.RequireInt("resource_payload_bytes") + for i := 0; i < resourceCount; i++ { deadweight := strings.Repeat(fmt.Sprintf("%08d", i), resourcePayloadBytes/8) @@ -35,17 +35,3 @@ func main() { return nil }) } - -func getEnvInt(name string, defaultValue int) int { - v := os.Getenv(name) - if v == "" { - return defaultValue - } - - intv, err := strconv.Atoi(v) - if err != nil { - return defaultValue - } - - return intv -} diff --git a/misc/benchmarks/py-many-resources/__main__.py b/misc/benchmarks/py-many-resources/__main__.py index af4efae74..8cf0a81db 100644 --- a/misc/benchmarks/py-many-resources/__main__.py +++ b/misc/benchmarks/py-many-resources/__main__.py @@ -3,8 +3,10 @@ from dummy import Dummy -resource_count = int(os.environ.get('RESOURCE_COUNT', 64)) -resource_payload_bytes = int(os.environ.get('RESOURCE_PAYLOAD_BYTES', 1024)) +config = pulumi.Config(); + +resource_count = config.require_int('resource_count') +resource_payload_bytes = config.require_int('resource_payload_bytes') for i in range(0, resource_count): deadweight = '{:08}'.format(i) * int(resource_payload_bytes / 8) diff --git a/misc/benchmarks/ts-many-resources/index.ts b/misc/benchmarks/ts-many-resources/index.ts index 4e50e8492..e36f53ca7 100644 --- a/misc/benchmarks/ts-many-resources/index.ts +++ b/misc/benchmarks/ts-many-resources/index.ts @@ -2,8 +2,10 @@ import * as pulumi from "@pulumi/pulumi"; import { Dummy } from "./dummy"; -const resourceCount: number = Number(process.env.RESOURCE_COUNT || 64); -const resourcePayloadBytes: number = Number(process.env.RESOURCE_PAYLOAD_BYTES || 1024); +const config = new pulumi.Config(); + +const resourceCount: number = config.requireNumber("resource_count"); +const resourcePayloadBytes: number = config.requireNumber("resource_payload_bytes"); function pad8(num: number): string { return ('00000000' + num).slice(-8); diff --git a/misc/test/performance_test.go b/misc/test/performance_test.go index 75bd56a30..4dfe9f61e 100644 --- a/misc/test/performance_test.go +++ b/misc/test/performance_test.go @@ -107,7 +107,7 @@ type manyResourcesConfig struct { payloadBytes int } -func TestGoManyResources(t *testing.T) { +func TestManyResources(t *testing.T) { var configurations []manyResourcesConfig for _, resources := range []int{64, 128, 256} { @@ -143,9 +143,9 @@ func TestGoManyResources(t *testing.T) { check := func(t *testing.T, cfg manyResourcesConfig) { opts := integration.ProgramTestOptions{ Dir: path.Join(getCwd(t), "..", "benchmarks", cfg.folder), - Env: []string{ - fmt.Sprintf("RESOURCE_COUNT=%d", cfg.resources), - fmt.Sprintf("RESOURCE_PAYLOAD_BYTES=%d", cfg.payloadBytes), + Config: map[string]string{ + "resource_count": fmt.Sprintf("%d", cfg.resources), + "resource_payload_bytes": fmt.Sprintf("%d", cfg.payloadBytes), }, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { assert.Equal(t, float64(cfg.resources), stack.Outputs["ResourceCount"]) From f8b070e4a3a48f58f72a9044ca5b3d98ae05409c Mon Sep 17 00:00:00 2001 From: Anton Tayanovskyy Date: Mon, 12 Jul 2021 15:13:27 -0400 Subject: [PATCH 21/21] Remove IDE files --- .../cs-many-resources/.vscode/launch.json | 26 ------------ .../cs-many-resources/.vscode/tasks.json | 42 ------------------- 2 files changed, 68 deletions(-) delete mode 100644 misc/benchmarks/cs-many-resources/.vscode/launch.json delete mode 100644 misc/benchmarks/cs-many-resources/.vscode/tasks.json diff --git a/misc/benchmarks/cs-many-resources/.vscode/launch.json b/misc/benchmarks/cs-many-resources/.vscode/launch.json deleted file mode 100644 index 08abb7187..000000000 --- a/misc/benchmarks/cs-many-resources/.vscode/launch.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - // Use IntelliSense to find out which attributes exist for C# debugging - // Use hover for the description of the existing attributes - // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md - "name": ".NET Core Launch (console)", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build", - // If you have changed target frameworks, make sure to update the program path. - "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/cs-many-resources.dll", - "args": [], - "cwd": "${workspaceFolder}", - // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console - "console": "internalConsole", - "stopAtEntry": false - }, - { - "name": ".NET Core Attach", - "type": "coreclr", - "request": "attach" - } - ] -} \ No newline at end of file diff --git a/misc/benchmarks/cs-many-resources/.vscode/tasks.json b/misc/benchmarks/cs-many-resources/.vscode/tasks.json deleted file mode 100644 index 017e42ae1..000000000 --- a/misc/benchmarks/cs-many-resources/.vscode/tasks.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "build", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/cs-many-resources.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/cs-many-resources.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "watch", - "command": "dotnet", - "type": "process", - "args": [ - "watch", - "run", - "${workspaceFolder}/cs-many-resources.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - } - ] -} \ No newline at end of file