Skip to content

fix: handle path-keyed mount format and ignore unknown API fields (v0.4.0) - #53

Closed
WolfyChris wants to merge 1 commit into
mainfrom
fix/path-keyed-mount-compat
Closed

fix: handle path-keyed mount format and ignore unknown API fields (v0.4.0)#53
WolfyChris wants to merge 1 commit into
mainfrom
fix/path-keyed-mount-compat

Conversation

@WolfyChris

Copy link
Copy Markdown

Summary

  • Fix executor mount filtering: WorkflowDefinition.Job.Mount.location was renamed to .volume in Fuzzball's path-keyed mount format (FUZZ-6710). The executor was filtering persistent mounts by comparing container paths (map keys) against volume names — always producing an empty set. Now uses mount.volume for the lookup.
  • Tolerate unknown API fields: All generated model classes now carry @JsonIgnoreProperties(ignoreUnknown = true) so future additive API changes don't cause UnrecognizedPropertyException failures at executor startup.
  • SDK schema updated: WorkflowDefinition.Job.Mount field renamed locationvolume in fuzzball-v3.3-openapi.json to match the current API.

Root cause

The Fuzzball API changed the mount map format: old format had volume names as map keys and container paths in location; new format has container paths as map keys and volume names in volume. The executor's persistent-volume filter used the map key directly against the volumes map, which meant it compared /data against {"data": ...} — finding nothing.

Test plan

  • Build passes: ./gradlew build -PopenapiFile=code-generation/schemas/fuzzball-v3.3-openapi.json
  • Generated FuzzballApiV3WorkflowDefinitionJobMount has @JsonProperty("volume") and @JsonIgnoreProperties(ignoreUnknown = true)
  • Nextflow NF-02/NF-03 tests pass against a Fuzzball cluster running the path-keyed mount API

🤖 Generated with Claude Code

The Fuzzball API renamed WorkflowDefinition.Job.Mount.location to
.volume (FUZZ-6710) as part of the path-keyed mount format change
(FUZZ-6710). The executor was comparing container paths (map keys)
against volume names, always producing an empty persistent-volume
mount set. Fix the filter to use mount.volume for the lookup.

Add @JsonIgnoreProperties(ignoreUnknown = true) to all generated
model classes so future additive API changes don't cause Jackson
deserialization failures in the executor startup path.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 29, 2026 18:02
@WolfyChris
WolfyChris requested a review from a team as a code owner May 29, 2026 18:02
@ciq-it-service-account

ciq-it-service-account commented May 29, 2026

Copy link
Copy Markdown

Snyk checks have passed. No issues have been found so far.

Status Scan Engine Critical High Medium Low Total (0)
Open Source Security 0 0 0 0 0 issues
Licenses 0 0 0 0 0 issues
Code Security 0 0 0 0 0 issues

💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the executor and generated SDK models to match Fuzzball’s current path-keyed mount format and to make the SDK resilient to additive API changes during JSON deserialization.

Changes:

  • Fix persistent mount filtering by looking up persistent volumes using mount.volume (instead of the mounts map key).
  • Add @JsonIgnoreProperties(ignoreUnknown = true) to all generated model classes to tolerate unknown API fields.
  • Update the v3.3 OpenAPI schema and bump plugin version/changelog for the 0.4.0 release.

Reviewed changes

Copilot reviewed 5 out of 6 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
src/main/groovy/com/ciq/fuzzball/FuzzballExecutor.groovy Uses mount.volume when filtering mounts against persistent volumes (supports path-keyed mounts).
code-generation/schemas/fuzzball-v3.3-openapi.json Renames locationvolume in mount schemas to match current API (but see review comments re: stale descriptions).
code-generation/groovy-okhttp-sync/modelClass.mustache Adds @JsonIgnoreProperties(ignoreUnknown = true) to generated model classes.
code-generation/groovy-okhttp-sync/model.mustache Imports JsonIgnoreProperties for generated models.
CHANGELOG.md Adds 0.4.0 release notes describing the mount fix and unknown-field tolerance.
build.gradle Bumps plugin version to 0.4.0.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +9056 to 9059
"volume": {
"type": "string",
"description": "location specifies the destination within the container filesystem to\nmount a volume directory. This must be an absolute path."
}
Comment on lines +9246 to 9249
"volume": {
"type": "string",
"description": "location specifies the destination within the container filesystem to\nmount a volume directory. This must be an absolute path."
}
Comment on lines +9056 to 9059
"volume": {
"type": "string",
"description": "location specifies the destination within the container filesystem to\nmount a volume directory. This must be an absolute path."
}
Comment on lines +9246 to 9249
"volume": {
"type": "string",
"description": "location specifies the destination within the container filesystem to\nmount a volume directory. This must be an absolute path."
}
@wresch
wresch marked this pull request as draft May 29, 2026 18:17
@WolfyChris

Copy link
Copy Markdown
Author

Reverting for now — deferring until the v0.4.0 zip can be properly released to S3.

@WolfyChris WolfyChris closed this May 29, 2026
@WolfyChris
WolfyChris deleted the fix/path-keyed-mount-compat branch May 29, 2026 18:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants