Skip to content

Commit bcdf9c7

Browse files
author
maksim.konovalov
committed
pool: add Instance info to connection ConnectionInfo
The Instance info has been added to ConnectionInfo, which is necessary to monitor the current state of the pool. This should help implement dynamic tracking of tarantool topology changes.
1 parent d8e2284 commit bcdf9c7

File tree

3 files changed

+66
-9
lines changed

3 files changed

+66
-9
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Versioning](http://semver.org/spec/v2.0.0.html) except to the first release.
1111
### Added
1212

1313
- Extend box with replication information (#427).
14+
- The Instance info has been added to ConnectionInfo for GetInfo response (#429).
1415

1516
### Changed
1617

pool/connection_pool.go

+18-3
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ ConnectionInfo structure for information about connection statuses:
9393
type ConnectionInfo struct {
9494
ConnectedNow bool
9595
ConnRole Role
96+
Instance Instance
9697
}
9798

9899
/*
@@ -393,12 +394,26 @@ func (p *ConnectionPool) GetInfo() map[string]ConnectionInfo {
393394
return info
394395
}
395396

396-
for name := range p.ends {
397+
for name, end := range p.ends {
397398
conn, role := p.getConnectionFromPool(name)
398399
if conn != nil {
399-
info[name] = ConnectionInfo{ConnectedNow: conn.ConnectedNow(), ConnRole: role}
400+
info[name] = ConnectionInfo{
401+
ConnectedNow: conn.ConnectedNow(),
402+
ConnRole: role,
403+
Instance: Instance{
404+
Name: name,
405+
Dialer: end.dialer,
406+
Opts: end.opts,
407+
}}
400408
} else {
401-
info[name] = ConnectionInfo{ConnectedNow: false, ConnRole: UnknownRole}
409+
info[name] = ConnectionInfo{
410+
ConnectedNow: false,
411+
ConnRole: UnknownRole,
412+
Instance: Instance{
413+
Name: name,
414+
Dialer: end.dialer,
415+
Opts: end.opts,
416+
}}
402417
}
403418
}
404419

pool/connection_pool_test.go

+47-6
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,9 @@ func TestConnect_empty(t *testing.T) {
242242
func TestConnect_unavailable(t *testing.T) {
243243
servers := []string{"err1", "err2"}
244244
ctx, cancel := test_helpers.GetPoolConnectContext()
245-
connPool, err := pool.Connect(ctx, makeInstances([]string{"err1", "err2"}, connOpts))
245+
insts := makeInstances([]string{"err1", "err2"}, connOpts)
246+
247+
connPool, err := pool.Connect(ctx, insts)
246248
cancel()
247249

248250
if connPool != nil {
@@ -252,8 +254,10 @@ func TestConnect_unavailable(t *testing.T) {
252254
require.NoError(t, err, "failed to create a pool")
253255
require.NotNilf(t, connPool, "pool is nil after Connect")
254256
require.Equal(t, map[string]pool.ConnectionInfo{
255-
servers[0]: pool.ConnectionInfo{ConnectedNow: false, ConnRole: pool.UnknownRole},
256-
servers[1]: pool.ConnectionInfo{ConnectedNow: false, ConnRole: pool.UnknownRole},
257+
servers[0]: pool.ConnectionInfo{
258+
ConnectedNow: false, ConnRole: pool.UnknownRole, Instance: insts[0]},
259+
servers[1]: pool.ConnectionInfo{
260+
ConnectedNow: false, ConnRole: pool.UnknownRole, Instance: insts[1]},
257261
}, connPool.GetInfo())
258262
}
259263

@@ -1156,15 +1160,19 @@ func TestConnectionHandlerOpenError(t *testing.T) {
11561160
}
11571161
ctx, cancel := test_helpers.GetPoolConnectContext()
11581162
defer cancel()
1159-
connPool, err := pool.ConnectWithOpts(ctx, makeInstances(poolServers, connOpts), poolOpts)
1163+
1164+
insts := makeInstances(poolServers, connOpts)
1165+
connPool, err := pool.ConnectWithOpts(ctx, insts, poolOpts)
11601166
if err == nil {
11611167
defer connPool.Close()
11621168
}
11631169
require.NoError(t, err, "failed to connect")
11641170
require.NotNil(t, connPool, "pool expected")
11651171
require.Equal(t, map[string]pool.ConnectionInfo{
1166-
servers[0]: pool.ConnectionInfo{ConnectedNow: false, ConnRole: pool.UnknownRole},
1167-
servers[1]: pool.ConnectionInfo{ConnectedNow: false, ConnRole: pool.UnknownRole},
1172+
servers[0]: pool.ConnectionInfo{
1173+
ConnectedNow: false, ConnRole: pool.UnknownRole, Instance: insts[0]},
1174+
servers[1]: pool.ConnectionInfo{
1175+
ConnectedNow: false, ConnRole: pool.UnknownRole, Instance: insts[1]},
11681176
}, connPool.GetInfo())
11691177
connPool.Close()
11701178

@@ -3495,6 +3503,39 @@ func runTestMain(m *testing.M) int {
34953503
return m.Run()
34963504
}
34973505

3506+
func TestConnectionPool_GetInfo(t *testing.T) {
3507+
t.Run("equal instance info", func(t *testing.T) {
3508+
var tCases [][]pool.Instance
3509+
3510+
tCases = append(tCases, makeInstances([]string{servers[0], servers[1]}, connOpts))
3511+
tCases = append(tCases, makeInstances([]string{
3512+
servers[0],
3513+
servers[1],
3514+
servers[3]},
3515+
connOpts))
3516+
tCases = append(tCases, makeInstances([]string{servers[0]}, connOpts))
3517+
3518+
for _, tc := range tCases {
3519+
ctx, cancel := test_helpers.GetPoolConnectContext()
3520+
connPool, err := pool.Connect(ctx, tc)
3521+
cancel()
3522+
require.Nilf(t, err, "failed to connect")
3523+
require.NotNilf(t, connPool, "conn is nil after Connect")
3524+
3525+
info := connPool.GetInfo()
3526+
3527+
var infoInstances []pool.Instance
3528+
3529+
for _, infoInst := range info {
3530+
infoInstances = append(infoInstances, infoInst.Instance)
3531+
}
3532+
3533+
require.ElementsMatch(t, tc, infoInstances)
3534+
connPool.Close()
3535+
}
3536+
})
3537+
}
3538+
34983539
func TestMain(m *testing.M) {
34993540
code := runTestMain(m)
35003541
os.Exit(code)

0 commit comments

Comments
 (0)