Merge pull request #4216 from hashicorp/b-signal-constraints

Sort signals in implicit constraint
This commit is contained in:
Alex Dadgar 2018-04-26 10:14:03 -07:00 committed by GitHub
commit ffb703772d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 3 deletions

View file

@ -11,6 +11,8 @@ BUG FIXES:
* core: Fix panic when doing a node drain effecting a job that has an * core: Fix panic when doing a node drain effecting a job that has an
allocation that was on a node that no longer exists allocation that was on a node that no longer exists
[[GH-4215](https://github.com/hashicorp/nomad/issues/4215)] [[GH-4215](https://github.com/hashicorp/nomad/issues/4215)]
* core: Sort signals in implicit constraint avoiding unnecessary updates
[[GH-4216](https://github.com/hashicorp/nomad/issues/4216)]
* client: Populate access time and modify time when unarchiving tar archives * client: Populate access time and modify time when unarchiving tar archives
that do not specify them explicitly [[GH-4217](https://github.com/hashicorp/nomad/issues/4217)] that do not specify them explicitly [[GH-4217](https://github.com/hashicorp/nomad/issues/4217)]
* driver/exec: Create process group for Windows process and send Ctrl-Break * driver/exec: Create process group for Windows process and send Ctrl-Break

View file

@ -296,6 +296,7 @@ func setImplicitConstraints(j *structs.Job) {
// getSignalConstraint builds a suitable constraint based on the required // getSignalConstraint builds a suitable constraint based on the required
// signals // signals
func getSignalConstraint(signals []string) *structs.Constraint { func getSignalConstraint(signals []string) *structs.Constraint {
sort.Strings(signals)
return &structs.Constraint{ return &structs.Constraint{
Operand: structs.ConstraintSetContains, Operand: structs.ConstraintSetContains,
LTarget: "${attr.os.signals}", LTarget: "${attr.os.signals}",

View file

@ -3754,13 +3754,20 @@ func TestJobEndpoint_ImplicitConstraints_Signals(t *testing.T) {
// Create the register request with a job asking for a template that sends a // Create the register request with a job asking for a template that sends a
// signal // signal
job := mock.Job() job := mock.Job()
signal := "SIGUSR1" signal1 := "SIGUSR1"
signal2 := "SIGHUP"
job.TaskGroups[0].Tasks[0].Templates = []*structs.Template{ job.TaskGroups[0].Tasks[0].Templates = []*structs.Template{
{ {
SourcePath: "foo", SourcePath: "foo",
DestPath: "bar", DestPath: "bar",
ChangeMode: structs.TemplateChangeModeSignal, ChangeMode: structs.TemplateChangeModeSignal,
ChangeSignal: signal, ChangeSignal: signal1,
},
{
SourcePath: "foo",
DestPath: "baz",
ChangeMode: structs.TemplateChangeModeSignal,
ChangeSignal: signal2,
}, },
} }
req := &structs.JobRegisterRequest{ req := &structs.JobRegisterRequest{
@ -3797,7 +3804,10 @@ func TestJobEndpoint_ImplicitConstraints_Signals(t *testing.T) {
t.Fatalf("Expected an implicit constraint") t.Fatalf("Expected an implicit constraint")
} }
sigConstraint := getSignalConstraint([]string{signal}) sigConstraint := getSignalConstraint([]string{signal1, signal2})
if !strings.HasPrefix(sigConstraint.RTarget, "SIGHUP") {
t.Fatalf("signals not sorted: %v", sigConstraint.RTarget)
}
if !constraints[0].Equal(sigConstraint) { if !constraints[0].Equal(sigConstraint) {
t.Fatalf("Expected implicit vault constraint") t.Fatalf("Expected implicit vault constraint")