Merge pull request #12277 from hashicorp/dnephin/panic-in-service-register

catalog: initialize the refs map to prevent a nil panic
This commit is contained in:
Daniel Nephin 2022-02-09 19:48:22 -05:00 committed by GitHub
commit db4675bd1a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 38 additions and 0 deletions

3
.changelog/12277.txt Normal file
View File

@ -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.
```

View File

@ -4016,6 +4016,7 @@ func insertGatewayServiceTopologyMapping(tx WriteTxn, idx uint64, gs *structs.Ga
mapping := upstreamDownstream{
Upstream: gs.Service,
Downstream: gs.Gateway,
Refs: make(map[string]struct{}),
RaftIndex: gs.RaftIndex,
}
if err := tx.Insert(tableMeshTopology, &mapping); err != nil {

View File

@ -5977,6 +5977,40 @@ func setupIngressState(t *testing.T, s *Store) memdb.WatchSet {
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) {
s := testStateStore(t)