mirror of
https://github.com/kemko/nomad.git
synced 2026-01-01 16:05:42 +03:00
Merge pull request #11579 from hashicorp/b-getscalingpolicy-rpc-index-response
rpc: fix scaling policy get index response when policy is found.
This commit is contained in:
3
.changelog/11579.txt
Normal file
3
.changelog/11579.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
```release-note:bug
|
||||
rpc: Fixed scaling policy get index response when the policy is found
|
||||
```
|
||||
@@ -120,18 +120,18 @@ func (p *Scaling) GetPolicy(args *structs.ScalingPolicySpecificRequest,
|
||||
|
||||
reply.Policy = p
|
||||
|
||||
// Use the last index that affected the policy table
|
||||
index, err := state.Index("scaling_policy")
|
||||
if err != nil {
|
||||
return err
|
||||
// If the state lookup returned a policy object, use the modify
|
||||
// index for the response. Otherwise, use the index table to supply
|
||||
// this, ensuring a non-zero value.
|
||||
if p != nil {
|
||||
reply.Index = p.ModifyIndex
|
||||
} else {
|
||||
index, err := state.Index("scaling_policy")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
reply.Index = helper.Uint64Max(1, index)
|
||||
}
|
||||
|
||||
// Ensure we never set the index to zero, otherwise a blocking query cannot be used.
|
||||
// We floor the index at one, since realistically the first write must have a higher index.
|
||||
if index == 0 {
|
||||
index = 1
|
||||
}
|
||||
reply.Index = index
|
||||
return nil
|
||||
}}
|
||||
return p.srv.blockingRPC(&opts)
|
||||
|
||||
@@ -36,7 +36,11 @@ func TestScalingEndpoint_GetPolicy(t *testing.T) {
|
||||
p2 := mock.ScalingPolicy()
|
||||
s1.fsm.State().UpsertScalingPolicies(1000, []*structs.ScalingPolicy{p1, p2})
|
||||
|
||||
// Lookup the policy
|
||||
// Add another policy at a higher index.
|
||||
p3 := mock.ScalingPolicy()
|
||||
require.NoError(s1.fsm.State().UpsertScalingPolicies(2000, []*structs.ScalingPolicy{p3}))
|
||||
|
||||
// Lookup the first policy and perform assertions.
|
||||
get := &structs.ScalingPolicySpecificRequest{
|
||||
ID: p1.ID,
|
||||
QueryOptions: structs.QueryOptions{
|
||||
@@ -54,7 +58,7 @@ func TestScalingEndpoint_GetPolicy(t *testing.T) {
|
||||
resp = structs.SingleScalingPolicyResponse{}
|
||||
err = msgpackrpc.CallWithCodec(codec, "Scaling.GetPolicy", get, &resp)
|
||||
require.NoError(err)
|
||||
require.EqualValues(1000, resp.Index)
|
||||
require.EqualValues(2000, resp.Index)
|
||||
require.Nil(resp.Policy)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user