@@ -29,9 +29,9 @@ type Listeners struct {
29
29
disableDynamicListeners bool
30
30
dynamicSequentialMinPort int
31
31
32
- brokerToListenerConfig map [string ]config.ListenerConfig
33
- brokerIdToListenerConfig map [int32 ]config.ListenerConfig
34
- lock sync.RWMutex
32
+ brokerToListenerConfig map [string ]config.ListenerConfig
33
+ brokerIdToIdListenerConfig map [int32 ]config.IdListenerConfig
34
+ lock sync.RWMutex
35
35
}
36
36
37
37
func NewListeners (cfg * config.Config ) (* Listeners , error ) {
@@ -66,19 +66,19 @@ func NewListeners(cfg *config.Config) (*Listeners, error) {
66
66
return nil , err
67
67
}
68
68
69
- brokerIdToListenerConfig := make (map [int32 ]config.ListenerConfig )
69
+ brokerIdToIdListenerConfig := make (map [int32 ]config.IdListenerConfig )
70
70
71
71
return & Listeners {
72
- defaultListenerIP : defaultListenerIP ,
73
- dynamicAdvertisedListener : dynamicAdvertisedListener ,
74
- connSrc : make (chan Conn , 1 ),
75
- brokerToListenerConfig : brokerToListenerConfig ,
76
- brokerIdToListenerConfig : brokerIdToListenerConfig ,
77
- tcpConnOptions : tcpConnOptions ,
78
- listenFunc : listenFunc ,
79
- deterministicListeners : cfg .Proxy .DeterministicListeners ,
80
- disableDynamicListeners : cfg .Proxy .DisableDynamicListeners ,
81
- dynamicSequentialMinPort : cfg .Proxy .DynamicSequentialMinPort ,
72
+ defaultListenerIP : defaultListenerIP ,
73
+ dynamicAdvertisedListener : dynamicAdvertisedListener ,
74
+ connSrc : make (chan Conn , 1 ),
75
+ brokerToListenerConfig : brokerToListenerConfig ,
76
+ brokerIdToIdListenerConfig : brokerIdToIdListenerConfig ,
77
+ tcpConnOptions : tcpConnOptions ,
78
+ listenFunc : listenFunc ,
79
+ deterministicListeners : cfg .Proxy .DeterministicListeners ,
80
+ disableDynamicListeners : cfg .Proxy .DisableDynamicListeners ,
81
+ dynamicSequentialMinPort : cfg .Proxy .DynamicSequentialMinPort ,
82
82
}, nil
83
83
}
84
84
@@ -132,7 +132,7 @@ func (p *Listeners) GetNetAddressMapping(brokerHost string, brokerPort int32, br
132
132
133
133
p .lock .RLock ()
134
134
listenerConfig , ok := p .brokerToListenerConfig [brokerAddress ]
135
- idListenerConfig , brokerIdFound := p .brokerIdToListenerConfig [brokerId ]
135
+ idListenerConfig , brokerIdFound := p .brokerIdToIdListenerConfig [brokerId ]
136
136
p .lock .RUnlock ()
137
137
138
138
if ok {
@@ -141,13 +141,16 @@ func (p *Listeners) GetNetAddressMapping(brokerHost string, brokerPort int32, br
141
141
}
142
142
if ! p .disableDynamicListeners {
143
143
if brokerIdFound {
144
+ logrus .Infof ("Broker ID %d has a new advertised listener, closing existing dynamic listener" , brokerId )
144
145
// Existing broker ID found, but with a different upstream broker
145
146
// Close existing listener, remove two mappings:
146
147
// * ID to removed upstream broker
147
148
// * removed upstream broker
148
149
idListenerConfig .Listener .Close ()
149
- delete (p .brokerIdToListenerConfig , brokerId )
150
+ p .lock .Lock ()
151
+ delete (p .brokerIdToIdListenerConfig , brokerId )
150
152
delete (p .brokerToListenerConfig , idListenerConfig .BrokerAddress )
153
+ p .lock .Unlock ()
151
154
}
152
155
logrus .Infof ("Starting dynamic listener for broker %s" , brokerAddress )
153
156
return p .ListenDynamicInstance (brokerAddress , brokerId )
@@ -188,8 +191,8 @@ func (p *Listeners) ListenDynamicInstance(brokerAddress string, brokerId int32)
188
191
}
189
192
190
193
advertisedAddress := net .JoinHostPort (dynamicAdvertisedListener , fmt .Sprint (port ))
191
- p .brokerToListenerConfig [brokerAddress ] = config.ListenerConfig {BrokerAddress : brokerAddress , ListenerAddress : address , AdvertisedAddress : advertisedAddress , Listener : l }
192
- p .brokerIdToListenerConfig [brokerId ] = p . brokerToListenerConfig [ brokerAddress ]
194
+ p .brokerToListenerConfig [brokerAddress ] = config.ListenerConfig {BrokerAddress : brokerAddress , ListenerAddress : address , AdvertisedAddress : advertisedAddress }
195
+ p .brokerIdToIdListenerConfig [brokerId ] = config. IdListenerConfig { BrokerAddress : brokerAddress , Listener : l }
193
196
194
197
logrus .Infof ("Dynamic listener %s for broker %s advertised as %s" , address , brokerAddress , advertisedAddress )
195
198
0 commit comments