mirror of https://github.com/pulumi/pulumi.git
144 Commits
Author | SHA1 | Message | Date |
---|---|---|---|
Germán Lena |
a7d5e238b8
|
New deployment settings wizards and environment variables management comands (#16564)
- Turns `deployment settings init` command a wizard - Adds new `deployment settings env` command to manage env variables (including secrets encryption) - Adds new `deployment settings set` command to configure individual settings (including secrets encryption) https://asciinema.org/a/QhuWHAvkmeAmVJkYqkCP0P6wb Fix https://github.com/pulumi/pulumi-service/issues/20567 Fix https://github.com/pulumi/pulumi-service/issues/20576 |
|
Thomas Gummerer |
0dc51aadd9
|
retry post requests that timeout during handshake (#16576)
We've had quite a few test flakes that happen because of TLS handshake timeouts to the service backend. These are usually during stack creation (which happens a lot during tests), which are POST requests. POST requests are not generally safe to retry, because the request could already have been sent to the backend and an action taken, but the client couldn't read the response. However when there is a TLS handshake failure, the request can never have made it to the backend, so these errors are safe to retry. This should hopefully help with https://github.com/pulumi/pulumi/issues/16529. |
|
Germán Lena |
87a184a381
|
Update pu/pu to support new Deployment Settings endpoints (#16382)
<!--- Thanks so much for your contribution! If this is your first time contributing, please ensure that you have read the [CONTRIBUTING](https://github.com/pulumi/pulumi/blob/master/CONTRIBUTING.md) documentation. --> # Description Add DS endpoints to the backend and client Fixes https://github.com/pulumi/pulumi-service/issues/20276 ## Checklist - [ ] I have run `make tidy` to update any new dependencies - [ ] I have run `make lint` to verify my code passes the lint check - [ ] I have formatted my code using `gofumpt` <!--- Please provide details if the checkbox below is to be left unchecked. --> - [ ] I have added tests that prove my fix is effective or that my feature works <!--- User-facing changes require a CHANGELOG entry. --> - [ ] I have run `make changelog` and committed the `changelog/pending/<file>` documenting my change <!-- If the change(s) in this PR is a modification of an existing call to the Pulumi Cloud, then the service should honor older versions of the CLI where this change would not exist. You must then bump the API version in /pkg/backend/httpstate/client/api.go, as well as add it to the service. --> - [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Cloud API version <!-- @Pulumi employees: If yes, you must submit corresponding changes in the service repo. --> |
|
Thomas Gummerer |
7ab7f00ced
|
Improve error handling when downloading policy packs (#16306)
The HTTP client in Go only returns an error if there is a protocol level failure, or an error caused by client policy (which we don't use). However the policy pack can fail to be downloaded, and return a non 200 HTTP status. This should still be considered an error. Currently we would only detect this when trying to unpack the policy pack. Catching and returning this error earlier allows us to give better information about the failure to the user. I got curious about https://github.com/pulumi/pulumi/issues/16275, and did a short dive into the code. It looks like this should give us a better error message there. |
|
Komal |
9a370c727a
|
Use new API for deployments (#15684)
<!--- Thanks so much for your contribution! If this is your first time contributing, please ensure that you have read the [CONTRIBUTING](https://github.com/pulumi/pulumi/blob/master/CONTRIBUTING.md) documentation. --> # Description <!--- Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. --> Updates Remote Automation API to use the new stable URLs for the Deployments API. Adds support for `inheritSettings` to allow inheriting deployment settings pre-existing on the stack. I've tested this manually by editing the automation-api-examples for remote deployments, but not sure of a great way to add automated tests since automation api doesn't yet have support for setting deployment settings. EDIT: I considered just setting up a static stack for this but abandoned it because of concerns around parallel runs. We can add automated tests for this once we support creating deployment settings with automation api (coming soon). Fixes #12739 Fixes #15518 ## Checklist - [x] I have run `make tidy` to update any new dependencies - [x] I have run `make lint` to verify my code passes the lint check - [x] I have formatted my code using `gofumpt` <!--- Please provide details if the checkbox below is to be left unchecked. --> - [ ] I have added tests that prove my fix is effective or that my feature works <!--- User-facing changes require a CHANGELOG entry. --> - [x] I have run `make changelog` and committed the `changelog/pending/<file>` documenting my change <!-- If the change(s) in this PR is a modification of an existing call to the Pulumi Cloud, then the service should honor older versions of the CLI where this change would not exist. You must then bump the API version in /pkg/backend/httpstate/client/api.go, as well as add it to the service. --> - [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Cloud API version <!-- @Pulumi employees: If yes, you must submit corresponding changes in the service repo. --> |
|
hanghuge |
6b91857018
|
chore: fix function name in comment (#15867)
fix function name in comment Signed-off-by: hanghuge <cmoman@outlook.com> |
|
Thomas Gummerer |
0f8e922c71
|
allow retries for encrypt/decrypt API calls (#15600)
By default our HTTP client retries all GET requests. However these post requests are also idempotent, as we just expect to encrypt/decrypt a single value, without changing anything on the server side. Retry them, so network errors won't abort the pulumi program. There's also some log decryption events that might be retryable, but I'm not sure about them, so I left them alone for now. Fixes https://github.com/pulumi/pulumi/issues/15236 |
|
Anton Tayanovskyy |
9544fb00e3
|
Label the batchDecrypt endpoint (#15569)
Before this change looking at traces per instructions below had a span marked "unknown". The span actually belongs to the batchDecrypt endpoint. https://www.pulumi.com/docs/support/troubleshooting/#performance With the changes the span is labelled as you would expect. <!--- Thanks so much for your contribution! If this is your first time contributing, please ensure that you have read the [CONTRIBUTING](https://github.com/pulumi/pulumi/blob/master/CONTRIBUTING.md) documentation. --> # Description <!--- Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. --> Fixes # (issue) ## Checklist - [ ] I have run `make tidy` to update any new dependencies - [ ] I have run `make lint` to verify my code passes the lint check - [ ] I have formatted my code using `gofumpt` <!--- Please provide details if the checkbox below is to be left unchecked. --> - [ ] I have added tests that prove my fix is effective or that my feature works <!--- User-facing changes require a CHANGELOG entry. --> - [ ] I have run `make changelog` and committed the `changelog/pending/<file>` documenting my change <!-- If the change(s) in this PR is a modification of an existing call to the Pulumi Cloud, then the service should honor older versions of the CLI where this change would not exist. You must then bump the API version in /pkg/backend/httpstate/client/api.go, as well as add it to the service. --> - [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Cloud API version <!-- @Pulumi employees: If yes, you must submit corresponding changes in the service repo. --> |
|
Komal |
060382685e
|
Pass in a header to indicate where the deployment initiated (#15468)
<!--- Thanks so much for your contribution! If this is your first time contributing, please ensure that you have read the [CONTRIBUTING](https://github.com/pulumi/pulumi/blob/master/CONTRIBUTING.md) documentation. --> # Description <!--- Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. --> Fixes https://github.com/pulumi/pulumi/issues/12493 ## Checklist - [ ] I have run `make tidy` to update any new dependencies - [ ] I have run `make lint` to verify my code passes the lint check - [ ] I have formatted my code using `gofumpt` <!--- Please provide details if the checkbox below is to be left unchecked. --> - [ ] I have added tests that prove my fix is effective or that my feature works <!--- User-facing changes require a CHANGELOG entry. --> - [ ] I have run `make changelog` and committed the `changelog/pending/<file>` documenting my change <!-- If the change(s) in this PR is a modification of an existing call to the Pulumi Cloud, then the service should honor older versions of the CLI where this change would not exist. You must then bump the API version in /pkg/backend/httpstate/client/api.go, as well as add it to the service. --> - [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Cloud API version <!-- @Pulumi employees: If yes, you must submit corresponding changes in the service repo. --> |
|
Fraser Waters |
dd5fef7091
|
Fix stack name validation check (#15245)
The disable validation check for this was wrong (it did the assert if validation was disabled). |
|
Komal |
87d1090d9f
|
Replace a type used by the service (#15216)
<!--- Thanks so much for your contribution! If this is your first time contributing, please ensure that you have read the [CONTRIBUTING](https://github.com/pulumi/pulumi/blob/master/CONTRIBUTING.md) documentation. --> # Description <!--- Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. --> A type that is used by the Pulumi Cloud code was removed in [#15028](https://github.com/pulumi/pulumi/pull/15028/files#diff-52b25675ac0d98614d062fc1d1c9e60759f905cf7c60a9339402a62c23cc2c55L32-L33) - this PR replaces it. Fixes # (issue) ## Checklist - [ ] I have run `make tidy` to update any new dependencies - [ ] I have run `make lint` to verify my code passes the lint check - [ ] I have formatted my code using `gofumpt` <!--- Please provide details if the checkbox below is to be left unchecked. --> - [ ] I have added tests that prove my fix is effective or that my feature works <!--- User-facing changes require a CHANGELOG entry. --> - [ ] I have run `make changelog` and committed the `changelog/pending/<file>` documenting my change <!-- If the change(s) in this PR is a modification of an existing call to the Pulumi Cloud, then the service should honor older versions of the CLI where this change would not exist. You must then bump the API version in /pkg/backend/httpstate/client/api.go, as well as add it to the service. --> - [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Cloud API version <!-- @Pulumi employees: If yes, you must submit corresponding changes in the service repo. --> |
|
Thomas Gummerer |
baecc85eaf
|
turn on the golangci-lint exhaustive linter (#15028)
Turn on the golangci-lint exhaustive linter. This is the first step towards catching more missing cases during development rather than in tests, or in production. This might be best reviewed commit-by-commit, as the first commit turns on the linter with the `default-signifies-exhaustive: true` option set, which requires a lot less changes in the current codebase. I think it's probably worth doing the second commit as well, as that will get us the real benefits, even though we end up with a little bit more churn. However it means all the `switch` statements are covered, which isn't the case after the first commit, since we do have a lot of `default` statements that just call `assert.Fail`. Fixes #14601 ## Checklist - [x] I have run `make tidy` to update any new dependencies - [x] I have run `make lint` to verify my code passes the lint check - [x] I have formatted my code using `gofumpt` <!--- Please provide details if the checkbox below is to be left unchecked. --> - [ ] I have added tests that prove my fix is effective or that my feature works <!--- User-facing changes require a CHANGELOG entry. --> - [ ] I have run `make changelog` and committed the `changelog/pending/<file>` documenting my change <!-- If the change(s) in this PR is a modification of an existing call to the Pulumi Cloud, then the service should honor older versions of the CLI where this change would not exist. You must then bump the API version in /pkg/backend/httpstate/client/api.go, as well as add it to the service. --> - [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Cloud API version <!-- @Pulumi employees: If yes, you must submit corresponding changes in the service repo. --> |
|
Thomas Gummerer |
e88193aa4f
|
correct version check when we have a dev version installed (#14954)
When we have a dev version from the dev CLI channel installed, we want to warn whenever a new version is available, so the users can upgrade. Do that, and also reduce the amount of time the version information is cached, since we expect dev versions to be released much more frequently than regular releases. This needs https://github.com/pulumi/pulumi-service/pull/17429 to be merged and deployed first. Fixes #14641 ## Checklist - [ ] I have run `make tidy` to update any new dependencies - [ ] I have run `make lint` to verify my code passes the lint check - [ ] I have formatted my code using `gofumpt` <!--- Please provide details if the checkbox below is to be left unchecked. --> - [ ] I have added tests that prove my fix is effective or that my feature works <!--- User-facing changes require a CHANGELOG entry. --> - [ ] I have run `make changelog` and committed the `changelog/pending/<file>` documenting my change <!-- If the change(s) in this PR is a modification of an existing call to the Pulumi Cloud, then the service should honor older versions of the CLI where this change would not exist. You must then bump the API version in /pkg/backend/httpstate/client/api.go, as well as add it to the service. --> - [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Cloud API version <!-- @Pulumi employees: If yes, you must submit corresponding changes in the service repo. --> |
|
Kyle Pitzen |
c94390112a
|
Adds Pulumi AI integrations with Pulumi New (#14685)
<!--- Thanks so much for your contribution! If this is your first time contributing, please ensure that you have read the [CONTRIBUTING](https://github.com/pulumi/pulumi/blob/master/CONTRIBUTING.md) documentation. --> # Description <!--- Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. --> Now that we support .zip archive sources for Pulumi New, we have all of the API surface we need to provide a full Pulumi New experience using Pulumi AI. This PR introduces a few modes of interacting with Pulumi AI to generate Pulumi projects. - The default `pulumi new` experience now begins with a choice between `ai` and `template` modes - the `template` mode represents the current state of running `pulumi new`, while `ai` provides an interactive experience with Pulumi AI. - The user can iteratively ask questions to improve or change the resulting program - each time a prompt is completed, they are asked to `refine`, `no`, or `yes` their session - `refine` allows a follow-on prompt to be submitted. `no` ends the session without generating a pulumi project, and `yes` generates a Pulumi project from the most recent program returned by Pulumi AI. - Additionally, top-level flags, `--ai` and `--language` are provided to fill in default values for the AI mode. When a prompt is provided with a language, it is automatically submitted to Pulumi AI - if either is missing, the user is prompted for whichever value is missing. Fixes https://github.com/pulumi/pulumi.ai/issues/441 Fixes https://github.com/pulumi/pulumi.ai/issues/443 Fixes https://github.com/pulumi/pulumi.ai/issues/444 Depends on https://github.com/pulumi/pulumi.ai/pull/472 Depends on https://github.com/pulumi/pulumi.ai/pull/507 Depends on https://github.com/pulumi/pulumi.ai/pull/508 ## Checklist - [x] I have run `make tidy` to update any new dependencies - [x] I have run `make lint` to verify my code passes the lint check - [x] I have formatted my code using `gofumpt` <!--- Please provide details if the checkbox below is to be left unchecked. --> - [x] I have added tests that prove my fix is effective or that my feature works <!--- User-facing changes require a CHANGELOG entry. --> - [x] I have run `make changelog` and committed the `changelog/pending/<file>` documenting my change <!-- If the change(s) in this PR is a modification of an existing call to the Pulumi Cloud, then the service should honor older versions of the CLI where this change would not exist. You must then bump the API version in /pkg/backend/httpstate/client/api.go, as well as add it to the service. --> - [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Cloud API version <!-- @Pulumi employees: If yes, you must submit corresponding changes in the service repo. --> --------- Co-authored-by: Aaron Friel <mayreply@aaronfriel.com> |
|
Fraser Waters |
3560333ae6
|
Clean up uses of .Error() (#14965)
Combination of a few cleanups. 1. Don't call .Error() on errors that are being passed to "%s" format functions. Format will call `Error()` itself. 2. Don't call assert.Error then assert.Equal/Contains, just use assert.ErrorEqual/ErrorContains instead. 3. Use "%w" if appropriate, instead of "%v"/"%s". |
|
Fraser Waters |
16d9f4c167
|
Enable perfsprint linter (#14813)
<!--- Thanks so much for your contribution! If this is your first time contributing, please ensure that you have read the [CONTRIBUTING](https://github.com/pulumi/pulumi/blob/master/CONTRIBUTING.md) documentation. --> # Description <!--- Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. --> Prompted by a comment in another review: https://github.com/pulumi/pulumi/pull/14654#discussion_r1419995945 This lints that we don't use `fmt.Errorf` when `errors.New` will suffice, it also covers a load of other cases where `Sprintf` is sub-optimal. Most of these edits were made by running `perfsprint --fix`. ## Checklist - [x] I have run `make tidy` to update any new dependencies - [x] I have run `make lint` to verify my code passes the lint check - [x] I have formatted my code using `gofumpt` <!--- Please provide details if the checkbox below is to be left unchecked. --> - [ ] I have added tests that prove my fix is effective or that my feature works <!--- User-facing changes require a CHANGELOG entry. --> - [ ] I have run `make changelog` and committed the `changelog/pending/<file>` documenting my change <!-- If the change(s) in this PR is a modification of an existing call to the Pulumi Cloud, then the service should honor older versions of the CLI where this change would not exist. You must then bump the API version in /pkg/backend/httpstate/client/api.go, as well as add it to the service. --> - [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Cloud API version <!-- @Pulumi employees: If yes, you must submit corresponding changes in the service repo. --> |
|
Pat Gavlin |
ecb58cc9f7
|
[cli] Include config from ESC in `pulumi config` (#14560)
These changes include any configuration values sourced from a stack's ESC environment to the output of `pulumi config`. These changes also add an `ENVIRONMENT` block to the output of `pulumi config` for stacks that reference environments. This block shows the definition of the stack's environment. Finally, these changes add a warning to `pulumi config` if the stack's ESC environment does not define any of the `environmentVariables`, `files`, or `pulumiConfig` properties. |
|
Fraser Waters |
d771acf707
|
Add tokens.StackName (#14487)
<!--- Thanks so much for your contribution! If this is your first time contributing, please ensure that you have read the [CONTRIBUTING](https://github.com/pulumi/pulumi/blob/master/CONTRIBUTING.md) documentation. --> # Description <!--- Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. --> This adds a new type `tokens.StackName` which is a relatively strongly typed container for a stack name. The only weakly typed aspect of it is Go will always allow the "zero" value to be created for a struct, which for a stack name is the empty string which is invalid. To prevent introducing unexpected empty strings when working with stack names the `String()` method will panic for zero initialized stack names. Apart from the zero value, all other instances of `StackName` are via `ParseStackName` which returns a descriptive error if the string is not valid. This PR only updates "pkg/" to use this type. There are a number of places in "sdk/" which could do with this type as well, but there's no harm in doing a staggered roll out, and some parts of "sdk/" are user facing and will probably have to stay on the current `tokens.Name` and `tokens.QName` types. There are two places in the system where we panic on invalid stack names, both in the http backend. This _should_ be fine as we've had long standing validation that stacks created in the service are valid stack names. Just in case people have managed to introduce invalid stack names, there is the `PULUMI_DISABLE_VALIDATION` environment variable which will turn off the validation _and_ panicing for stack names. Users can use that to temporarily disable the validation and continue working, but it should only be seen as a temporary measure. If they have invalid names they should rename them, or if they think they should be valid raise an issue with us to change the validation code. ## Checklist - [x] I have run `make tidy` to update any new dependencies - [x] I have run `make lint` to verify my code passes the lint check - [ ] I have formatted my code using `gofumpt` <!--- Please provide details if the checkbox below is to be left unchecked. --> - [x] I have added tests that prove my fix is effective or that my feature works <!--- User-facing changes require a CHANGELOG entry. --> - [ ] I have run `make changelog` and committed the `changelog/pending/<file>` documenting my change <!-- If the change(s) in this PR is a modification of an existing call to the Pulumi Cloud, then the service should honor older versions of the CLI where this change would not exist. You must then bump the API version in /pkg/backend/httpstate/client/api.go, as well as add it to the service. --> - [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Cloud API version <!-- @Pulumi employees: If yes, you must submit corresponding changes in the service repo. --> |
|
Pat Gavlin |
4d3b82cb9f
|
[cli] Add support for environments (#14140)
These changes add support for ESC environments to the Pulumi CLI. This involves two major changes: - Support for the `env` subcommand - Support for the `environment` stanza in stack config files The former reuses the command from `esc` itself with a little rebranding. The latter adds support to stack config files for an `environment` property of the form: ```yaml environment: - list - of - environment - names ``` If this property is present in a stack's config file, the CLI will open the and merge the listed environments during `pulumi up` et. al. If an object-valued `pulumiConfig` property is present in the opened environment, its values will be merged on top of the stack's config prior to whatever operation is to be performed. If an object-valued `environmentVariables` property is present inthe opened environment, its values will be published as environment variables prior to the Pulumi operation. Any values in the open environment's `pulumiConfig` or `environmentVariables` that are marked as secret will be encrypted in the resulting config and will be filtered from the command's logs. |
|
Fraser Waters |
61dcd6f6ca
|
Add token info to whoami (#13206)
<!--- Thanks so much for your contribution! If this is your first time contributing, please ensure that you have read the [CONTRIBUTING](https://github.com/pulumi/pulumi/blob/master/CONTRIBUTING.md) documentation. --> # Description <!--- Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. --> Fixes https://github.com/pulumi/pulumi-cloud-requests/issues/236 ## Checklist - [x] I have run `make tidy` to update any new dependencies - [x] I have run `make lint` to verify my code passes the lint check - [ ] I have formatted my code using `gofumpt` <!--- Please provide details if the checkbox below is to be left unchecked. --> - [x] I have added tests that prove my fix is effective or that my feature works <!--- User-facing changes require a CHANGELOG entry. --> - [x] I have run `make changelog` and committed the `changelog/pending/<file>` documenting my change <!-- If the change(s) in this PR is a modification of an existing call to the Pulumi Cloud, then the service should honor older versions of the CLI where this change would not exist. You must then bump the API version in /pkg/backend/httpstate/client/api.go, as well as add it to the service. --> - [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Cloud API version <!-- @Pulumi employees: If yes, you must submit corresponding changes in the service repo. --> |
|
Kyle Pitzen |
fe639f40d2
|
[org search] Adds both the display of and the ability to open search results URLs (#13879)
<!--- Thanks so much for your contribution! If this is your first time contributing, please ensure that you have read the [CONTRIBUTING](https://github.com/pulumi/pulumi/blob/master/CONTRIBUTING.md) documentation. --> # Description <!--- Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. --> Displays to users a copyable URL to view org search results in Pulumi Cloud as well as a `--web` flag to automatically open those results for them. Fixes https://github.com/pulumi/pulumi.ai/issues/207 ## Checklist - [x] I have run `make tidy` to update any new dependencies - [x] I have run `make lint` to verify my code passes the lint check - [ ] I have formatted my code using `gofumpt` <!--- Please provide details if the checkbox below is to be left unchecked. --> - [x] I have added tests that prove my fix is effective or that my feature works <!--- User-facing changes require a CHANGELOG entry. --> - [x] I have run `make changelog` and committed the `changelog/pending/<file>` documenting my change <!-- If the change(s) in this PR is a modification of an existing call to the Pulumi Cloud, then the service should honor older versions of the CLI where this change would not exist. You must then bump the API version in /pkg/backend/httpstate/client/api.go, as well as add it to the service. --> - [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Cloud API version <!-- @Pulumi employees: If yes, you must submit corresponding changes in the service repo. --> |
|
Kyle Pitzen |
59c08cb219
|
Adds two new CLI features - search and AI search (#13611)
Adds initial pulumi search implementation <!--- Thanks so much for your contribution! If this is your first time contributing, please ensure that you have read the [CONTRIBUTING](https://github.com/pulumi/pulumi/blob/master/CONTRIBUTING.md) documentation. --> # Description <!--- Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. --> Fixes https://github.com/pulumi/pulumi/issues/13489 Fixes https://github.com/pulumi/pulumi/issues/12868 ## Checklist - [x] I have run `make tidy` to update any new dependencies - [x] I have run `make lint` to verify my code passes the lint check - [ ] I have formatted my code using `gofumpt` <!--- Please provide details if the checkbox below is to be left unchecked. --> - [x] I have added tests that prove my fix is effective or that my feature works <!--- User-facing changes require a CHANGELOG entry. --> - [x] I have run `make changelog` and committed the `changelog/pending/<file>` documenting my change <!-- If the change(s) in this PR is a modification of an existing call to the Pulumi Cloud, then the service should honor older versions of the CLI where this change would not exist. You must then bump the API version in /pkg/backend/httpstate/client/api.go, as well as add it to the service. --> - [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Cloud API version <!-- @Pulumi employees: If yes, you must submit corresponding changes in the service repo. --> |
|
Abhinav Gupta |
1d7db547f4
|
{cli, httpstate}: Don't retry GetCLIVersionInfo
Changes the httpstate client to not retry requests to `GET /api/cli/version` so as not to block the CLI for 7 seconds in airgapped environments and the like. Testing: Before this change, the accompanying test took 7 seconds to fail. With this change, it succeeds nearly instantly. Resolves #13166 |
|
Abhinav Gupta |
a9dc0cfbfd
|
httpstate/client: Support no retries
Switches the httpClient interface in httpstate from accepting a `retryAllMethods` boolean to an enum capable of representing another state: retry nothing. With this, it's possible to call `httpClient.Do(..)` and make a request without any retries. Step towards #13166 |
|
Pat Gavlin | 1bc94a9d2a |
[snapshot] Use a newer diff package
The version of gopls that gotextdiff is derived from is over three years old. In the intervening time, the differ used by gopls has improved tremendously, and the language has grown new features like generics. These changes use a different diff package that is derived from an up-to-date version of gopls and exposes an API that is parameterized over the storage of the text. Taken together, this allows us to use a much faster and more memory-efficient algorithm for diffing while safely avoiding string copies when invoking the differ. The more efficient algorithm operates on arbitrary slices whose elements are comparable. Naive use of this algorithm--passing byte slices in--can cause increased time spent diffing, as the sequences being compared are longer. In order to avoid this, these changes record spans of marshaled deployments as the deployments are marshaled. These spans are strings that cover the diffable elements of the deployment: its header, its resources, and its pending operations. The output of the newer algorithm is converible to the format we currently send to the service, so these changes should not require service-side changes. In order to avoid bumping the minimum Go version required to build the `github.com/pulumi/pulumi/pkg/v3" and therefore break backwards compatibility with consumers using older toolchains (e.g. providers), these changes use the existing differ when built with a pre-1.20 toolchain. Official builds of the CLI are already using Go 1.20+ and should use the new differ without additional changes. These changes improve CPU time, allocation volume, and the compression ratio by 57%, 87%, and 52%, respectively. Benchmark results and analysis: httpstate ❯ go test -count=10 -run none -benchmem -bench . | tee spanned.txt httpstate ❯ benchstat buffer-pool.txt spanned.txt >stat.txt ``` │ buffer-pool.txt │ spanned.txt │ │ sec/op │ sec/op vs base │ DiffStack/1_x_2_B-10 45.09µ ± 1% 22.81µ ± 1% -49.41% (p=0.000 n=10) DiffStack/2_x_2_B-10 79.49µ ± 1% 40.60µ ± 1% -48.93% (p=0.000 n=10) DiffStack/4_x_2_B-10 172.54µ ± 2% 81.57µ ± 0% -52.72% (p=0.000 n=10) DiffStack/8_x_2_B-10 455.4µ ± 1% 200.4µ ± 0% -56.00% (p=0.000 n=10) DiffStack/16_x_2_B-10 1388.2µ ± 1% 575.1µ ± 1% -58.57% (p=0.000 n=10) DiffStack/32_x_2_B-10 4.409m ± 1% 1.866m ± 0% -57.67% (p=0.000 n=10) DiffStack/48_x_2_B-10 9.275m ± 0% 3.484m ± 0% -62.44% (p=0.000 n=10) DiffStack/64_x_2_B-10 14.564m ± 0% 5.945m ± 1% -59.18% (p=0.000 n=10) DiffStack/1_x_8.2_kB-10 124.81µ ± 1% 40.14µ ± 1% -67.84% (p=0.000 n=10) DiffStack/2_x_8.2_kB-10 299.8µ ± 0% 121.8µ ± 1% -59.38% (p=0.000 n=10) DiffStack/4_x_8.2_kB-10 846.2µ ± 1% 355.8µ ± 0% -57.96% (p=0.000 n=10) DiffStack/8_x_8.2_kB-10 2.743m ± 1% 1.150m ± 0% -58.06% (p=0.000 n=10) DiffStack/16_x_8.2_kB-10 9.271m ± 1% 4.041m ± 0% -56.41% (p=0.000 n=10) DiffStack/32_x_8.2_kB-10 31.78m ± 0% 14.97m ± 0% -52.88% (p=0.000 n=10) DiffStack/48_x_8.2_kB-10 66.14m ± 1% 30.66m ± 0% -53.63% (p=0.000 n=10) DiffStack/64_x_8.2_kB-10 107.50m ± 0% 53.44m ± 0% -50.29% (p=0.000 n=10) DiffStack/1_x_33_kB-10 240.51µ ± 1% 76.95µ ± 0% -68.01% (p=0.000 n=10) DiffStack/2_x_33_kB-10 798.5µ ± 0% 310.6µ ± 0% -61.10% (p=0.000 n=10) DiffStack/4_x_33_kB-10 2451.9µ ± 1% 978.9µ ± 3% -60.08% (p=0.000 n=10) DiffStack/8_x_33_kB-10 8.258m ± 0% 3.731m ± 0% -54.82% (p=0.000 n=10) DiffStack/16_x_33_kB-10 28.29m ± 1% 12.77m ± 0% -54.85% (p=0.000 n=10) DiffStack/32_x_33_kB-10 104.11m ± 1% 44.84m ± 1% -56.93% (p=0.000 n=10) DiffStack/48_x_33_kB-10 199.73m ± 1% 95.87m ± 1% -52.00% (p=0.000 n=10) DiffStack/64_x_33_kB-10 339.6m ± 2% 159.2m ± 2% -53.12% (p=0.000 n=10) DiffStack/2_x_131_kB-10 2721.7µ ± 0% 984.3µ ± 0% -63.84% (p=0.000 n=10) DiffStack/4_x_131_kB-10 8.334m ± 1% 3.654m ± 2% -56.15% (p=0.000 n=10) DiffStack/8_x_131_kB-10 25.89m ± 0% 12.23m ± 0% -52.77% (p=0.000 n=10) DiffStack/16_x_131_kB-10 87.49m ± 1% 40.26m ± 0% -53.98% (p=0.000 n=10) DiffStack/32_x_131_kB-10 317.0m ± 5% 150.4m ± 0% -52.57% (p=0.000 n=10) DiffStack/48_x_131_kB-10 681.8m ± 1% 332.1m ± 0% -51.28% (p=0.000 n=10) DiffStack/64_x_131_kB-10 1190.4m ± 1% 583.1m ± 0% -51.01% (p=0.000 n=10) DiffStack/1_x_524_kB-10 3.215m ± 0% 1.086m ± 0% -66.21% (p=0.000 n=10) DiffStack/2_x_524_kB-10 9.676m ± 1% 3.994m ± 0% -58.72% (p=0.000 n=10) DiffStack/4_x_524_kB-10 29.84m ± 0% 12.88m ± 1% -56.84% (p=0.000 n=10) DiffStack/8_x_524_kB-10 92.11m ± 1% 42.35m ± 0% -54.02% (p=0.000 n=10) DiffStack/16_x_524_kB-10 322.1m ± 0% 154.0m ± 0% -52.19% (p=0.000 n=10) DiffStackRecorded/two-large-checkpoints.json-10 54.73m ± 1% 22.63m ± 0% -58.65% (p=0.000 n=10) DiffStackRecorded/checkpoints.json-10 815.1m ± 0% 395.5m ± 2% -51.48% (p=0.000 n=10) geomean 10.45m 4.530m -56.65% │ buffer-pool.txt │ spanned.txt │ │ checkpoint_bytes │ checkpoint_bytes vs base │ DiffStack/1_x_2_B-10 2.539k ± 0% 1.950k ± 0% -23.20% (p=0.000 n=10) DiffStack/2_x_2_B-10 5.201k ± 0% 4.548k ± 0% -12.56% (p=0.000 n=10) DiffStack/4_x_2_B-10 13.63k ± 0% 12.30k ± 0% -9.77% (p=0.000 n=10) DiffStack/8_x_2_B-10 45.09k ± 0% 42.86k ± 0% -4.95% (p=0.000 n=10) DiffStack/16_x_2_B-10 161.9k ± 0% 156.4k ± 0% -3.42% (p=0.000 n=10) DiffStack/32_x_2_B-10 579.8k ± 0% 604.2k ± 0% +4.21% (p=0.000 n=10) DiffStack/48_x_2_B-10 1.306M ± 0% 1.180M ± 0% -9.68% (p=0.000 n=10) DiffStack/64_x_2_B-10 2.164M ± 0% 2.134M ± 0% -1.36% (p=0.000 n=10) DiffStack/1_x_8.2_kB-10 27.109k ± 0% 9.856k ± 0% -63.64% (p=0.000 n=10) DiffStack/2_x_8.2_kB-10 78.91k ± 0% 61.59k ± 0% -21.94% (p=0.000 n=10) DiffStack/4_x_8.2_kB-10 284.2k ± 0% 258.3k ± 0% -9.13% (p=0.000 n=10) DiffStack/8_x_8.2_kB-10 1.119M ± 0% 1.041M ± 0% -6.89% (p=0.000 n=10) DiffStack/16_x_8.2_kB-10 4.389M ± 0% 4.201M ± 0% -4.29% (p=0.000 n=10) DiffStack/32_x_8.2_kB-10 16.74M ± 0% 17.06M ± 0% +1.95% (p=0.000 n=10) DiffStack/48_x_8.2_kB-10 36.30M ± 0% 35.93M ± 0% -1.00% (p=0.000 n=10) DiffStack/64_x_8.2_kB-10 60.98M ± 0% 64.06M ± 0% +5.05% (p=0.000 n=10) DiffStack/1_x_33_kB-10 67.79k ± 0% 34.43k ± 0% -49.20% (p=0.000 n=10) DiffStack/2_x_33_kB-10 300.1k ± 0% 233.6k ± 0% -22.15% (p=0.000 n=10) DiffStack/4_x_33_kB-10 1128.3k ± 0% 929.5k ± 0% -17.62% (p=0.000 n=10) DiffStack/8_x_33_kB-10 4.437M ± 0% 4.238M ± 0% -4.49% (p=0.000 n=10) DiffStack/16_x_33_kB-10 16.57M ± 0% 15.78M ± 0% -4.79% (p=0.000 n=10) DiffStack/32_x_33_kB-10 64.35M ± 0% 58.66M ± 0% -8.84% (p=0.000 n=10) DiffStack/48_x_33_kB-10 127.0M ± 0% 128.0M ± 0% +0.80% (p=0.000 n=10) DiffStack/64_x_33_kB-10 217.7M ± 0% 216.5M ± 0% -0.54% (p=0.000 n=10) DiffStack/2_x_131_kB-10 1316.2k ± 0% 921.8k ± 0% -29.97% (p=0.000 n=10) DiffStack/4_x_131_kB-10 4.733M ± 0% 4.207M ± 0% -11.11% (p=0.000 n=10) DiffStack/8_x_131_kB-10 16.03M ± 0% 15.77M ± 0% -1.64% (p=0.000 n=10) DiffStack/16_x_131_kB-10 57.42M ± 0% 54.66M ± 0% -4.81% (p=0.000 n=10) DiffStack/32_x_131_kB-10 214.8M ± 0% 210.7M ± 0% -1.90% (p=0.000 n=10) DiffStack/48_x_131_kB-10 472.9M ± 0% 466.9M ± 0% -1.28% (p=0.000 n=10) DiffStack/64_x_131_kB-10 832.3M ± 0% 824.7M ± 0% -0.92% (p=0.000 n=10) DiffStack/1_x_524_kB-10 1.575M ± 0% 1.051M ± 0% -33.32% (p=0.000 n=10) DiffStack/2_x_524_kB-10 5.248M ± 0% 4.199M ± 0% -20.00% (p=0.000 n=10) DiffStack/4_x_524_kB-10 18.36M ± 0% 15.74M ± 0% -14.28% (p=0.000 n=10) DiffStack/8_x_524_kB-10 60.86M ± 0% 56.66M ± 0% -6.90% (p=0.000 n=10) DiffStack/16_x_524_kB-10 223.5M ± 0% 214.0M ± 0% -4.23% (p=0.000 n=10) DiffStackRecorded/two-large-checkpoints.json-10 13.21M ± 0% 13.20M ± 0% -0.01% (p=0.000 n=10) DiffStackRecorded/checkpoints.json-10 155.9M ± 0% 154.9M ± 0% -0.60% (p=0.000 n=10) geomean 3.606M 3.173M -12.01% │ buffer-pool.txt │ spanned.txt │ │ ratio │ ratio vs base │ DiffStack/1_x_2_B-10 789.5m ± 0% 1641.0m ± 0% +107.85% (p=0.000 n=10) DiffStack/2_x_2_B-10 1.034 ± 0% 2.353 ± 0% +127.56% (p=0.000 n=10) DiffStack/4_x_2_B-10 1.575 ± 0% 3.592 ± 0% +128.06% (p=0.000 n=10) DiffStack/8_x_2_B-10 2.829 ± 0% 6.684 ± 0% +136.27% (p=0.000 n=10) DiffStack/16_x_2_B-10 5.296 ± 0% 12.610 ± 0% +138.10% (p=0.000 n=10) DiffStack/32_x_2_B-10 9.681 ± 0% 24.790 ± 0% +156.07% (p=0.000 n=10) DiffStack/48_x_2_B-10 14.65 ± 0% 32.44 ± 0% +121.43% (p=0.000 n=10) DiffStack/64_x_2_B-10 18.26 ± 0% 44.11 ± 0% +141.57% (p=0.000 n=10) DiffStack/1_x_8.2_kB-10 1.383 ± 0% 1.051 ± 0% -24.01% (p=0.000 n=10) DiffStack/2_x_8.2_kB-10 1.716 ± 0% 2.324 ± 0% +35.43% (p=0.000 n=10) DiffStack/4_x_8.2_kB-10 2.878 ± 0% 4.251 ± 0% +47.71% (p=0.000 n=10) DiffStack/8_x_8.2_kB-10 5.475 ± 0% 8.056 ± 0% +47.14% (p=0.000 n=10) DiffStack/16_x_8.2_kB-10 10.56 ± 0% 15.77 ± 0% +49.34% (p=0.000 n=10) DiffStack/32_x_8.2_kB-10 19.97 ± 0% 31.57 ± 0% +58.09% (p=0.000 n=10) DiffStack/48_x_8.2_kB-10 28.80 ± 0% 44.11 ± 0% +53.16% (p=0.000 n=10) DiffStack/64_x_8.2_kB-10 36.23 ± 0% 58.84 ± 0% +62.41% (p=0.000 n=10) DiffStack/1_x_33_kB-10 986.0m ± 0% 1014.0m ± 0% +2.84% (p=0.000 n=10) DiffStack/2_x_33_kB-10 1.777 ± 0% 2.331 ± 0% +31.18% (p=0.000 n=10) DiffStack/4_x_33_kB-10 3.057 ± 0% 3.993 ± 0% +30.62% (p=0.000 n=10) DiffStack/8_x_33_kB-10 5.766 ± 0% 8.511 ± 0% +47.61% (p=0.000 n=10) DiffStack/16_x_33_kB-10 10.55 ± 0% 15.35 ± 0% +45.50% (p=0.000 n=10) DiffStack/32_x_33_kB-10 20.28 ± 0% 28.08 ± 0% +38.46% (p=0.000 n=10) DiffStack/48_x_33_kB-10 26.59 ± 0% 40.64 ± 0% +52.84% (p=0.000 n=10) DiffStack/64_x_33_kB-10 34.14 ± 0% 51.44 ± 0% +50.67% (p=0.000 n=10) DiffStack/2_x_131_kB-10 1.993 ± 0% 2.333 ± 0% +17.06% (p=0.000 n=10) DiffStack/4_x_131_kB-10 3.263 ± 0% 4.569 ± 0% +40.02% (p=0.000 n=10) DiffStack/8_x_131_kB-10 5.291 ± 0% 7.995 ± 0% +51.11% (p=0.000 n=10) DiffStack/16_x_131_kB-10 9.275 ± 0% 13.410 ± 0% +44.58% (p=0.000 n=10) DiffStack/32_x_131_kB-10 17.17 ± 0% 25.44 ± 0% +48.17% (p=0.000 n=10) DiffStack/48_x_131_kB-10 25.11 ± 0% 37.39 ± 0% +48.90% (p=0.000 n=10) DiffStack/64_x_131_kB-10 33.09 ± 0% 49.40 ± 0% +49.29% (p=0.000 n=10) DiffStack/1_x_524_kB-10 1.498 ± 0% 1.999 ± 0% +33.44% (p=0.000 n=10) DiffStack/2_x_524_kB-10 1.998 ± 0% 2.666 ± 0% +33.43% (p=0.000 n=10) DiffStack/4_x_524_kB-10 3.180 ± 0% 4.285 ± 0% +34.75% (p=0.000 n=10) DiffStack/8_x_524_kB-10 5.040 ± 0% 7.199 ± 0% +42.84% (p=0.000 n=10) DiffStack/16_x_524_kB-10 9.058 ± 0% 13.160 ± 0% +45.29% (p=0.000 n=10) DiffStackRecorded/two-large-checkpoints.json-10 1.997 ± 0% 1.999 ± 0% +0.10% (p=0.000 n=10) DiffStackRecorded/checkpoints.json-10 36.60 ± 0% 40.42 ± 0% +10.44% (p=0.000 n=10) geomean 5.993 9.122 +52.20% │ buffer-pool.txt │ spanned.txt │ │ wire_bytes │ wire_bytes vs base │ DiffStack/1_x_2_B-10 3.216k ± 0% 1.188k ± 0% -63.06% (p=0.000 n=10) DiffStack/2_x_2_B-10 5.031k ± 0% 1.933k ± 0% -61.58% (p=0.000 n=10) DiffStack/4_x_2_B-10 8.655k ± 0% 3.424k ± 0% -60.44% (p=0.000 n=10) DiffStack/8_x_2_B-10 15.938k ± 0% 6.412k ± 0% -59.77% (p=0.000 n=10) DiffStack/16_x_2_B-10 30.58k ± 0% 12.40k ± 0% -59.45% (p=0.000 n=10) DiffStack/32_x_2_B-10 59.89k ± 0% 24.37k ± 0% -59.31% (p=0.000 n=10) DiffStack/48_x_2_B-10 89.17k ± 0% 36.38k ± 0% -59.21% (p=0.000 n=10) DiffStack/64_x_2_B-10 118.48k ± 0% 48.39k ± 0% -59.16% (p=0.000 n=10) DiffStack/1_x_8.2_kB-10 19.596k ± 0% 9.378k ± 0% -52.14% (p=0.000 n=10) DiffStack/2_x_8.2_kB-10 45.98k ± 0% 26.50k ± 0% -42.36% (p=0.000 n=10) DiffStack/4_x_8.2_kB-10 98.75k ± 0% 60.76k ± 0% -38.47% (p=0.000 n=10) DiffStack/8_x_8.2_kB-10 204.3k ± 0% 129.3k ± 0% -36.72% (p=0.000 n=10) DiffStack/16_x_8.2_kB-10 415.5k ± 0% 266.3k ± 0% -35.91% (p=0.000 n=10) DiffStack/32_x_8.2_kB-10 837.9k ± 0% 540.4k ± 0% -35.50% (p=0.000 n=10) DiffStack/48_x_8.2_kB-10 1260.4k ± 0% 814.6k ± 0% -35.37% (p=0.000 n=10) DiffStack/64_x_8.2_kB-10 1.683M ± 0% 1.089M ± 0% -35.31% (p=0.000 n=10) DiffStack/1_x_33_kB-10 68.75k ± 0% 33.95k ± 0% -50.61% (p=0.000 n=10) DiffStack/2_x_33_kB-10 168.9k ± 0% 100.2k ± 0% -40.64% (p=0.000 n=10) DiffStack/4_x_33_kB-10 369.1k ± 0% 232.8k ± 0% -36.93% (p=0.000 n=10) DiffStack/8_x_33_kB-10 769.6k ± 0% 497.9k ± 0% -35.30% (p=0.000 n=10) DiffStack/16_x_33_kB-10 1.571M ± 0% 1.028M ± 0% -34.53% (p=0.000 n=10) DiffStack/32_x_33_kB-10 3.173M ± 0% 2.089M ± 0% -34.16% (p=0.000 n=10) DiffStack/48_x_33_kB-10 4.775M ± 0% 3.149M ± 0% -34.04% (p=0.000 n=10) DiffStack/64_x_33_kB-10 6.377M ± 0% 4.210M ± 0% -33.98% (p=0.000 n=10) DiffStack/2_x_131_kB-10 660.4k ± 0% 395.1k ± 0% -40.16% (p=0.000 n=10) DiffStack/4_x_131_kB-10 1450.4k ± 0% 920.9k ± 0% -36.51% (p=0.000 n=10) DiffStack/8_x_131_kB-10 3.031M ± 0% 1.972M ± 0% -34.91% (p=0.000 n=10) DiffStack/16_x_131_kB-10 6.191M ± 0% 4.076M ± 0% -34.17% (p=0.000 n=10) DiffStack/32_x_131_kB-10 12.512M ± 0% 8.282M ± 0% -33.81% (p=0.000 n=10) DiffStack/48_x_131_kB-10 18.83M ± 0% 12.49M ± 0% -33.69% (p=0.000 n=10) DiffStack/64_x_131_kB-10 25.15M ± 0% 16.69M ± 0% -33.63% (p=0.000 n=10) DiffStack/1_x_524_kB-10 1051.8k ± 0% 525.5k ± 0% -50.04% (p=0.000 n=10) DiffStack/2_x_524_kB-10 2.626M ± 0% 1.575M ± 0% -40.04% (p=0.000 n=10) DiffStack/4_x_524_kB-10 5.776M ± 0% 3.673M ± 0% -36.40% (p=0.000 n=10) DiffStack/8_x_524_kB-10 12.075M ± 0% 7.871M ± 0% -34.82% (p=0.000 n=10) DiffStack/16_x_524_kB-10 24.67M ± 0% 16.27M ± 0% -34.07% (p=0.000 n=10) DiffStackRecorded/two-large-checkpoints.json-10 6.612M ± 0% 6.606M ± 0% -0.10% (p=0.000 n=10) DiffStackRecorded/checkpoints.json-10 4.259M ± 0% 3.833M ± 0% -10.00% (p=0.000 n=10) geomean 601.7k 347.8k -42.19% │ buffer-pool.txt │ spanned.txt │ │ B/op │ B/op vs base │ DiffStack/1_x_2_B-10 31.85Ki ± 0% 15.79Ki ± 0% -50.42% (p=0.000 n=10) DiffStack/2_x_2_B-10 61.81Ki ± 0% 28.01Ki ± 0% -54.68% (p=0.000 n=10) DiffStack/4_x_2_B-10 147.58Ki ± 0% 55.60Ki ± 0% -62.33% (p=0.000 n=10) DiffStack/8_x_2_B-10 425.9Ki ± 0% 116.9Ki ± 0% -72.55% (p=0.000 n=10) DiffStack/16_x_2_B-10 1429.9Ki ± 0% 307.8Ki ± 0% -78.47% (p=0.000 n=10) DiffStack/32_x_2_B-10 4955.7Ki ± 0% 934.1Ki ± 0% -81.15% (p=0.000 n=10) DiffStack/48_x_2_B-10 10.746Mi ± 0% 1.682Mi ± 0% -84.34% (p=0.000 n=10) DiffStack/64_x_2_B-10 17.664Mi ± 0% 2.822Mi ± 0% -84.03% (p=0.000 n=10) DiffStack/1_x_8.2_kB-10 202.50Ki ± 0% 41.18Ki ± 0% -79.66% (p=0.000 n=10) DiffStack/2_x_8.2_kB-10 511.5Ki ± 0% 134.1Ki ± 0% -73.78% (p=0.000 n=10) DiffStack/4_x_8.2_kB-10 1513.5Ki ± 0% 309.4Ki ± 0% -79.56% (p=0.000 n=10) DiffStack/8_x_8.2_kB-10 4886.0Ki ± 0% 674.2Ki ± 0% -86.20% (p=0.000 n=10) DiffStack/16_x_8.2_kB-10 16.287Mi ± 0% 1.427Mi ± 0% -91.24% (p=0.000 n=10) DiffStack/32_x_8.2_kB-10 57.541Mi ± 0% 3.198Mi ± 0% -94.44% (p=0.000 n=10) DiffStack/48_x_8.2_kB-10 121.703Mi ± 0% 5.810Mi ± 0% -95.23% (p=0.000 n=10) DiffStack/64_x_8.2_kB-10 200.588Mi ± 0% 7.495Mi ± 0% -96.26% (p=0.000 n=10) DiffStack/1_x_33_kB-10 562.5Ki ± 0% 136.3Ki ± 0% -75.78% (p=0.000 n=10) DiffStack/2_x_33_kB-10 2041.0Ki ± 0% 505.5Ki ± 0% -75.23% (p=0.000 n=10) DiffStack/4_x_33_kB-10 5.874Mi ± 0% 1.129Mi ± 0% -80.78% (p=0.000 n=10) DiffStack/8_x_33_kB-10 18.837Mi ± 0% 2.410Mi ± 0% -87.21% (p=0.000 n=10) DiffStack/16_x_33_kB-10 61.898Mi ± 0% 5.015Mi ± 0% -91.90% (p=0.000 n=10) DiffStack/32_x_33_kB-10 221.69Mi ± 0% 10.36Mi ± 0% -95.32% (p=0.000 n=10) DiffStack/48_x_33_kB-10 430.13Mi ± 0% 18.50Mi ± 0% -95.70% (p=0.000 n=10) DiffStack/64_x_33_kB-10 722.07Mi ± 0% 21.63Mi ± 0% -97.00% (p=0.000 n=10) DiffStack/2_x_131_kB-10 8.098Mi ± 0% 1.656Mi ± 0% -79.55% (p=0.000 n=10) DiffStack/4_x_131_kB-10 22.662Mi ± 0% 3.934Mi ± 0% -82.64% (p=0.000 n=10) DiffStack/8_x_131_kB-10 65.217Mi ± 0% 8.425Mi ± 0% -87.08% (p=0.000 n=10) DiffStack/16_x_131_kB-10 204.90Mi ± 0% 17.22Mi ± 1% -91.60% (p=0.000 n=10) DiffStack/32_x_131_kB-10 703.12Mi ± 0% 34.89Mi ± 0% -95.04% (p=0.000 n=10) DiffStack/48_x_131_kB-10 1505.36Mi ± 0% 61.24Mi ± 0% -95.93% (p=0.000 n=10) DiffStack/64_x_131_kB-10 2586.04Mi ± 0% 70.48Mi ± 1% -97.27% (p=0.000 n=10) DiffStack/1_x_524_kB-10 11.854Mi ± 1% 2.127Mi ± 0% -82.06% (p=0.000 n=10) DiffStack/2_x_524_kB-10 32.932Mi ± 1% 6.558Mi ± 1% -80.09% (p=0.000 n=10) DiffStack/4_x_524_kB-10 90.04Mi ± 0% 15.15Mi ± 0% -83.17% (p=0.000 n=10) DiffStack/8_x_524_kB-10 252.94Mi ± 0% 32.27Mi ± 1% -87.24% (p=0.000 n=10) DiffStack/16_x_524_kB-10 801.77Mi ± 0% 66.46Mi ± 1% -91.71% (p=0.000 n=10) DiffStackRecorded/two-large-checkpoints.json-10 103.67Mi ± 0% 35.52Mi ± 0% -65.74% (p=0.000 n=10) DiffStackRecorded/checkpoints.json-10 913.90Mi ± 0% 53.53Mi ± 1% -94.14% (p=0.000 n=10) geomean 19.16Mi 2.409Mi -87.43% │ buffer-pool.txt │ spanned.txt │ │ allocs/op │ allocs/op vs base │ DiffStack/1_x_2_B-10 344.0 ± 0% 184.0 ± 0% -46.51% (p=0.000 n=10) DiffStack/2_x_2_B-10 616.0 ± 0% 295.0 ± 0% -52.11% (p=0.000 n=10) DiffStack/4_x_2_B-10 1381.0 ± 0% 524.0 ± 0% -62.06% (p=0.000 n=10) DiffStack/8_x_2_B-10 3.922k ± 0% 1.032k ± 0% -73.69% (p=0.000 n=10) DiffStack/16_x_2_B-10 12.791k ± 0% 2.233k ± 0% -82.54% (p=0.000 n=10) DiffStack/32_x_2_B-10 43.416k ± 0% 5.410k ± 0% -87.54% (p=0.000 n=10) DiffStack/48_x_2_B-10 95.803k ± 0% 9.036k ± 0% -90.57% (p=0.000 n=10) DiffStack/64_x_2_B-10 156.99k ± 0% 13.99k ± 0% -91.09% (p=0.000 n=10) DiffStack/1_x_8.2_kB-10 335.0 ± 0% 182.0 ± 0% -45.67% (p=0.000 n=10) DiffStack/2_x_8.2_kB-10 597.5 ± 0% 295.0 ± 0% -50.63% (p=0.000 n=10) DiffStack/4_x_8.2_kB-10 1304.0 ± 0% 527.0 ± 0% -59.59% (p=0.000 n=10) DiffStack/8_x_8.2_kB-10 3.475k ± 0% 1.036k ± 0% -70.19% (p=0.000 n=10) DiffStack/16_x_8.2_kB-10 10.677k ± 0% 2.239k ± 0% -79.03% (p=0.000 n=10) DiffStack/32_x_8.2_kB-10 35.357k ± 0% 5.414k ± 0% -84.69% (p=0.000 n=10) DiffStack/48_x_8.2_kB-10 72.782k ± 0% 9.296k ± 0% -87.23% (p=0.000 n=10) DiffStack/64_x_8.2_kB-10 119.24k ± 0% 14.26k ± 0% -88.04% (p=0.000 n=10) DiffStack/1_x_33_kB-10 309.0 ± 0% 182.0 ± 0% -41.10% (p=0.000 n=10) DiffStack/2_x_33_kB-10 594.0 ± 0% 296.0 ± 0% -50.17% (p=0.000 n=10) DiffStack/4_x_33_kB-10 1324.5 ± 0% 528.0 ± 0% -60.14% (p=0.000 n=10) DiffStack/8_x_33_kB-10 3.554k ± 0% 1.047k ± 0% -70.54% (p=0.000 n=10) DiffStack/16_x_33_kB-10 10.511k ± 0% 2.232k ± 0% -78.77% (p=0.000 n=10) DiffStack/32_x_33_kB-10 35.147k ± 0% 5.194k ± 0% -85.22% (p=0.000 n=10) DiffStack/48_x_33_kB-10 66.519k ± 0% 8.958k ± 0% -86.53% (p=0.000 n=10) DiffStack/64_x_33_kB-10 110.71k ± 0% 13.28k ± 0% -88.00% (p=0.000 n=10) DiffStack/2_x_131_kB-10 644.0 ± 0% 296.0 ± 0% -54.04% (p=0.000 n=10) DiffStack/4_x_131_kB-10 1418.5 ± 0% 535.0 ± 0% -62.28% (p=0.000 n=10) DiffStack/8_x_131_kB-10 3.497k ± 0% 1.047k ± 0% -70.06% (p=0.000 n=10) DiffStack/16_x_131_kB-10 9.805k ± 0% 2.182k ± 0% -77.75% (p=0.000 n=10) DiffStack/32_x_131_kB-10 30.996k ± 0% 5.040k ± 0% -83.74% (p=0.000 n=10) DiffStack/48_x_131_kB-10 63.751k ± 0% 8.656k ± 0% -86.42% (p=0.000 n=10) DiffStack/64_x_131_kB-10 107.97k ± 0% 13.03k ± 0% -87.93% (p=0.000 n=10) DiffStack/1_x_524_kB-10 356.0 ± 0% 186.0 ± 0% -47.75% (p=0.000 n=10) DiffStack/2_x_524_kB-10 671.0 ± 0% 300.0 ± 0% -55.29% (p=0.000 n=10) DiffStack/4_x_524_kB-10 1467.5 ± 0% 536.0 ± 0% -63.48% (p=0.000 n=10) DiffStack/8_x_524_kB-10 3.553k ± 0% 1.038k ± 0% -70.80% (p=0.000 n=10) DiffStack/16_x_524_kB-10 9.971k ± 0% 2.182k ± 0% -78.12% (p=0.000 n=10) DiffStackRecorded/two-large-checkpoints.json-10 489.16k ± 0% 73.65k ± 0% -84.94% (p=0.000 n=10) DiffStackRecorded/checkpoints.json-10 7236.9k ± 0% 857.8k ± 0% -88.15% (p=0.000 n=10) geomean 7.989k 1.934k -75.79% ``` |
|
Pat Gavlin | 2c1c4e6ce1 |
[snapshot] Pool checkpoint buffers
Pool the buffers used for marshaling checkpoints. The pooling works by returning the last saved checkpoint's buffer to the diff state when a new checkpoint is saved. If a pooled buffer is available, it is reused when a checkpoint is marshaled. With our current usage patterns, this will cycle through two buffers. Starting from a fresh diff state: - The first call to MarshalDeployment will create a new buffer B1 - The first call to Saved will put B1 into lastSavedDeployment - The second call to MarshalDeployment will create a new buffer B2 - The second call to Saved will put B1 into the pool and B2 into lastSavedDeployment - The third call to MarshalDeployment will get B1 from the pool - The third call to Saved will put B2 into the pool and B1 into lastSavedDeployment These changes reduce CPU time and allocation volume by a geomean of 6% and 27%, respectively. Benchmark results and analysis: httpstate ❯ go test -count=10 -run none -benchmem -bench . | tee buffer-pool.txt httpstate ❯ benchstat base.txt buffer-pool.txt >stat.txt ``` │ base.txt │ buffer-pool.txt │ │ sec/op │ sec/op vs base │ DiffStack/1_x_2_B-10 46.30µ ± 1% 43.17µ ± 0% -6.74% (p=0.000 n=10) DiffStack/2_x_2_B-10 82.68µ ± 1% 80.07µ ± 0% -3.16% (p=0.000 n=10) DiffStack/4_x_2_B-10 191.0µ ± 1% 175.3µ ± 1% -8.22% (p=0.000 n=10) DiffStack/8_x_2_B-10 499.7µ ± 0% 470.6µ ± 1% -5.83% (p=0.000 n=10) DiffStack/16_x_2_B-10 1.489m ± 0% 1.400m ± 1% -5.92% (p=0.000 n=10) DiffStack/32_x_2_B-10 4.895m ± 1% 4.540m ± 0% -7.25% (p=0.000 n=10) DiffStack/48_x_2_B-10 9.651m ± 1% 8.538m ± 1% -11.53% (p=0.000 n=10) DiffStack/64_x_2_B-10 15.11m ± 0% 13.82m ± 0% -8.56% (p=0.000 n=10) DiffStack/1_x_8.2_kB-10 103.3µ ± 1% 123.9µ ± 1% +19.93% (p=0.000 n=10) DiffStack/2_x_8.2_kB-10 308.8µ ± 0% 317.1µ ± 1% +2.70% (p=0.000 n=10) DiffStack/4_x_8.2_kB-10 899.2µ ± 0% 835.6µ ± 0% -7.07% (p=0.000 n=10) DiffStack/8_x_8.2_kB-10 2.989m ± 1% 2.757m ± 1% -7.76% (p=0.000 n=10) DiffStack/16_x_8.2_kB-10 10.528m ± 0% 9.305m ± 1% -11.61% (p=0.000 n=10) DiffStack/32_x_8.2_kB-10 36.27m ± 1% 30.55m ± 1% -15.77% (p=0.000 n=10) DiffStack/48_x_8.2_kB-10 72.53m ± 0% 69.05m ± 0% -4.80% (p=0.000 n=10) DiffStack/64_x_8.2_kB-10 125.5m ± 0% 113.5m ± 0% -9.58% (p=0.000 n=10) DiffStack/1_x_33_kB-10 317.4µ ± 1% 314.2µ ± 0% -1.01% (p=0.001 n=10) DiffStack/2_x_33_kB-10 756.8µ ± 1% 797.3µ ± 1% +5.35% (p=0.000 n=10) DiffStack/4_x_33_kB-10 2.605m ± 0% 2.371m ± 0% -8.99% (p=0.000 n=10) DiffStack/8_x_33_kB-10 9.241m ± 2% 8.342m ± 0% -9.73% (p=0.000 n=10) DiffStack/16_x_33_kB-10 32.86m ± 1% 27.11m ± 1% -17.50% (p=0.000 n=10) DiffStack/32_x_33_kB-10 110.2m ± 2% 101.3m ± 1% -8.01% (p=0.000 n=10) DiffStack/48_x_33_kB-10 231.3m ± 0% 202.1m ± 1% -12.64% (p=0.000 n=10) DiffStack/64_x_33_kB-10 383.8m ± 1% 333.4m ± 1% -13.14% (p=0.000 n=10) DiffStack/2_x_131_kB-10 2.748m ± 1% 2.678m ± 0% -2.52% (p=0.000 n=10) DiffStack/4_x_131_kB-10 8.609m ± 0% 8.278m ± 0% -3.85% (p=0.000 n=10) DiffStack/8_x_131_kB-10 28.44m ± 0% 25.46m ± 0% -10.49% (p=0.000 n=10) DiffStack/16_x_131_kB-10 96.98m ± 1% 88.22m ± 0% -9.03% (p=0.000 n=10) DiffStack/32_x_131_kB-10 349.4m ± 1% 315.3m ± 0% -9.74% (p=0.000 n=10) DiffStack/48_x_131_kB-10 761.7m ± 0% 677.9m ± 1% -11.00% (p=0.000 n=10) DiffStack/64_x_131_kB-10 1.312 ± 1% 1.195 ± 0% -8.90% (p=0.000 n=10) DiffStack/1_x_524_kB-10 3.238m ± 1% 3.213m ± 0% -0.78% (p=0.000 n=10) DiffStack/2_x_524_kB-10 9.867m ± 0% 9.613m ± 0% -2.58% (p=0.000 n=10) DiffStack/4_x_524_kB-10 29.65m ± 0% 29.11m ± 0% -1.83% (p=0.000 n=10) DiffStack/8_x_524_kB-10 98.91m ± 1% 92.23m ± 0% -6.76% (p=0.000 n=10) DiffStack/16_x_524_kB-10 348.1m ± 1% 322.5m ± 1% -7.34% (p=0.000 n=10) DiffStackRecorded/two-large-checkpoints.json-10 46.62m ± 0% 46.42m ± 1% -0.42% (p=0.004 n=10) DiffStackRecorded/checkpoints.json-10 835.8m ± 0% 809.5m ± 0% -3.15% (p=0.000 n=10) geomean 11.15m 10.44m -6.39% │ base.txt │ buffer-pool.txt │ │ ratio │ ratio vs base │ DiffStack/1_x_2_B-10 789.5m ± 0% 700.9m ± 0% -11.22% (p=0.000 n=10) DiffStack/2_x_2_B-10 1.034 ± 0% 1.030 ± 0% -0.39% (p=0.000 n=10) DiffStack/4_x_2_B-10 1.676 ± 0% 1.608 ± 0% -4.06% (p=0.000 n=10) DiffStack/8_x_2_B-10 2.883 ± 0% 2.879 ± 0% -0.14% (p=0.000 n=10) DiffStack/16_x_2_B-10 5.270 ± 0% 5.268 ± 0% -0.04% (p=0.000 n=10) DiffStack/32_x_2_B-10 10.20 ± 0% 10.03 ± 0% -1.67% (p=0.000 n=10) DiffStack/48_x_2_B-10 14.24 ± 0% 13.39 ± 0% -5.97% (p=0.000 n=10) DiffStack/64_x_2_B-10 17.51 ± 0% 17.34 ± 0% -0.97% (p=0.000 n=10) DiffStack/1_x_8.2_kB-10 950.9m ± 0% 1383.0m ± 0% +45.44% (p=0.000 n=10) DiffStack/2_x_8.2_kB-10 1.716 ± 0% 1.900 ± 0% +10.72% (p=0.000 n=10) DiffStack/4_x_8.2_kB-10 2.792 ± 0% 2.792 ± 0% ~ (p=1.000 n=10) ¹ DiffStack/8_x_8.2_kB-10 5.350 ± 0% 5.516 ± 0% +3.10% (p=0.000 n=10) DiffStack/16_x_8.2_kB-10 10.62 ± 0% 10.60 ± 0% -0.19% (p=0.000 n=10) DiffStack/32_x_8.2_kB-10 20.01 ± 0% 19.10 ± 0% -4.55% (p=0.000 n=10) DiffStack/48_x_8.2_kB-10 27.48 ± 0% 30.24 ± 0% +10.04% (p=0.000 n=10) DiffStack/64_x_8.2_kB-10 36.97 ± 0% 38.22 ± 0% +3.38% (p=0.000 n=10) DiffStack/1_x_33_kB-10 1.467 ± 0% 1.467 ± 0% ~ (p=1.000 n=10) ¹ DiffStack/2_x_33_kB-10 1.581 ± 0% 1.777 ± 0% +12.40% (p=0.000 n=10) DiffStack/4_x_33_kB-10 2.967 ± 0% 2.967 ± 0% ~ (p=1.000 n=10) ¹ DiffStack/8_x_33_kB-10 5.766 ± 0% 5.809 ± 0% +0.75% (p=0.000 n=10) DiffStack/16_x_33_kB-10 10.87 ± 0% 10.05 ± 0% -7.54% (p=0.000 n=10) DiffStack/32_x_33_kB-10 19.00 ± 0% 20.13 ± 0% +5.95% (p=0.000 n=10) DiffStack/48_x_33_kB-10 27.14 ± 0% 27.18 ± 0% +0.15% (p=0.000 n=10) DiffStack/64_x_33_kB-10 34.39 ± 0% 33.97 ± 0% -1.22% (p=0.000 n=10) DiffStack/2_x_131_kB-10 1.993 ± 0% 1.993 ± 0% ~ (p=1.000 n=10) ¹ DiffStack/4_x_131_kB-10 3.173 ± 0% 3.263 ± 0% +2.84% (p=0.000 n=10) DiffStack/8_x_131_kB-10 5.334 ± 0% 5.291 ± 0% -0.81% (p=0.000 n=10) DiffStack/16_x_131_kB-10 9.296 ± 0% 9.423 ± 0% +1.37% (p=0.000 n=10) DiffStack/32_x_131_kB-10 17.10 ± 0% 17.21 ± 0% +0.64% (p=0.000 n=10) DiffStack/48_x_131_kB-10 25.25 ± 0% 25.06 ± 0% -0.75% (p=0.000 n=10) DiffStack/64_x_131_kB-10 33.13 ± 0% 33.46 ± 0% +1.00% (p=0.000 n=10) DiffStack/1_x_524_kB-10 1.498 ± 0% 1.498 ± 0% ~ (p=1.000 n=10) ¹ DiffStack/2_x_524_kB-10 1.998 ± 0% 1.998 ± 0% ~ (p=1.000 n=10) ¹ DiffStack/4_x_524_kB-10 2.998 ± 0% 3.089 ± 0% +3.04% (p=0.000 n=10) DiffStack/8_x_524_kB-10 5.084 ± 0% 5.084 ± 0% ~ (p=1.000 n=10) ¹ DiffStack/16_x_524_kB-10 9.079 ± 0% 9.058 ± 0% -0.23% (p=0.000 n=10) DiffStackRecorded/two-large-checkpoints.json-10 1.997 ± 0% 1.997 ± 0% ~ (p=1.000 n=10) ¹ DiffStackRecorded/checkpoints.json-10 36.60 ± 0% 36.60 ± 0% ~ (p=1.000 n=10) ¹ geomean 5.961 6.039 +1.31% ¹ all samples are equal │ base.txt │ buffer-pool.txt │ │ B/op │ B/op vs base │ DiffStack/1_x_2_B-10 35.17Ki ± 0% 29.56Ki ± 0% -15.97% (p=0.000 n=10) DiffStack/2_x_2_B-10 70.05Ki ± 0% 61.61Ki ± 0% -12.04% (p=0.000 n=10) DiffStack/4_x_2_B-10 186.8Ki ± 0% 149.9Ki ± 0% -19.75% (p=0.000 n=10) DiffStack/8_x_2_B-10 529.0Ki ± 0% 432.0Ki ± 0% -18.33% (p=0.000 n=10) DiffStack/16_x_2_B-10 1.768Mi ± 0% 1.392Mi ± 0% -21.28% (p=0.000 n=10) DiffStack/32_x_2_B-10 6.513Mi ± 0% 4.986Mi ± 0% -23.45% (p=0.000 n=10) DiffStack/48_x_2_B-10 14.054Mi ± 0% 9.885Mi ± 0% -29.66% (p=0.000 n=10) DiffStack/64_x_2_B-10 22.39Mi ± 0% 16.84Mi ± 0% -24.79% (p=0.000 n=10) DiffStack/1_x_8.2_kB-10 154.7Ki ± 0% 202.4Ki ± 0% +30.89% (p=0.000 n=10) DiffStack/2_x_8.2_kB-10 571.9Ki ± 0% 540.8Ki ± 0% -5.43% (p=0.000 n=10) DiffStack/4_x_8.2_kB-10 1.846Mi ± 0% 1.430Mi ± 0% -22.52% (p=0.000 n=10) DiffStack/8_x_8.2_kB-10 6.920Mi ± 0% 4.809Mi ± 0% -30.51% (p=0.000 n=10) DiffStack/16_x_8.2_kB-10 26.50Mi ± 0% 16.34Mi ± 0% -38.35% (p=0.000 n=10) DiffStack/32_x_8.2_kB-10 98.33Mi ± 0% 55.24Mi ± 0% -43.82% (p=0.000 n=10) DiffStack/48_x_8.2_kB-10 209.4Mi ± 0% 127.2Mi ± 0% -39.23% (p=0.000 n=10) DiffStack/64_x_8.2_kB-10 365.6Mi ± 0% 211.2Mi ± 0% -42.23% (p=0.000 n=10) DiffStack/1_x_33_kB-10 808.7Ki ± 0% 764.2Ki ± 0% -5.50% (p=0.000 n=10) DiffStack/2_x_33_kB-10 2.013Mi ± 0% 1.992Mi ± 0% -1.03% (p=0.000 n=10) DiffStack/4_x_33_kB-10 7.551Mi ± 0% 5.764Mi ± 0% -23.67% (p=0.000 n=10) DiffStack/8_x_33_kB-10 28.58Mi ± 0% 18.90Mi ± 0% -33.87% (p=0.000 n=10) DiffStack/16_x_33_kB-10 104.40Mi ± 0% 59.42Mi ± 0% -43.08% (p=0.000 n=10) DiffStack/32_x_33_kB-10 365.5Mi ± 0% 219.9Mi ± 0% -39.82% (p=0.000 n=10) DiffStack/48_x_33_kB-10 801.1Mi ± 0% 438.7Mi ± 0% -45.24% (p=0.000 n=10) DiffStack/64_x_33_kB-10 1314.3Mi ± 0% 718.3Mi ± 0% -45.35% (p=0.000 n=10) DiffStack/2_x_131_kB-10 9.179Mi ± 0% 8.063Mi ± 0% -12.16% (p=0.000 n=10) DiffStack/4_x_131_kB-10 29.14Mi ± 0% 22.68Mi ± 0% -22.18% (p=0.000 n=10) DiffStack/8_x_131_kB-10 98.77Mi ± 0% 65.16Mi ± 0% -34.03% (p=0.000 n=10) DiffStack/16_x_131_kB-10 337.1Mi ± 0% 207.8Mi ± 0% -38.36% (p=0.000 n=10) DiffStack/32_x_131_kB-10 1234.6Mi ± 0% 705.3Mi ± 0% -42.87% (p=0.000 n=10) DiffStack/48_x_131_kB-10 2.771Gi ± 0% 1.468Gi ± 0% -47.03% (p=0.000 n=10) DiffStack/64_x_131_kB-10 4.606Gi ± 0% 2.553Gi ± 0% -44.56% (p=0.000 n=10) DiffStack/1_x_524_kB-10 12.41Mi ± 1% 11.85Mi ± 1% -4.50% (p=0.000 n=10) DiffStack/2_x_524_kB-10 37.01Mi ± 1% 32.79Mi ± 1% -11.41% (p=0.000 n=10) DiffStack/4_x_524_kB-10 110.56Mi ± 0% 89.08Mi ± 1% -19.43% (p=0.000 n=10) DiffStack/8_x_524_kB-10 367.3Mi ± 1% 254.3Mi ± 1% -30.76% (p=0.000 n=10) DiffStack/16_x_524_kB-10 1291.7Mi ± 0% 801.6Mi ± 0% -37.95% (p=0.000 n=10) DiffStackRecorded/two-large-checkpoints.json-10 69.25Mi ± 0% 69.25Mi ± 0% ~ (p=0.165 n=10) DiffStackRecorded/checkpoints.json-10 1226.7Mi ± 0% 914.2Mi ± 0% -25.47% (p=0.000 n=10) geomean 26.14Mi 19.06Mi -27.07% │ base.txt │ buffer-pool.txt │ │ allocs/op │ allocs/op vs base │ DiffStack/1_x_2_B-10 361.0 ± 0% 326.0 ± 0% -9.70% (p=0.000 n=10) DiffStack/2_x_2_B-10 649.0 ± 0% 621.0 ± 0% -4.31% (p=0.000 n=10) DiffStack/4_x_2_B-10 1.512k ± 0% 1.399k ± 0% -7.47% (p=0.000 n=10) DiffStack/8_x_2_B-10 4.141k ± 0% 4.006k ± 0% -3.25% (p=0.000 n=10) DiffStack/16_x_2_B-10 13.09k ± 0% 12.73k ± 0% -2.72% (p=0.000 n=10) DiffStack/32_x_2_B-10 46.38k ± 0% 44.88k ± 0% -3.25% (p=0.000 n=10) DiffStack/48_x_2_B-10 94.38k ± 0% 87.94k ± 0% -6.82% (p=0.000 n=10) DiffStack/64_x_2_B-10 152.7k ± 0% 149.3k ± 0% -2.18% (p=0.000 n=10) DiffStack/1_x_8.2_kB-10 323.0 ± 0% 335.0 ± 0% +3.72% (p=0.000 n=10) DiffStack/2_x_8.2_kB-10 630.0 ± 0% 613.0 ± 0% -2.70% (p=0.000 n=10) DiffStack/4_x_8.2_kB-10 1.354k ± 0% 1.279k ± 0% -5.54% (p=0.000 n=10) DiffStack/8_x_8.2_kB-10 3.606k ± 0% 3.490k ± 0% -3.22% (p=0.000 n=10) DiffStack/16_x_8.2_kB-10 11.16k ± 0% 10.71k ± 0% -4.11% (p=0.000 n=10) DiffStack/32_x_8.2_kB-10 36.45k ± 0% 34.06k ± 0% -6.54% (p=0.000 n=10) DiffStack/48_x_8.2_kB-10 71.55k ± 0% 76.00k ± 0% +6.22% (p=0.000 n=10) DiffStack/64_x_8.2_kB-10 123.9k ± 0% 125.2k ± 0% +1.07% (p=0.000 n=10) DiffStack/1_x_33_kB-10 346.0 ± 0% 329.0 ± 0% -4.91% (p=0.000 n=10) DiffStack/2_x_33_kB-10 607.0 ± 0% 594.0 ± 0% -2.14% (p=0.000 n=10) DiffStack/4_x_33_kB-10 1.396k ± 0% 1.310k ± 0% -6.16% (p=0.000 n=10) DiffStack/8_x_33_kB-10 3.764k ± 0% 3.564k ± 0% -5.30% (p=0.000 n=10) DiffStack/16_x_33_kB-10 11.26k ± 0% 10.15k ± 0% -9.88% (p=0.000 n=10) DiffStack/32_x_33_kB-10 34.55k ± 0% 34.91k ± 0% +1.03% (p=0.000 n=10) DiffStack/48_x_33_kB-10 69.72k ± 0% 67.76k ± 0% -2.82% (p=0.000 n=10) DiffStack/64_x_33_kB-10 114.1k ± 0% 110.1k ± 0% -3.46% (p=0.000 n=10) DiffStack/2_x_131_kB-10 678.0 ± 0% 643.0 ± 0% -5.16% (p=0.000 n=10) DiffStack/4_x_131_kB-10 1.494k ± 0% 1.419k ± 0% -4.99% (p=0.000 n=10) DiffStack/8_x_131_kB-10 3.737k ± 0% 3.489k ± 0% -6.64% (p=0.000 n=10) DiffStack/16_x_131_kB-10 10.400k ± 0% 9.917k ± 0% -4.64% (p=0.000 n=10) DiffStack/32_x_131_kB-10 32.24k ± 0% 31.08k ± 0% -3.59% (p=0.000 n=10) DiffStack/48_x_131_kB-10 66.12k ± 0% 63.62k ± 0% -3.79% (p=0.000 n=10) DiffStack/64_x_131_kB-10 110.9k ± 0% 109.1k ± 0% -1.67% (p=0.000 n=10) DiffStack/1_x_524_kB-10 374.0 ± 1% 356.0 ± 0% -4.81% (p=0.000 n=10) DiffStack/2_x_524_kB-10 707.0 ± 0% 668.0 ± 0% -5.52% (p=0.000 n=10) DiffStack/4_x_524_kB-10 1.528k ± 0% 1.460k ± 1% -4.48% (p=0.000 n=10) DiffStack/8_x_524_kB-10 3.797k ± 1% 3.571k ± 0% -5.95% (p=0.000 n=10) DiffStack/16_x_524_kB-10 10.562k ± 1% 9.966k ± 0% -5.65% (p=0.000 n=10) DiffStackRecorded/two-large-checkpoints.json-10 512.1k ± 0% 512.1k ± 0% ~ (p=0.222 n=10) DiffStackRecorded/checkpoints.json-10 7.240M ± 0% 7.237M ± 0% -0.03% (p=0.000 n=10) geomean 8.309k 7.996k -3.77% ``` |
|
Kyle Dixler |
d9ae0045ed
|
Enable display of backend messages during updates
Augments UpdateProgramResponse to add a field named messages that contains a list of messages to show to the user of the format: { message: string, severity: "error" | "warning" | "info" } Messages are printed during an update above the permalink in the case of the http backend. |
|
bors[bot] |
f7c940e7c2
|
Merge #11974
11974: Add --teams flag to assign team name to stack. r=RobbieMcKinstry a=RobbieMcKinstry <!--- Thanks so much for your contribution! If this is your first time contributing, please ensure that you have read the [CONTRIBUTING](https://github.com/pulumi/pulumi/blob/master/CONTRIBUTING.md) documentation. --> # Description This PR adds a --teams flag to `pulumi stack init` which accepts a string. This flag can be provided multiple times. Each team that is provided is assigned read/write permissions on the stack after it has been initialized. <!--- Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. --> Fixes #10784 ## Checklist <!--- Please provide details if the checkbox below is to be left unchecked. --> - [x] I have added tests that prove my fix is effective or that my feature works <!--- User-facing changes require a CHANGELOG entry. --> - [x] I have run `make changelog` and committed the `changelog/pending/<file>` documenting my change <!-- If the change(s) in this PR is a modification of an existing call to the Pulumi Service, then the service should honor older versions of the CLI where this change would not exist. You must then bump the API version in /pkg/backend/httpstate/client/api.go, as well as add it to the service. --> - [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version <!-- `@Pulumi` employees: If yes, you must submit corresponding changes in the service repo. --> Co-authored-by: Robbie McKinstry <robbie@pulumi.com> Co-authored-by: Robbie McKinstry <thesnowmancometh@gmail.com> Co-authored-by: Abhinav Gupta <abhinav@pulumi.com> |
|
Abhinav Gupta |
acda1e3b13
|
all: Fix revive issues
Fixes the following issues found by revive included in the latest release of golangci-lint. Full list of issues: **pkg** ``` backend/display/object_diff.go:47:10: superfluous-else: if block ends with a break statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) (revive) backend/display/object_diff.go:716:12: redefines-builtin-id: redefinition of the built-in function delete (revive) backend/display/object_diff.go:742:14: redefines-builtin-id: redefinition of the built-in function delete (revive) backend/display/object_diff.go:983:10: superfluous-else: if block ends with a continue statement, so drop this else and outdent its block (revive) backend/httpstate/backend.go:1814:4: redefines-builtin-id: redefinition of the built-in function cap (revive) backend/httpstate/backend.go:1824:5: redefines-builtin-id: redefinition of the built-in function cap (revive) backend/httpstate/client/client.go:444:2: if-return: redundant if ...; err != nil check, just return error instead. (revive) backend/httpstate/client/client.go:455:2: if-return: redundant if ...; err != nil check, just return error instead. (revive) cmd/pulumi/org.go:113:4: if-return: redundant if ...; err != nil check, just return error instead. (revive) cmd/pulumi/util.go:216:2: if-return: redundant if ...; err != nil check, just return error instead. (revive) codegen/docs/gen.go:428:2: redefines-builtin-id: redefinition of the built-in function copy (revive) codegen/hcl2/model/expression.go:2151:5: redefines-builtin-id: redefinition of the built-in function close (revive) codegen/hcl2/syntax/comments.go:151:2: redefines-builtin-id: redefinition of the built-in function close (revive) codegen/hcl2/syntax/comments.go:329:3: redefines-builtin-id: redefinition of the built-in function close (revive) codegen/hcl2/syntax/comments.go:381:5: redefines-builtin-id: redefinition of the built-in function close (revive) codegen/nodejs/gen.go:1367:5: redefines-builtin-id: redefinition of the built-in function copy (revive) codegen/python/gen_program_expressions.go:136:2: redefines-builtin-id: redefinition of the built-in function close (revive) codegen/python/gen_program_expressions.go:142:3: redefines-builtin-id: redefinition of the built-in function close (revive) codegen/report/report.go:126:6: redefines-builtin-id: redefinition of the built-in function panic (revive) codegen/schema/docs_test.go:210:10: superfluous-else: if block ends with a continue statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) (revive) codegen/schema/schema.go:790:2: redefines-builtin-id: redefinition of the built-in type any (revive) codegen/schema/schema.go:793:4: redefines-builtin-id: redefinition of the built-in type any (revive) resource/deploy/plan.go:506:2: if-return: redundant if ...; err != nil check, just return error instead. (revive) resource/deploy/snapshot_test.go:59:3: redefines-builtin-id: redefinition of the built-in function copy (revive) resource/deploy/state_builder.go:108:2: redefines-builtin-id: redefinition of the built-in function copy (revive) ``` **sdk** ``` go/common/resource/plugin/context.go:142:2: redefines-builtin-id: redefinition of the built-in function copy (revive) go/common/resource/plugin/plugin.go:142:12: superfluous-else: if block ends with a break statement, so drop this else and outdent its block (revive) go/common/resource/properties_diff.go:114:2: redefines-builtin-id: redefinition of the built-in function len (revive) go/common/resource/properties_diff.go:117:4: redefines-builtin-id: redefinition of the built-in function len (revive) go/common/resource/properties_diff.go:122:4: redefines-builtin-id: redefinition of the built-in function len (revive) go/common/resource/properties_diff.go:127:4: redefines-builtin-id: redefinition of the built-in function len (revive) go/common/resource/properties_diff.go:132:4: redefines-builtin-id: redefinition of the built-in function len (revive) go/common/util/deepcopy/copy.go:30:1: redefines-builtin-id: redefinition of the built-in function copy (revive) go/common/workspace/creds.go:242:2: if-return: redundant if ...; err != nil check, just return error instead. (revive) go/pulumi-language-go/main.go:569:2: if-return: redundant if ...; err != nil check, just return error instead. (revive) go/pulumi-language-go/main.go:706:2: if-return: redundant if ...; err != nil check, just return error instead. (revive) go/pulumi/run_test.go:925:2: redefines-builtin-id: redefinition of the built-in type any (revive) go/pulumi/run_test.go:933:3: redefines-builtin-id: redefinition of the built-in type any (revive) nodejs/cmd/pulumi-language-nodejs/main.go:778:2: if-return: redundant if ...; err != nil check, just return error instead. (revive) python/cmd/pulumi-language-python/main.go:1011:2: if-return: redundant if ...; err != nil check, just return error instead. (revive) python/cmd/pulumi-language-python/main.go:863:2: if-return: redundant if ...; err != nil check, just return error instead. (revive) python/python.go:230:2: redefines-builtin-id: redefinition of the built-in function print (revive) ``` **tests** ``` integration/integration_util_test.go:282:11: superfluous-else: if block ends with a continue statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) (revive) ``` |
|
Robbie McKinstry |
e7fcceffae
|
Add --teams flag to assign team name to stack.
This PR adds a --teams flag to `pulumi stack init` which accepts a string. This flag can be provided multiple times. Each team that is provided is assigned read/write permissions on the stack after it has been initialized. |
|
Abhinav Gupta |
7aa5b77a0c
|
all: Reformat with gofumpt
Per team discussion, switching to gofumpt. [gofumpt][1] is an alternative, stricter alternative to gofmt. It addresses other stylistic concerns that gofmt doesn't yet cover. [1]: https://github.com/mvdan/gofumpt See the full list of [Added rules][2], but it includes: - Dropping empty lines around function bodies - Dropping unnecessary variable grouping when there's only one variable - Ensuring an empty line between multi-line functions - simplification (`-s` in gofmt) is always enabled - Ensuring multi-line function signatures end with `) {` on a separate line. [2]: https://github.com/mvdan/gofumpt#Added-rules gofumpt is stricter, but there's no lock-in. All gofumpt output is valid gofmt output, so if we decide we don't like it, it's easy to switch back without any code changes. gofumpt support is built into the tooling we use for development so this won't change development workflows. - golangci-lint includes a gofumpt check (enabled in this PR) - gopls, the LSP for Go, includes a gofumpt option (see [installation instrutions][3]) [3]: https://github.com/mvdan/gofumpt#installation This change was generated by running: ```bash gofumpt -w $(rg --files -g '*.go' | rg -v testdata | rg -v compilation_error) ``` The following files were manually tweaked afterwards: - pkg/cmd/pulumi/stack_change_secrets_provider.go: one of the lines overflowed and had comments in an inconvenient place - pkg/cmd/pulumi/destroy.go: `var x T = y` where `T` wasn't necessary - pkg/cmd/pulumi/policy_new.go: long line because of error message - pkg/backend/snapshot_test.go: long line trying to assign three variables in the same assignment I have included mention of gofumpt in the CONTRIBUTING.md. |
|
Pat Gavlin | c939f42d6b | lint | |
Pat Gavlin | 8bbdce608f |
[cli] Fetch update tokens in the API client
Rather than fetching update tokens in consumers of the API client, fetch them in the API client itself. This minimizes the latency between the retrieval of the token and the validation of the token by the Pulumi Service. This is intended to help prevent the use of expired tokens. Part of #7094. |
|
Abhinav Gupta |
fff7e0bc4b
|
pkg/backend: Prefer contract.Assertf over Assert
Incremental step towards #12132 Migrates uses of contract.{Assert, AssertNoError, Require} in pkg/engine to `*f` variants so that we're required to provide more error context. Refs #12132 |
|
Fraser Waters | 7d53b479ed |
Add `--insecure` flag to `pulumi login`
Add `--insecure` flag to `pulumi login` which disables https certificate checks |
|
Abhinav Gupta |
1158d4acee
|
all: Drop ioutil
Stop using io/ioutil across the entire repository. The io/ioutil package was deprecated in Go 1.16 (2021-02) with replacements provided in other packages. Specifically: ioutil.Discard => io.Discard ioutil.NopCloser => io.NopCloser ioutil.ReadAll => io.ReadAll ioutil.ReadFile => os.ReadFile ioutil.TempDir => os.MkdirTemp ioutil.TempFile => os.CreateTemp ioutil.WriteFile => os.WriteFile This change switches all of these entities across the repository. Following this change, the only references to ioutil are in schema files: % rg -l ioutil pkg/codegen/testing/test/testdata/aws-4.26.0.json pkg/codegen/testing/test/testdata/aws-4.36.0.json pkg/codegen/testing/test/testdata/aws-4.37.1.json pkg/codegen/testing/test/testdata/aws-5.4.0.json pkg/codegen/testing/test/testdata/aws-5.16.2.json The bulk of this change was generated automatically with manual touch ups afterwards. |
|
Abhinav Gupta | 0bff0b8716 |
sdk/go: Remove 'nolint' directives from package docs
Go treats comments that match the following regex as directives.
//[a-z0-9]+:[a-z0-9]
Comments that are directives don't show in an entity's documentation.
|
|
Anton Tayanovskyy | 45681576f7 | Lint | |
Anton Tayanovskyy | 44934929d7 | Feedback | |
Anton Tayanovskyy |
7897d349a6
|
Update pkg/backend/httpstate/client/marshal.go
Co-authored-by: Robbie McKinstry <thesnowmancometh@gmail.com> |
|
Anton Tayanovskyy | 6061b4718e | Reduce memory use for PULUMI_OPTIMIZED_CHECKPOINT_PATCH | |
Anton Tayanovskyy | 1e4aa31cf0 | Satisfy lint | |
Anton Tayanovskyy | 61ae4e8e1d | Address PR feedback | |
Anton Tayanovskyy | d3277e6a5c | Add DisableCapabilityProbing | |
Anton Tayanovskyy | 477995101e | Add client unit test | |
Anton Tayanovskyy | 2461748c79 | Add GetCapabilities func to client | |
Justin Van Patten | 967dbaf1b0 | [cli] Experimental support for remote operations | |
Anton Tayanovskyy | 73888c2908 | Support PULUMI_OPTIMIZED_CHECKPOINT_PATCH protocol | |
Anton Tayanovskyy | dedcd07457 | Lint | |
Anton Tayanovskyy | e5dcec701c |
Ensure request parsing is included in HTTP client trace spans
(cherry picked from commit 214c385abd85557b5ff00cd1b53ca63b4777d1ce) |