Skip to content
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

Reverting to Identical Job Doesn't Update Job Version #10337

Open
cgbaker opened this issue Apr 8, 2021 · 0 comments
Open

Reverting to Identical Job Doesn't Update Job Version #10337

cgbaker opened this issue Apr 8, 2021 · 0 comments

Comments

@cgbaker
Copy link
Contributor

cgbaker commented Apr 8, 2021

Nomad version

Nomad v1.0.4 (9294f35f9aa8dbb4acb6e85fa88e3e2534a3e41a

Issue

Reverting between different versions of a job, with identical job spec, is a no-op. This mostly isn't a big deal, except that the state after job revert is probably not as expected.

Reproduction steps

(Job file below)

$ nomad job run -var id=a repro.nomad # create v0
$ nomad job run -var id=b repro.nomad # create v1
$ nomad job run -var id=a repro.nomad # create v2, spec identical to v0
$ nomad job status example
  ... 
  Allocations
  ID        Node ID   Task Group  Version  Desired  Status    Created    Modified
  74185fab  4298f96a  cache       2        run      running   22s ago    11s ago
  01ec7537  4298f96a  cache       1        stop     complete  1m10s ago  21s ago
  b452ec74  4298f96a  cache       0        stop     complete  1m32s ago  1m10s ago

$ http localhost:4646/v1/job/example/versions | jq '.Versions[0]' > v0
$ http localhost:4646/v1/job/example/versions | jq '.Versions[2]' > v2
$ sdiff -s v2 v0  # these have identical spec
  "Version": 0,						      |	  "Version": 2,
  "SubmitTime": 1617915598452144000,			      |	  "SubmitTime": 1617915668471469000,
  "ModifyIndex": 17,					      |	  "ModifyIndex": 38,
  "JobModifyIndex": 9					      |	  "JobModifyIndex": 30

$ nomad job inspect example | jq '.Job.Version'  # should be on v2
2

###### REPRO

$ nomad job revert example 0
==> Monitoring evaluation "077283c4"
    Evaluation triggered by job "example"
    Evaluation within deployment: "e7e2e902"
    Evaluation status changed: "pending" -> "complete"
==> Evaluation "077283c4" finished with status "complete"

$ nomad eval status -json 0772 | jq '.JobModifyIndex'                 # should target v0, but it doesn't
30

$ nomad job inspect example | jq '.Job.Version, .Job.JobModifyIndex'  # current job version is still v2
2
30

$ nomad job status example         # allocs were not updated either
  ...
  Allocations
  ID        Node ID   Task Group  Version  Desired  Status    Created    Modified
  74185fab  4298f96a  cache       2        run      running   4m29s ago  4m18s ago
  01ec7537  4298f96a  cache       1        stop     complete  5m17s ago  4m28s ago
  b452ec74  4298f96a  cache       0        stop     complete  5m39s ago  5m17s ago

$ nomad alloc status -json 7418 | jq '.Job.Version'
2

$ nomad job deployments example    # no new deployment
ID        Job ID   Job Version  Status      Description
8318c580  example  2            successful  Deployment completed successfully
9ee4c16a  example  1            successful  Deployment completed successfully
9d7182e6  example  0            successful  Deployment completed successfully

Expected Result

I think a reasonable expectation would be that after calling job revert example N, the eval would be targeting job version N and the resulting status would be that the job would be on version N.

Aside from that, it seems that the state of the system is consistent. The evaluation returned by job revert even indicates the resulting version (2).

Job file (if appropriate)

variable "id" {
  type = string
}
job "example" {
  meta {
    id = var.id
  }
  datacenters = ["dc1"]
  group "cache" {
    task "redis" {
      driver = "docker"
      config {
        image = "redis:3.2"
      }
    }
  }
}
backspace added a commit that referenced this issue Apr 20, 2021
This adds a Revert two-step button to the JobVersions component for
not-current versions, which redirects to the overview on success. It
checks the job version before and after reversion to mitigate the edge
case where reverting to an otherwise-identical version has no effect, as
discussed in #10337.

It uses existing facilities for handling other errors and disabling the
button when permissions are lacking.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant