@@ -11,6 +11,8 @@ import (
11
11
"github.com/sirupsen/logrus"
12
12
)
13
13
14
+ const UnknownBrokerId = - 1
15
+
14
16
type ListenFunc func (cfg config.ListenerConfig ) (l net.Listener , err error )
15
17
16
18
type Listeners struct {
@@ -25,13 +27,11 @@ type Listeners struct {
25
27
26
28
listenFunc ListenFunc
27
29
28
- deterministicListeners bool
29
30
disableDynamicListeners bool
30
31
dynamicSequentialMinPort int
31
32
32
- brokerToListenerConfig map [string ]config.ListenerConfig
33
- brokerIdToIdListenerConfig map [int32 ]config.IdListenerConfig
34
- lock sync.RWMutex
33
+ brokerToListenerConfig map [string ]config.EnhancedListenerConfig
34
+ lock sync.RWMutex
35
35
}
36
36
37
37
func NewListeners (cfg * config.Config ) (* Listeners , error ) {
@@ -66,34 +66,33 @@ func NewListeners(cfg *config.Config) (*Listeners, error) {
66
66
return nil , err
67
67
}
68
68
69
- brokerIdToIdListenerConfig := make (map [int32 ]config.IdListenerConfig )
70
-
71
69
return & Listeners {
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 ,
70
+ defaultListenerIP : defaultListenerIP ,
71
+ dynamicAdvertisedListener : dynamicAdvertisedListener ,
72
+ connSrc : make (chan Conn , 1 ),
73
+ brokerToListenerConfig : brokerToListenerConfig ,
74
+ tcpConnOptions : tcpConnOptions ,
75
+ listenFunc : listenFunc ,
76
+ disableDynamicListeners : cfg .Proxy .DisableDynamicListeners ,
77
+ dynamicSequentialMinPort : cfg .Proxy .DynamicSequentialMinPort ,
82
78
}, nil
83
79
}
84
80
85
- func getBrokerToListenerConfig (cfg * config.Config ) (map [string ]config.ListenerConfig , error ) {
86
- brokerToListenerConfig := make (map [string ]config.ListenerConfig )
81
+ func getBrokerToListenerConfig (cfg * config.Config ) (map [string ]config.EnhancedListenerConfig , error ) {
82
+ brokerToListenerConfig := make (map [string ]config.EnhancedListenerConfig )
87
83
88
84
for _ , v := range cfg .Proxy .BootstrapServers {
89
85
if lc , ok := brokerToListenerConfig [v .BrokerAddress ]; ok {
90
86
if lc .ListenerAddress != v .ListenerAddress || lc .AdvertisedAddress != v .AdvertisedAddress {
91
- return nil , fmt .Errorf ("bootstrap server mapping %s configured twice: %v and %v" , v .BrokerAddress , v , lc )
87
+ return nil , fmt .Errorf ("bootstrap server mapping %s configured twice: %v and %v" , v .BrokerAddress , v , lc . ListenerConfig )
92
88
}
93
89
continue
94
90
}
95
91
logrus .Infof ("Bootstrap server %s advertised as %s" , v .BrokerAddress , v .AdvertisedAddress )
96
- brokerToListenerConfig [v .BrokerAddress ] = v
92
+ brokerToListenerConfig [v .BrokerAddress ] = config.EnhancedListenerConfig {
93
+ ListenerConfig : v ,
94
+ BrokerID : UnknownBrokerId ,
95
+ }
97
96
}
98
97
99
98
externalToListenerConfig := make (map [string ]config.ListenerConfig )
@@ -118,7 +117,10 @@ func getBrokerToListenerConfig(cfg *config.Config) (map[string]config.ListenerCo
118
117
continue
119
118
}
120
119
logrus .Infof ("External server %s advertised as %s" , v .BrokerAddress , v .AdvertisedAddress )
121
- brokerToListenerConfig [v .BrokerAddress ] = v
120
+ brokerToListenerConfig [v .BrokerAddress ] = config.EnhancedListenerConfig {
121
+ ListenerConfig : v ,
122
+ BrokerID : UnknownBrokerId ,
123
+ }
122
124
}
123
125
return brokerToListenerConfig , nil
124
126
}
@@ -132,26 +134,13 @@ func (p *Listeners) GetNetAddressMapping(brokerHost string, brokerPort int32, br
132
134
133
135
p .lock .RLock ()
134
136
listenerConfig , ok := p .brokerToListenerConfig [brokerAddress ]
135
- idListenerConfig , brokerIdFound := p .brokerIdToIdListenerConfig [brokerId ]
136
137
p .lock .RUnlock ()
137
138
138
139
if ok {
139
- logrus .Debugf ("Address mappings broker=%s, listener=%s, advertised=%s" , listenerConfig .BrokerAddress , listenerConfig .ListenerAddress , listenerConfig .AdvertisedAddress )
140
+ logrus .Debugf ("Address mappings broker=%s, listener=%s, advertised=%s, brokerId=%d " , listenerConfig .BrokerAddress , listenerConfig .ListenerAddress , listenerConfig .AdvertisedAddress , brokerId )
140
141
return util .SplitHostPort (listenerConfig .AdvertisedAddress )
141
142
}
142
143
if ! p .disableDynamicListeners {
143
- if brokerIdFound {
144
- logrus .Infof ("Broker ID %d has a new advertised listener, closing existing dynamic listener" , brokerId )
145
- // Existing broker ID found, but with a different upstream broker
146
- // Close existing listener, remove two mappings:
147
- // * ID to removed upstream broker
148
- // * removed upstream broker
149
- idListenerConfig .Listener .Close ()
150
- p .lock .Lock ()
151
- delete (p .brokerIdToIdListenerConfig , brokerId )
152
- delete (p .brokerToListenerConfig , idListenerConfig .BrokerAddress )
153
- p .lock .Unlock ()
154
- }
155
144
logrus .Infof ("Starting dynamic listener for broker %s" , brokerAddress )
156
145
return p .ListenDynamicInstance (brokerAddress , brokerId )
157
146
}
@@ -166,15 +155,9 @@ func (p *Listeners) ListenDynamicInstance(brokerAddress string, brokerId int32)
166
155
return util .SplitHostPort (v .AdvertisedAddress )
167
156
}
168
157
169
- var defaultListenerAddress string
170
-
171
- if p .deterministicListeners {
172
- defaultListenerAddress = net .JoinHostPort (p .defaultListenerIP , fmt .Sprint (p .dynamicSequentialMinPort + int (brokerId )))
173
- } else {
174
- defaultListenerAddress = net .JoinHostPort (p .defaultListenerIP , fmt .Sprint (p .dynamicSequentialMinPort ))
175
- if p .dynamicSequentialMinPort != 0 {
176
- p .dynamicSequentialMinPort += 1
177
- }
158
+ defaultListenerAddress := net .JoinHostPort (p .defaultListenerIP , fmt .Sprint (p .dynamicSequentialMinPort ))
159
+ if p .dynamicSequentialMinPort != 0 {
160
+ p .dynamicSequentialMinPort += 1
178
161
}
179
162
180
163
cfg := config.ListenerConfig {ListenerAddress : defaultListenerAddress , BrokerAddress : brokerAddress }
@@ -191,10 +174,11 @@ func (p *Listeners) ListenDynamicInstance(brokerAddress string, brokerId int32)
191
174
}
192
175
193
176
advertisedAddress := net .JoinHostPort (dynamicAdvertisedListener , fmt .Sprint (port ))
194
- p .brokerToListenerConfig [brokerAddress ] = config.ListenerConfig {BrokerAddress : brokerAddress , ListenerAddress : address , AdvertisedAddress : advertisedAddress }
195
- p .brokerIdToIdListenerConfig [brokerId ] = config.IdListenerConfig {BrokerAddress : brokerAddress , Listener : l }
196
-
197
- logrus .Infof ("Dynamic listener %s for broker %s advertised as %s" , address , brokerAddress , advertisedAddress )
177
+ p .brokerToListenerConfig [brokerAddress ] = config.EnhancedListenerConfig {
178
+ ListenerConfig : config.ListenerConfig {BrokerAddress : brokerAddress , ListenerAddress : address , AdvertisedAddress : advertisedAddress },
179
+ BrokerID : brokerId ,
180
+ }
181
+ logrus .Infof ("Dynamic listener %s for broker %s brokerId %d advertised as %s" , address , brokerAddress , brokerId , advertisedAddress )
198
182
199
183
return dynamicAdvertisedListener , int32 (port ), nil
200
184
}
0 commit comments