Skip to content

Conversation

@kathap
Copy link
Contributor

@kathap kathap commented Nov 7, 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)
  • if not create a new droplet

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 main branch

  • I have run all the unit tests using bundle exec rake

  • I have run CF Acceptance Tests

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 kathap marked this pull request as draft November 7, 2025 15:37
@kathap kathap force-pushed the fix-hanging-staging-on-cc-uploader-kill branch from 644755a to 47e6661 Compare November 10, 2025 11:42
@kathap kathap marked this pull request as ready for review November 14, 2025 07:59
jochenehret
jochenehret previously approved these changes Nov 20, 2025
Copy link
Contributor

@jochenehret jochenehret left a 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
jochenehret previously approved these changes Nov 25, 2025
@kathap kathap force-pushed the fix-hanging-staging-on-cc-uploader-kill branch from d1cdfce to c96da93 Compare November 25, 2025 15:08
@kathap kathap merged commit b4a64e3 into main Nov 26, 2025
20 of 23 checks passed
@moleske moleske deleted the fix-hanging-staging-on-cc-uploader-kill branch November 27, 2025 05:53
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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants