fix: handle path-keyed mount format and ignore unknown API fields (v0.4.0) - #53
Closed
WolfyChris wants to merge 1 commit into
Closed
fix: handle path-keyed mount format and ignore unknown API fields (v0.4.0)#53WolfyChris wants to merge 1 commit into
WolfyChris wants to merge 1 commit into
Conversation
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>
✅ Snyk checks have passed. No issues have been found so far.
💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse. |
Contributor
There was a problem hiding this comment.
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 location → volume 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
marked this pull request as draft
May 29, 2026 18:17
Author
|
Reverting for now — deferring until the v0.4.0 zip can be properly released to S3. |
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.
Summary
WorkflowDefinition.Job.Mount.locationwas renamed to.volumein 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 usesmount.volumefor the lookup.@JsonIgnoreProperties(ignoreUnknown = true)so future additive API changes don't causeUnrecognizedPropertyExceptionfailures at executor startup.WorkflowDefinition.Job.Mountfield renamedlocation→volumeinfuzzball-v3.3-openapi.jsonto 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 involume. The executor's persistent-volume filter used the map key directly against the volumes map, which meant it compared/dataagainst{"data": ...}— finding nothing.Test plan
./gradlew build -PopenapiFile=code-generation/schemas/fuzzball-v3.3-openapi.jsonFuzzballApiV3WorkflowDefinitionJobMounthas@JsonProperty("volume")and@JsonIgnoreProperties(ignoreUnknown = true)🤖 Generated with Claude Code