Skip to content

Commit d3350c5

Browse files
committed
REORG/MEDIUM: service: port is optional via nil value
1 parent ef96193 commit d3350c5

2 files changed

Lines changed: 67 additions & 47 deletions

File tree

configuration/service.go

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ const ServiceGrowthTypeExponential = "exponential"
3131
// ServiceServer contains information for one server in the service.
3232
type ServiceServer struct {
3333
Address string
34-
Port int
34+
Port *int64
3535
}
3636

3737
type ServiceNode struct {
3838
address string
3939
name string
40-
port int64
40+
port *int64
4141
disabled bool
4242
modified bool
4343
}
@@ -201,7 +201,7 @@ func (s *Service) markRemovedNodes(servers []ServiceServer) {
201201
node.modified = true
202202
node.disabled = true
203203
node.address = "127.0.0.1"
204-
node.port = 80
204+
node.port = misc.Int64P(80)
205205
}
206206
}
207207
}
@@ -299,9 +299,11 @@ func (s *Service) loadNodes() (bool, error) {
299299
sNode := &ServiceNode{
300300
name: server.Name,
301301
address: server.Address,
302-
port: *server.Port,
303302
modified: false,
304303
}
304+
if server.Port != nil {
305+
sNode.port = misc.Ptr(*server.Port)
306+
}
305307
if server.Maintenance == "enabled" {
306308
sNode.disabled = true
307309
}
@@ -320,12 +322,16 @@ func (s *Service) updateConfig() (bool, error) {
320322
server := &models.Server{
321323
Name: node.name,
322324
Address: node.address,
323-
Port: misc.Ptr(node.port),
324325
ServerParams: models.ServerParams{
325326
Weight: misc.Int64P(128),
326327
Check: "enabled",
327328
},
328329
}
330+
if node.port != nil {
331+
server.Port = misc.Ptr(*node.port)
332+
} else {
333+
server.Port = nil
334+
}
329335
if node.disabled {
330336
server.Maintenance = "enabled"
331337
}
@@ -350,7 +356,7 @@ func (s *Service) nodeRemoved(node *ServiceNode, servers []ServiceServer) bool {
350356
}
351357

352358
func (s *Service) nodesMatch(sNode *ServiceNode, servers ServiceServer) bool {
353-
return !sNode.disabled && sNode.address == servers.Address && sNode.port == int64(servers.Port)
359+
return !sNode.disabled && sNode.address == servers.Address && ((sNode.port != nil && *sNode.port == *servers.Port) || sNode.port == nil && servers.Port == nil)
354360
}
355361

356362
func (s *Service) serverExists(server ServiceServer) bool {
@@ -368,7 +374,11 @@ func (s *Service) setServer(server ServiceServer) error {
368374
sNode.modified = true
369375
sNode.disabled = false
370376
sNode.address = server.Address
371-
sNode.port = int64(server.Port)
377+
if server.Port != nil {
378+
sNode.port = misc.Ptr(*server.Port)
379+
} else {
380+
sNode.port = nil
381+
}
372382
break
373383
}
374384
}
@@ -393,7 +403,7 @@ func (s *Service) addNode() error {
393403
s.nodes = append(s.nodes, &ServiceNode{
394404
name: name,
395405
address: "127.0.0.1",
396-
port: 80,
406+
port: misc.Int64P(80),
397407
modified: false,
398408
disabled: true,
399409
})
@@ -423,11 +433,13 @@ func (s *Service) swapDisabledNode(index int) {
423433
s.nodes[i].disabled = true
424434
s.nodes[i].modified = true
425435
s.nodes[index].address = s.nodes[i].address
426-
s.nodes[index].port = s.nodes[i].port
436+
if s.nodes[i].port != nil {
437+
s.nodes[index].port = misc.Ptr(*s.nodes[i].port)
438+
}
427439
s.nodes[index].disabled = false
428440
s.nodes[index].modified = true
429441
s.nodes[i].address = "127.0.0.1"
430-
s.nodes[i].port = 80
442+
s.nodes[i].port = misc.Int64P(80)
431443
break
432444
}
433445
}

test/service_test.go

Lines changed: 45 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,10 @@ func (s *ServiceInitiationSuite) TestLoadExistingBackend() {
149149
{Name: "s2", Address: "127.1.1.2", Port: &serverPort},
150150
{Name: "s3", Address: "127.1.1.3", Port: &serverPort},
151151
{Name: "s4", Address: "127.1.1.4", Port: &serverPort},
152+
{Name: "s5", Address: "127.1.1.5"}, // ServiceInstance supports nil port
153+
{Name: "s6", Address: "127.1.1.6"},
154+
{Name: "s7", Address: "127.1.1.7"},
155+
{Name: "s8", Address: "127.1.1.8"},
152156
}
153157
s.Nil(s.createExistingService(servers))
154158

@@ -165,7 +169,11 @@ func (s *ServiceInitiationSuite) TestLoadExistingBackend() {
165169
if i < len(servers) {
166170
s.Equal(server.Name, servers[i].Name)
167171
s.Equal(server.Address, servers[i].Address)
168-
s.Equal(*server.Port, *servers[i].Port)
172+
if server.Port != nil {
173+
s.Equal(*server.Port, *servers[i].Port)
174+
} else {
175+
s.Nil(servers[i].Port)
176+
}
169177
} else {
170178
s.Equal(server.Address, "127.0.0.1")
171179
s.Equal(*server.Port, int64(80))
@@ -240,10 +248,10 @@ func (s *ServiceUpdateSuit) AfterTest(suiteName, testName string) {
240248

241249
func (s *ServiceUpdateSuit) TestFirstUpdate() {
242250
servers := []configuration.ServiceServer{
243-
{Address: "127.1.1.1", Port: 81},
244-
{Address: "127.1.1.2", Port: 82},
245-
{Address: "127.1.1.3", Port: 83},
246-
{Address: "127.1.1.4", Port: 84},
251+
{Address: "127.1.1.1", Port: misc.Int64P(81)},
252+
{Address: "127.1.1.2", Port: misc.Int64P(82)},
253+
{Address: "127.1.1.3", Port: misc.Int64P(83)},
254+
{Address: "127.1.1.4", Port: misc.Int64P(84)},
247255
}
248256
r, err := s.service.Update(servers)
249257
s.True(r)
@@ -257,7 +265,7 @@ func (s *ServiceUpdateSuit) validateUpdateResult(expected []configuration.Servic
257265
for i, server := range servers {
258266
if i < len(expected) {
259267
s.Equal(expected[i].Address, server.Address)
260-
s.Equal(expected[i].Port, int(*server.Port))
268+
s.Equal(*expected[i].Port, *server.Port)
261269
s.NotEqual("enabled", server.Maintenance)
262270
} else {
263271
s.Equal("127.0.0.1", server.Address)
@@ -269,18 +277,18 @@ func (s *ServiceUpdateSuit) validateUpdateResult(expected []configuration.Servic
269277

270278
func (s *ServiceUpdateSuit) TestSecondUpdateWithDeletedServer() {
271279
servers := []configuration.ServiceServer{
272-
{Address: "127.1.1.1", Port: 81},
273-
{Address: "127.1.1.2", Port: 82},
274-
{Address: "127.1.1.3", Port: 83},
275-
{Address: "127.1.1.4", Port: 84},
280+
{Address: "127.1.1.1", Port: misc.Int64P(81)},
281+
{Address: "127.1.1.2", Port: misc.Int64P(82)},
282+
{Address: "127.1.1.3", Port: misc.Int64P(83)},
283+
{Address: "127.1.1.4", Port: misc.Int64P(84)},
276284
}
277285
r, err := s.service.Update(servers)
278286
s.True(r)
279287
s.Nil(err)
280288
servers = []configuration.ServiceServer{
281-
{Address: "127.1.1.1", Port: 81},
282-
{Address: "127.1.1.3", Port: 83},
283-
{Address: "127.1.1.4", Port: 84},
289+
{Address: "127.1.1.1", Port: misc.Int64P(81)},
290+
{Address: "127.1.1.3", Port: misc.Int64P(83)},
291+
{Address: "127.1.1.4", Port: misc.Int64P(84)},
284292
}
285293
r, err = s.service.Update(servers)
286294
s.True(r)
@@ -290,30 +298,30 @@ func (s *ServiceUpdateSuit) TestSecondUpdateWithDeletedServer() {
290298
// In this case server 127.1.1.2 got removed and the last enabled server from the remaining ones
291299
// gets moved into its slot, in this case 127.1.1.4
292300
expected := []configuration.ServiceServer{
293-
{Address: "127.1.1.1", Port: 81},
294-
{Address: "127.1.1.4", Port: 84},
295-
{Address: "127.1.1.3", Port: 83},
301+
{Address: "127.1.1.1", Port: misc.Int64P(81)},
302+
{Address: "127.1.1.4", Port: misc.Int64P(84)},
303+
{Address: "127.1.1.3", Port: misc.Int64P(83)},
296304
}
297305
s.validateUpdateResult(expected)
298306
}
299307

300308
func (s *ServiceUpdateSuit) TestSecondUpdateWithNewAndRemovedServers() {
301309
servers := []configuration.ServiceServer{
302-
{Address: "127.1.1.1", Port: 81},
303-
{Address: "127.1.1.2", Port: 82},
304-
{Address: "127.1.1.3", Port: 83},
305-
{Address: "127.1.1.4", Port: 84},
310+
{Address: "127.1.1.1", Port: misc.Int64P(81)},
311+
{Address: "127.1.1.2", Port: misc.Int64P(82)},
312+
{Address: "127.1.1.3", Port: misc.Int64P(83)},
313+
{Address: "127.1.1.4", Port: misc.Int64P(84)},
306314
}
307315
r, err := s.service.Update(servers)
308316
s.True(r)
309317
s.Nil(err)
310318
servers = []configuration.ServiceServer{
311-
{Address: "127.1.1.1", Port: 81},
312-
{Address: "127.1.1.4", Port: 84},
313-
{Address: "127.1.1.5", Port: 85},
314-
{Address: "127.1.1.6", Port: 86},
315-
{Address: "127.1.1.7", Port: 87},
316-
{Address: "127.1.1.2", Port: 82},
319+
{Address: "127.1.1.1", Port: misc.Int64P(81)},
320+
{Address: "127.1.1.4", Port: misc.Int64P(84)},
321+
{Address: "127.1.1.5", Port: misc.Int64P(85)},
322+
{Address: "127.1.1.6", Port: misc.Int64P(86)},
323+
{Address: "127.1.1.7", Port: misc.Int64P(87)},
324+
{Address: "127.1.1.2", Port: misc.Int64P(82)},
317325
}
318326
r, err = s.service.Update(servers)
319327
s.True(r)
@@ -323,22 +331,22 @@ func (s *ServiceUpdateSuit) TestSecondUpdateWithNewAndRemovedServers() {
323331
// The first new server will be placed in place of server 127.1.1.3 which is 127.1.1.5.
324332
// The remaining new servers will be added to the end.
325333
expected := []configuration.ServiceServer{
326-
{Address: "127.1.1.1", Port: 81},
327-
{Address: "127.1.1.2", Port: 82},
328-
{Address: "127.1.1.5", Port: 85},
329-
{Address: "127.1.1.4", Port: 84},
330-
{Address: "127.1.1.6", Port: 86},
331-
{Address: "127.1.1.7", Port: 87},
334+
{Address: "127.1.1.1", Port: misc.Int64P(81)},
335+
{Address: "127.1.1.2", Port: misc.Int64P(82)},
336+
{Address: "127.1.1.5", Port: misc.Int64P(85)},
337+
{Address: "127.1.1.4", Port: misc.Int64P(84)},
338+
{Address: "127.1.1.6", Port: misc.Int64P(86)},
339+
{Address: "127.1.1.7", Port: misc.Int64P(87)},
332340
}
333341
s.validateUpdateResult(expected)
334342
}
335343

336344
func (s *ServiceUpdateSuit) TestSecondUpdateWithNoChanges() {
337345
servers := []configuration.ServiceServer{
338-
{Address: "127.1.1.1", Port: 81},
339-
{Address: "127.1.1.2", Port: 82},
340-
{Address: "127.1.1.3", Port: 83},
341-
{Address: "127.1.1.4", Port: 84},
346+
{Address: "127.1.1.1", Port: misc.Int64P(81)},
347+
{Address: "127.1.1.2", Port: misc.Int64P(82)},
348+
{Address: "127.1.1.3", Port: misc.Int64P(83)},
349+
{Address: "127.1.1.4", Port: misc.Int64P(84)},
342350
}
343351
r, err := s.service.Update(servers)
344352
s.True(r)
@@ -378,7 +386,7 @@ func (s *ServiceUpdateSuit) generateServers(count int) []configuration.ServiceSe
378386
for i := 0; i < count; i++ {
379387
servers = append(servers, configuration.ServiceServer{
380388
Address: fmt.Sprintf("127.1.1.%d", i),
381-
Port: 80 + i,
389+
Port: misc.Int64P(80 + i),
382390
})
383391
}
384392
return servers

0 commit comments

Comments
 (0)