-
Notifications
You must be signed in to change notification settings - Fork 2k
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
Prevent pruning and reaping of TaggedVersion jobs #23983
Prevent pruning and reaping of TaggedVersion jobs #23983
Conversation
5ede458
to
072d969
Compare
2c59fa7
to
81b3e44
Compare
99020fe
to
a8960b5
Compare
a8960b5
to
63caddf
Compare
Ember Test Audit comparison
|
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.
LGTM
nomad/state/state_store_test.go
Outdated
// take a little detour to test error conditions with the setup so far | ||
t.Run("errors", func(t *testing.T) { | ||
// job does not exist | ||
err := state.UpdateJobVersionTag(nextIndex(state), job.Namespace, &structs.JobApplyTagRequest{ | ||
JobID: "non-existent-job", | ||
Tag: &structs.JobTaggedVersion{Name: "tag name"}, | ||
Version: 0, | ||
}) | ||
must.ErrorContains(t, err, `job "non-existent-job" version 0 not found`) | ||
|
||
// version does not exist | ||
err = state.UpdateJobVersionTag(nextIndex(state), job.Namespace, &structs.JobApplyTagRequest{ | ||
JobID: job.ID, | ||
Tag: &structs.JobTaggedVersion{Name: "tag name"}, | ||
Version: 999, | ||
}) | ||
must.ErrorContains(t, err, fmt.Sprintf("job %q version 999 not found", job.ID)) | ||
|
||
// tag name already exists | ||
err = state.UpdateJobVersionTag(nextIndex(state), job.Namespace, &structs.JobApplyTagRequest{ | ||
JobID: job.ID, | ||
Tag: &structs.JobTaggedVersion{Name: "v0"}, | ||
Version: 3, | ||
}) | ||
must.ErrorContains(t, err, fmt.Sprintf(`"v0" already exists on a different version of job %q`, job.ID)) | ||
}) |
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.
It's hard to tell because the PRs for this feature have been running for a while now, but don't we already have test assertions for these state store methods in the PR that introduced them? Re-testing them doesn't seem useful.
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.
Yeah it's a bit tricky to hold it all in mind, but I don't believe any of the parent branches/PRs have any test coverage at this layer (I don't see state_store_test.go
in other PRs), and when I started testing the "don't let tagged versions go away" logic, it felt natural to elaborate here since I'd already done the requisite setup.
nomad/state/state_store_test.go
Outdated
// tag versions 0-2 | ||
for x := range 3 { | ||
v := uint64(x) | ||
name := fmt.Sprintf("v%d", x) | ||
desc := fmt.Sprintf("version %d", x) | ||
|
||
// apply tag | ||
must.NoError(t, state.UpdateJobVersionTag(nextIndex(state), job.Namespace, &structs.JobApplyTagRequest{ | ||
JobID: job.ID, | ||
Name: name, | ||
Tag: &structs.JobTaggedVersion{ | ||
Name: name, | ||
Description: desc, | ||
}, | ||
Version: v, | ||
})) | ||
|
||
// confirm | ||
got, err := state.JobVersionByTagName(nil, job.Namespace, job.ID, name) | ||
must.NoError(t, err) | ||
must.Eq(t, name, got.TaggedVersion.Name) | ||
must.Eq(t, desc, got.TaggedVersion.Description) | ||
} |
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.
We're testing the cases where we've got a "full" tracked versions when we tag, but not when we don't. It might make more sense to insert < max tracked, tag one, insert the rest, and then tag again. That'll make sure we've covered both paths.
…mmand (#23889) * First pass at passing a tagname and/or diff version to plan/versions requests * versions API now takes compare_to flags * Job history command output can have tag names and descriptions * compare_to to diff-tag and diff-version, plus adding flags to history command * 0th version now shows a diff if a specific diff target is requested * Addressing some PR comments * Simplify the diff-appending part of jobVersions and hide None-type diffs from CLI * Remove the diff-tag and diff-version parts of nomad job plan, with an eye toward making them a new top-level CLI command soon * Version diff tests * re-implement JobVersionByTagName * Test mods and simplification * Documentation for nomad job history additions * Prevent pruning and reaping of TaggedVersion jobs (#23983) tagged versions should not count against JobTrackedVersions i.e. new job versions being inserted should not evict tagged versions and GC should not delete a job if any of its versions are tagged Co-authored-by: Daniel Bennett <[email protected]> --------- Co-authored-by: Daniel Bennett <[email protected]>
* Tag and Untag at API level on down, but am I unblocking the wrong thing? * Code and comment cleanup * Unset methods generally now I stare long into the namespace abyss * Namespace passes through with QueryOptions removed from a write requesting struct * Comment and PR review cleanup * Version back to VersionStr * Generally consolidate unset logic into apply for version tagging * Addressed some PR comments * Auth check and RPC forwarding * uint64 instead of pointer for job version after api layer and renamed copy * job tag command split into apply and unset * latest-version convenience handling moved to CLI command level * CLI tests for tagging/untagging * UI parts removed * Add to job table when unsetting job tag on latest version * Vestigial no more * Compare versions by name and version number with the nomad history command (#23889) * First pass at passing a tagname and/or diff version to plan/versions requests * versions API now takes compare_to flags * Job history command output can have tag names and descriptions * compare_to to diff-tag and diff-version, plus adding flags to history command * 0th version now shows a diff if a specific diff target is requested * Addressing some PR comments * Simplify the diff-appending part of jobVersions and hide None-type diffs from CLI * Remove the diff-tag and diff-version parts of nomad job plan, with an eye toward making them a new top-level CLI command soon * Version diff tests * re-implement JobVersionByTagName * Test mods and simplification * Documentation for nomad job history additions * Prevent pruning and reaping of TaggedVersion jobs (#23983) tagged versions should not count against JobTrackedVersions i.e. new job versions being inserted should not evict tagged versions and GC should not delete a job if any of its versions are tagged Co-authored-by: Daniel Bennett <[email protected]> --------- Co-authored-by: Daniel Bennett <[email protected]> * [ui] Version Tags on the job versions page (#24013) * Timeline styles and their buttons modernized, and tags added * styled but not yet functional version blocks * Rough pass at edit/unedit UX * Styles consolidated * better UX around version tag crud, plus adapter and serializers * Mirage and acceptance tests * Modify percy to not show time-based things --------- Co-authored-by: Daniel Bennett <[email protected]>
* TaggedVersion information in structs, rather than job_endpoint (#23841) * TaggedVersion information in structs, rather than job_endpoint * Test for taggedVersion description length * Some API plumbing * Tag and Untag job versions (#23863) * Tag and Untag at API level on down, but am I unblocking the wrong thing? * Code and comment cleanup * Unset methods generally now I stare long into the namespace abyss * Namespace passes through with QueryOptions removed from a write requesting struct * Comment and PR review cleanup * Version back to VersionStr * Generally consolidate unset logic into apply for version tagging * Addressed some PR comments * Auth check and RPC forwarding * uint64 instead of pointer for job version after api layer and renamed copy * job tag command split into apply and unset * latest-version convenience handling moved to CLI command level * CLI tests for tagging/untagging * UI parts removed * Add to job table when unsetting job tag on latest version * Vestigial no more * Compare versions by name and version number with the nomad history command (#23889) * First pass at passing a tagname and/or diff version to plan/versions requests * versions API now takes compare_to flags * Job history command output can have tag names and descriptions * compare_to to diff-tag and diff-version, plus adding flags to history command * 0th version now shows a diff if a specific diff target is requested * Addressing some PR comments * Simplify the diff-appending part of jobVersions and hide None-type diffs from CLI * Remove the diff-tag and diff-version parts of nomad job plan, with an eye toward making them a new top-level CLI command soon * Version diff tests * re-implement JobVersionByTagName * Test mods and simplification * Documentation for nomad job history additions * Prevent pruning and reaping of TaggedVersion jobs (#23983) tagged versions should not count against JobTrackedVersions i.e. new job versions being inserted should not evict tagged versions and GC should not delete a job if any of its versions are tagged Co-authored-by: Daniel Bennett <[email protected]> --------- Co-authored-by: Daniel Bennett <[email protected]> * [ui] Version Tags on the job versions page (#24013) * Timeline styles and their buttons modernized, and tags added * styled but not yet functional version blocks * Rough pass at edit/unedit UX * Styles consolidated * better UX around version tag crud, plus adapter and serializers * Mirage and acceptance tests * Modify percy to not show time-based things --------- Co-authored-by: Daniel Bennett <[email protected]> * Job revert command and API endpoint can take a string version tag name (#24059) * Job revert command and API endpoint can take a string version tag name * RevertOpts as a signature-modified alternative to Revert() * job revert CLI test * Version pointers in endpoint tests * Dont copy over the tag when a job is reverted to a version with a tag * Convert tag name to version number at CLI level * Client method for version lookup by tag * No longer double-declaring client * [ui] Add tag filter to the job versions page (#24064) * Rough pass at the UI for version diff dropdown * Cleanup and diff fetching via adapter method * TaggedVersion now VersionTag (#24066) --------- Co-authored-by: Daniel Bennett <[email protected]>
Hi this is totally Phil and not Daniel (ok it is Daniel)
This protects tagged versions of jobs from being bumped off as new versions are created, and prevents jobs that have any tagged versions from being GC'd.