Add idempotent droplet creation - #4650
Merged
Merged
Conversation
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)
kathap
marked this pull request as draft
November 7, 2025 15:37
… attached before returning
kathap
force-pushed
the
fix-hanging-staging-on-cc-uploader-kill
branch
from
November 10, 2025 11:42
644755a to
47e6661
Compare
kathap
marked this pull request as ready for review
November 14, 2025 07:59
jochenehret
previously approved these changes
Nov 20, 2025
jochenehret
left a comment
Contributor
There was a problem hiding this comment.
Looks good, just one question regarding logging.
jochenehret
previously approved these changes
Nov 25, 2025
kathap
force-pushed
the
fix-hanging-staging-on-cc-uploader-kill
branch
from
November 25, 2025 15:08
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>
sethboyles
pushed a commit
to atanas-attodorov-wq/cloud_controller_ng
that referenced
this pull request
Dec 11, 2025
Add idempotent droplet creation: - if there exists already a droplet, take that one and ensure buildpack_lifecycle_data is attached (but don’t overwrite) * add log if droplet already exists
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
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