mirror of https://github.com/hashicorp/consul
Merge pull request #12277 from hashicorp/dnephin/panic-in-service-register
catalog: initialize the refs map to prevent a nil panicpull/12302/head
commit
01784470f3
|
@ -0,0 +1,3 @@
|
||||||
|
```release-note:bug
|
||||||
|
config-entry: fix a panic when creating an ingress gateway config-entry and a proxy service instance, where both provided the same upstream and downstream mapping.
|
||||||
|
```
|
|
@ -4016,6 +4016,7 @@ func insertGatewayServiceTopologyMapping(tx WriteTxn, idx uint64, gs *structs.Ga
|
||||||
mapping := upstreamDownstream{
|
mapping := upstreamDownstream{
|
||||||
Upstream: gs.Service,
|
Upstream: gs.Service,
|
||||||
Downstream: gs.Gateway,
|
Downstream: gs.Gateway,
|
||||||
|
Refs: make(map[string]struct{}),
|
||||||
RaftIndex: gs.RaftIndex,
|
RaftIndex: gs.RaftIndex,
|
||||||
}
|
}
|
||||||
if err := tx.Insert(tableMeshTopology, &mapping); err != nil {
|
if err := tx.Insert(tableMeshTopology, &mapping); err != nil {
|
||||||
|
|
|
@ -5977,6 +5977,40 @@ func setupIngressState(t *testing.T, s *Store) memdb.WatchSet {
|
||||||
return ws
|
return ws
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestStore_EnsureService_DoesNotPanicOnIngressGateway(t *testing.T) {
|
||||||
|
store := NewStateStore(nil)
|
||||||
|
|
||||||
|
err := store.EnsureConfigEntry(1, &structs.IngressGatewayConfigEntry{
|
||||||
|
Kind: structs.IngressGateway,
|
||||||
|
Name: "the-ingress",
|
||||||
|
Listeners: []structs.IngressListener{
|
||||||
|
{
|
||||||
|
Port: 12345,
|
||||||
|
Protocol: "tcp",
|
||||||
|
Services: []structs.IngressService{{Name: "the-service"}},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
err = store.EnsureRegistration(2, &structs.RegisterRequest{
|
||||||
|
Node: "the-node",
|
||||||
|
Service: &structs.NodeService{
|
||||||
|
Kind: structs.ServiceKindConnectProxy,
|
||||||
|
Service: "the-proxy",
|
||||||
|
Proxy: structs.ConnectProxyConfig{
|
||||||
|
DestinationServiceName: "the-ingress",
|
||||||
|
Upstreams: []structs.Upstream{
|
||||||
|
{
|
||||||
|
DestinationName: "the-service",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
func TestStateStore_DumpGatewayServices(t *testing.T) {
|
func TestStateStore_DumpGatewayServices(t *testing.T) {
|
||||||
s := testStateStore(t)
|
s := testStateStore(t)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue