Add idempotent droplet creation #4650
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Add idempotent droplet creation:
Thanks for contributing to cloud_controller_ng. To speed up the process of reviewing your pull request please provide us with:
A short explanation of the proposed change:
Add idempotent droplet creation. This will add one simple SQL query to check for already existing droplet:
SELECT * FROM "droplets" WHERE "build_guid" = 'abcd-1234' LIMIT 1;An explanation of the use cases your change solves
Fix hanging staging on cc-uploader kill caused by 2 created droplets with same build_guid. The Problem was if cc-uploader would run into uplaod timeout or cc-iuploader would be killed hard, then diego sees its upload request failed, diego sends a new upload reuqest to a healthy VM and with that a new droplet was created for the same build, which led to staging saving error
"diego.staging.buildpack.saving-staging-result-failed","error":"undefined method `buildpacks' for nil:NilClass","build"because completion handler tried to save the result with the first droplet guid but that droplet had no longer buildpack_lifecycle_data assigned, those were now assigned to the 2. droplet. Build and droplets remained in state STAGING forever and staging finally failed because of timeout.Links to any other associated PRs
I have reviewed the contributing guide
I have viewed, signed, and submitted the Contributor License Agreement
I have made this pull request to the
mainbranchI have run all the unit tests using
bundle exec rakeI have run CF Acceptance Tests