Skip to content

Commit 60e0b2f

Browse files
author
Maksim Konovalov
committed
pool: implemented Role Stringer interface
implemented Role Stringer interface for human-readable printing
1 parent f1d88dc commit 60e0b2f

File tree

8 files changed

+81
-40
lines changed

8 files changed

+81
-40
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@ Versioning](http://semver.org/spec/v2.0.0.html) except to the first release.
99
## [Unreleased]
1010

1111
### Added
12+
- Implemented Stringer interface for pool.Role type (#405).
1213
- Add err log to `ConnectionPool.Add()` in case, when unable to establish
1314
connection and ctx is not canceled;
1415
also added logs for error case of `ConnectionPool.tryConnect()` calls in
1516
`ConnectionPool.controller()` and `ConnectionPool.reconnect()`
1617
- Methods that are implemented but not included in the pooler interface (#395).
1718

1819
### Changed
19-
20+
- Renamed UnknownRole -> RoleUnknown; MasterRole -> RoleMaster; ReplicaRole -> RoleReplica (#405).
2021
### Fixed
2122

2223
## [2.1.0] - 2024-03-06

go.sum

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
21
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
32
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
43
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

pool/connection_pool.go

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ func newEndpoint(name string, dialer tarantool.Dialer, opts tarantool.Opts) *end
141141
opts: opts,
142142
notify: make(chan tarantool.ConnEvent, 100),
143143
conn: nil,
144-
role: UnknownRole,
144+
role: RoleUnknown,
145145
shutdown: make(chan struct{}),
146146
close: make(chan struct{}),
147147
closed: make(chan struct{}),
@@ -391,7 +391,7 @@ func (p *ConnectionPool) GetInfo() map[string]ConnectionInfo {
391391
if conn != nil {
392392
info[name] = ConnectionInfo{ConnectedNow: conn.ConnectedNow(), ConnRole: role}
393393
} else {
394-
info[name] = ConnectionInfo{ConnectedNow: false, ConnRole: UnknownRole}
394+
info[name] = ConnectionInfo{ConnectedNow: false, ConnRole: RoleUnknown}
395395
}
396396
}
397397

@@ -1034,45 +1034,45 @@ func (p *ConnectionPool) getConnectionRole(conn *tarantool.Connection) (Role, er
10341034
}
10351035

10361036
if err != nil {
1037-
return UnknownRole, err
1037+
return RoleUnknown, err
10381038
}
10391039
if len(data) < 1 {
1040-
return UnknownRole, ErrIncorrectResponse
1040+
return RoleUnknown, ErrIncorrectResponse
10411041
}
10421042

10431043
instanceStatus, ok := data[0].(map[interface{}]interface{})["status"]
10441044
if !ok {
1045-
return UnknownRole, ErrIncorrectResponse
1045+
return RoleUnknown, ErrIncorrectResponse
10461046
}
10471047
if instanceStatus != "running" {
1048-
return UnknownRole, ErrIncorrectStatus
1048+
return RoleUnknown, ErrIncorrectStatus
10491049
}
10501050

10511051
replicaRole, ok := data[0].(map[interface{}]interface{})[roFieldName]
10521052
if !ok {
1053-
return UnknownRole, ErrIncorrectResponse
1053+
return RoleUnknown, ErrIncorrectResponse
10541054
}
10551055

10561056
switch replicaRole {
10571057
case false:
1058-
return MasterRole, nil
1058+
return RoleMaster, nil
10591059
case true:
1060-
return ReplicaRole, nil
1060+
return RoleReplica, nil
10611061
}
10621062

1063-
return UnknownRole, nil
1063+
return RoleUnknown, nil
10641064
}
10651065

10661066
func (p *ConnectionPool) getConnectionFromPool(name string) (*tarantool.Connection, Role) {
10671067
if conn := p.rwPool.GetConnection(name); conn != nil {
1068-
return conn, MasterRole
1068+
return conn, RoleMaster
10691069
}
10701070

10711071
if conn := p.roPool.GetConnection(name); conn != nil {
1072-
return conn, ReplicaRole
1072+
return conn, RoleReplica
10731073
}
10741074

1075-
return p.anyPool.GetConnection(name), UnknownRole
1075+
return p.anyPool.GetConnection(name), RoleUnknown
10761076
}
10771077

10781078
func (p *ConnectionPool) deleteConnection(name string) {
@@ -1103,9 +1103,9 @@ func (p *ConnectionPool) addConnection(name string,
11031103
watch := false
11041104
switch watcher.mode {
11051105
case RW:
1106-
watch = role == MasterRole
1106+
watch = role == RoleMaster
11071107
case RO:
1108-
watch = role == ReplicaRole
1108+
watch = role == RoleReplica
11091109
default:
11101110
watch = true
11111111
}
@@ -1129,9 +1129,9 @@ func (p *ConnectionPool) addConnection(name string,
11291129
p.anyPool.AddConnection(name, conn)
11301130

11311131
switch role {
1132-
case MasterRole:
1132+
case RoleMaster:
11331133
p.rwPool.AddConnection(name, conn)
1134-
case ReplicaRole:
1134+
case RoleReplica:
11351135
p.roPool.AddConnection(name, conn)
11361136
}
11371137
return nil
@@ -1223,7 +1223,7 @@ func (p *ConnectionPool) updateConnection(e *endpoint) {
12231223
if !opened {
12241224
e.conn.Close()
12251225
e.conn = nil
1226-
e.role = UnknownRole
1226+
e.role = RoleUnknown
12271227
return
12281228
}
12291229

@@ -1234,7 +1234,7 @@ func (p *ConnectionPool) updateConnection(e *endpoint) {
12341234
e.conn.Close()
12351235
p.handlerDeactivated(e.name, e.conn, role)
12361236
e.conn = nil
1237-
e.role = UnknownRole
1237+
e.role = RoleUnknown
12381238
return
12391239
}
12401240

@@ -1244,7 +1244,7 @@ func (p *ConnectionPool) updateConnection(e *endpoint) {
12441244
e.conn.Close()
12451245
p.handlerDeactivated(e.name, e.conn, role)
12461246
e.conn = nil
1247-
e.role = UnknownRole
1247+
e.role = RoleUnknown
12481248
return
12491249
}
12501250
e.role = role
@@ -1258,7 +1258,7 @@ func (p *ConnectionPool) updateConnection(e *endpoint) {
12581258
e.conn.Close()
12591259
p.handlerDeactivated(e.name, e.conn, e.role)
12601260
e.conn = nil
1261-
e.role = UnknownRole
1261+
e.role = RoleUnknown
12621262
return
12631263
}
12641264
}
@@ -1272,7 +1272,7 @@ func (p *ConnectionPool) tryConnect(ctx context.Context, e *endpoint) error {
12721272
}
12731273

12741274
e.conn = nil
1275-
e.role = UnknownRole
1275+
e.role = RoleUnknown
12761276

12771277
connOpts := e.opts
12781278
connOpts.Notify = e.notify
@@ -1329,7 +1329,7 @@ func (p *ConnectionPool) reconnect(ctx context.Context, e *endpoint) {
13291329

13301330
p.handlerDeactivated(e.name, e.conn, e.role)
13311331
e.conn = nil
1332-
e.role = UnknownRole
1332+
e.role = RoleUnknown
13331333

13341334
if err := p.tryConnect(ctx, e); err != nil {
13351335
log.Printf("tarantool: reconnect to %s failed: %s\n", e.name, err)
@@ -1411,7 +1411,7 @@ func (p *ConnectionPool) controller(ctx context.Context, e *endpoint) {
14111411
p.poolsMutex.Unlock()
14121412
p.handlerDeactivated(e.name, e.conn, e.role)
14131413
e.conn = nil
1414-
e.role = UnknownRole
1414+
e.role = RoleUnknown
14151415
} else {
14161416
p.poolsMutex.Unlock()
14171417
}

pool/connection_pool_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,8 @@ func TestConnect_unavailable(t *testing.T) {
252252
require.NoError(t, err, "failed to create a pool")
253253
require.NotNilf(t, connPool, "pool is nil after Connect")
254254
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},
255+
servers[0]: pool.ConnectionInfo{ConnectedNow: false, ConnRole: pool.RoleUnknown},
256+
servers[1]: pool.ConnectionInfo{ConnectedNow: false, ConnRole: pool.RoleUnknown},
257257
}, connPool.GetInfo())
258258
}
259259

@@ -1016,17 +1016,17 @@ func (h *testHandler) Discovered(name string, conn *tarantool.Connection,
10161016
// discovered < 3 - initial open of connections
10171017
// discovered >= 3 - update a connection after a role update
10181018
if name == servers[0] {
1019-
if discovered < 3 && role != pool.MasterRole {
1019+
if discovered < 3 && role != pool.RoleMaster {
10201020
h.addErr(fmt.Errorf("unexpected init role %d for name %s", role, name))
10211021
}
1022-
if discovered >= 3 && role != pool.ReplicaRole {
1022+
if discovered >= 3 && role != pool.RoleReplica {
10231023
h.addErr(fmt.Errorf("unexpected updated role %d for name %s", role, name))
10241024
}
10251025
} else if name == servers[1] {
10261026
if discovered >= 3 {
10271027
h.addErr(fmt.Errorf("unexpected discovery for name %s", name))
10281028
}
1029-
if role != pool.ReplicaRole {
1029+
if role != pool.RoleReplica {
10301030
h.addErr(fmt.Errorf("unexpected role %d for name %s", role, name))
10311031
}
10321032
} else {
@@ -1047,15 +1047,15 @@ func (h *testHandler) Deactivated(name string, conn *tarantool.Connection,
10471047

10481048
if deactivated == 1 && name == servers[0] {
10491049
// A first close is a role update.
1050-
if role != pool.MasterRole {
1050+
if role != pool.RoleMaster {
10511051
h.addErr(fmt.Errorf("unexpected removed role %d for name %s", role, name))
10521052
}
10531053
return nil
10541054
}
10551055

10561056
if name == servers[0] || name == servers[1] {
10571057
// Close.
1058-
if role != pool.ReplicaRole {
1058+
if role != pool.RoleReplica {
10591059
h.addErr(fmt.Errorf("unexpected removed role %d for name %s", role, name))
10601060
}
10611061
} else {
@@ -1163,8 +1163,8 @@ func TestConnectionHandlerOpenError(t *testing.T) {
11631163
require.NoError(t, err, "failed to connect")
11641164
require.NotNil(t, connPool, "pool expected")
11651165
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},
1166+
servers[0]: pool.ConnectionInfo{ConnectedNow: false, ConnRole: pool.RoleUnknown},
1167+
servers[1]: pool.ConnectionInfo{ConnectedNow: false, ConnRole: pool.RoleUnknown},
11681168
}, connPool.GetInfo())
11691169
connPool.Close()
11701170

pool/const.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
//go:generate stringer -type=Role -trimprefix=Role
2+
13
package pool
24

35
/*
@@ -31,7 +33,7 @@ const (
3133
type Role uint32
3234

3335
const (
34-
UnknownRole Role = iota // A connection pool failed to discover mode of the instance.
35-
MasterRole // The instance is read-write mode.
36-
ReplicaRole // The instance is in read-only mode.
36+
RoleUnknown Role = iota // A connection pool failed to discover mode of the instance.
37+
RoleMaster // The instance is read-write mode.
38+
RoleReplica // The instance is in read-only mode.
3739
)

pool/const_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package pool
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/require"
7+
)
8+
9+
// TestRole_String checking that print is non-number(len = 1 ) Role.
10+
func TestRole_String(t *testing.T) {
11+
require.Equal(t, "Replica", RoleReplica.String())
12+
require.Equal(t, "Unknown", RoleUnknown.String())
13+
require.Equal(t, "Master", RoleMaster.String())
14+
}

pool/role_string.go

Lines changed: 25 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

queue/example_connection_pool_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func (h *QueueConnectionHandler) Discovered(name string, conn *tarantool.Connect
5353
return h.err
5454
}
5555

56-
master := role == pool.MasterRole
56+
master := role == pool.RoleMaster
5757

5858
q := queue.New(conn, h.name)
5959

@@ -115,7 +115,7 @@ func (h *QueueConnectionHandler) Discovered(name string, conn *tarantool.Connect
115115
// Deactivated doesn't do anything useful for the example.
116116
func (h *QueueConnectionHandler) Deactivated(name string, conn *tarantool.Connection,
117117
role pool.Role) error {
118-
if role == pool.MasterRole {
118+
if role == pool.RoleMaster {
119119
atomic.AddInt32(&h.masterCnt, -1)
120120
}
121121
return nil

0 commit comments

Comments
 (0)