mirror of https://github.com/status-im/consul.git
agent: Fixing issue with excessive failed node filtering
This commit is contained in:
parent
140a910fed
commit
6eb3e8ee30
|
@ -471,6 +471,7 @@ RPC:
|
||||||
// health checks to prevent routing to unhealthy nodes
|
// health checks to prevent routing to unhealthy nodes
|
||||||
func (d *DNSServer) filterServiceNodes(nodes structs.CheckServiceNodes) structs.CheckServiceNodes {
|
func (d *DNSServer) filterServiceNodes(nodes structs.CheckServiceNodes) structs.CheckServiceNodes {
|
||||||
n := len(nodes)
|
n := len(nodes)
|
||||||
|
OUTER:
|
||||||
for i := 0; i < n; i++ {
|
for i := 0; i < n; i++ {
|
||||||
node := nodes[i]
|
node := nodes[i]
|
||||||
for _, check := range node.Checks {
|
for _, check := range node.Checks {
|
||||||
|
@ -480,6 +481,7 @@ func (d *DNSServer) filterServiceNodes(nodes structs.CheckServiceNodes) structs.
|
||||||
nodes[i], nodes[n-1] = nodes[n-1], structs.CheckServiceNode{}
|
nodes[i], nodes[n-1] = nodes[n-1], structs.CheckServiceNode{}
|
||||||
n--
|
n--
|
||||||
i--
|
i--
|
||||||
|
continue OUTER
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -651,6 +651,40 @@ func TestDNS_ServiceLookup_FilterCritical(t *testing.T) {
|
||||||
t.Fatalf("err: %v", err)
|
t.Fatalf("err: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
args3 := &structs.RegisterRequest{
|
||||||
|
Datacenter: "dc1",
|
||||||
|
Node: "bar",
|
||||||
|
Address: "127.0.0.2",
|
||||||
|
Service: &structs.NodeService{
|
||||||
|
Service: "db",
|
||||||
|
Tags: []string{"master"},
|
||||||
|
Port: 12345,
|
||||||
|
},
|
||||||
|
Check: &structs.HealthCheck{
|
||||||
|
CheckID: "db",
|
||||||
|
Name: "db",
|
||||||
|
ServiceID: "db",
|
||||||
|
Status: structs.HealthCritical,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
if err := srv.agent.RPC("Catalog.Register", args3, &out); err != nil {
|
||||||
|
t.Fatalf("err: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
args4 := &structs.RegisterRequest{
|
||||||
|
Datacenter: "dc1",
|
||||||
|
Node: "baz",
|
||||||
|
Address: "127.0.0.3",
|
||||||
|
Service: &structs.NodeService{
|
||||||
|
Service: "db",
|
||||||
|
Tags: []string{"master"},
|
||||||
|
Port: 12345,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
if err := srv.agent.RPC("Catalog.Register", args4, &out); err != nil {
|
||||||
|
t.Fatalf("err: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
m := new(dns.Msg)
|
m := new(dns.Msg)
|
||||||
m.SetQuestion("db.service.consul.", dns.TypeANY)
|
m.SetQuestion("db.service.consul.", dns.TypeANY)
|
||||||
|
|
||||||
|
@ -662,9 +696,15 @@ func TestDNS_ServiceLookup_FilterCritical(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Should get no answer since we are failing!
|
// Should get no answer since we are failing!
|
||||||
if len(in.Answer) != 0 {
|
if len(in.Answer) != 1 {
|
||||||
t.Fatalf("Bad: %#v", in)
|
t.Fatalf("Bad: %#v", in)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resp := in.Answer[0]
|
||||||
|
aRec := resp.(*dns.A)
|
||||||
|
if aRec.A.String() != "127.0.0.3" {
|
||||||
|
t.Fatalf("Bad: %#v", in.Answer[0])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDNS_ServiceLookup_Randomize(t *testing.T) {
|
func TestDNS_ServiceLookup_Randomize(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue