-
Notifications
You must be signed in to change notification settings - Fork 368
Add idempotent droplet creation #4650
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
add idempotent droplet creation via build lock + find-or-create: - lock build: SELECT * FROM builds WHERE id = $1 FOR UPDATE LIMIT 1; - if there exists already a droplet, take that one and ensure buildpack_lifecycle_data is attached (but don’t overwrite)
… attached before returning
644755a to
47e6661
Compare
jochenehret
previously approved these changes
Nov 20, 2025
Contributor
jochenehret
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good, just one question regarding logging.
jochenehret
previously approved these changes
Nov 25, 2025
d1cdfce to
c96da93
Compare
jochenehret
approved these changes
Nov 26, 2025
ari-wg-gitbot
added a commit
to cloudfoundry/capi-release
that referenced
this pull request
Nov 27, 2025
Changes in cloud_controller_ng:
- build(deps): bump golang.org/x/crypto
PR: cloudfoundry/cloud_controller_ng#4667
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
- Properly shut down Concurrent::TimerTasks when Puma is stopped
PR: cloudfoundry/cloud_controller_ng#4681
Author: Jochen Ehret <jochen.ehret@sap.com>
- Add idempotent droplet creation
PR: cloudfoundry/cloud_controller_ng#4650
Author: Katharina Przybill <30441792+kathap@users.noreply.github.com>
- Remove unneeded "json_pure" Gem
PR: cloudfoundry/cloud_controller_ng#4677
Author: Jochen Ehret <jochen.ehret@sap.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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